123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761 |
- #include "main.h"
- #include "./toolbarAddress.h"
- #include "./toolbar.h"
- #include "./toolbarEditbox.h"
- #include "./resource.h"
- #include "./graphics.h"
- #include "./menu.h"
- #include "./ifc_imageloader.h"
- #include "./addressEncoder.h"
- #include <wininet.h>
- //#include <shlwapi.h>
- #include <strsafe.h>
- #define ADDRESSBAR_MINWIDTH 96
- UINT minWidth;
- HBITMAP bitmap;
- INT iconHeight;
- INT iconWidth;
- INT textHeight;
- INT textMargin;
- COLORREF rgbText;
- COLORREF rgbBk;
- HWND hEditor;
- ToolbarAddress::ToolbarAddress(LPCSTR pszName, UINT nStyle) :
- ToolbarItem(pszName, nStyle, ICON_NONE, NULL, NULL),
- minWidth(ADDRESSBAR_MINWIDTH), bitmap(NULL), iconHeight(0), iconWidth(0),
- textHeight(12), textMargin(0), rgbText(0x000000), rgbBk(0xFFFFFF), hEditor(NULL)
- {
- }
- ToolbarAddress::~ToolbarAddress()
- {
- if (NULL != bitmap)
- DeleteObject(bitmap);
- if (NULL != hEditor)
- DestroyWindow(hEditor);
- }
- ToolbarItem* CALLBACK ToolbarAddress::CreateInstance(ToolbarItem::Template *item)
- {
- if (NULL == item)
- return NULL;
- return new ToolbarAddress( (NULL != item->name) ? item->name : TOOLCLS_ADDRESSBAR,
- item->style);
- }
- BOOL ToolbarAddress::ActivateEditor(HWND hToolbar, const POINT *ppt)
- {
- if (NULL == hEditor)
- {
- UINT editorStyle = WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_TABSTOP |
- ES_LEFT | ES_NOHIDESEL | ES_AUTOHSCROLL;
-
- if (0 != (styleAddressReadonly & style))
- editorStyle |= ES_READONLY;
-
- hEditor = CreateWindowEx(WS_EX_NOPARENTNOTIFY, L"Edit", text, editorStyle, 0, 0, 0, 0, hToolbar, NULL, NULL, 0);
- if (NULL == hEditor)
- return FALSE;
-
- ToolbarEditbox_AttachWindow(hEditor, this);
- HFONT hFont = (HFONT)SendMessage(hToolbar, WM_GETFONT, 0, 0L);
- SendMessage(hEditor, WM_SETFONT, (WPARAM)hFont, 0L);
- SendMessage(hEditor, EM_SETMARGINS, (WPARAM)(EC_LEFTMARGIN | EC_RIGHTMARGIN), MAKELPARAM(textMargin, textMargin));
- }
- UINT editorStyle = GetWindowStyle(hEditor);
- if (0 == (WS_VISIBLE & editorStyle))
- {
- RECT textRect;
- CopyRect(&textRect, &rect);
- InflateRect(&textRect, -((iconWidth -1)/2), -((iconHeight -1)/2));
- textRect.top = textRect.bottom - textHeight;
- SetWindowPos(hEditor, NULL, textRect.left, textRect.top,
- textRect.right - textRect.left, textRect.bottom - textRect.top,
- SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOREDRAW);
-
- UINT editorStyle = GetWindowStyle(hEditor);
- if (0 == (WS_VISIBLE & editorStyle))
- SetWindowLongPtr(hEditor, GWL_STYLE, editorStyle | WS_VISIBLE);
-
- }
- if (IsWindowVisible(hEditor))
- {
- if (hEditor != GetFocus())
- ::SetFocus(hEditor);
- if (NULL != ppt)
- {
- POINT editorPt = *ppt;
- MapWindowPoints(hToolbar, hEditor, &editorPt, 1);
- PostMessage(hEditor, WM_LBUTTONDOWN, (WPARAM)(MK_LBUTTON), MAKELPARAM(editorPt.x, editorPt.y));
- }
- else
- {
- SendMessage(hEditor, NTEBM_SELECTALL, 0, 0);
- }
-
- InvalidateRect(hEditor, NULL, FALSE);
- }
- InvalidateRect(hToolbar, &rect, FALSE);
- return TRUE;
- }
- UINT ToolbarAddress::GetStyle()
- {
- UINT filteredStyle = style;
- if (0 != (styleAddressReadonly & filteredStyle))
- filteredStyle &= ~styleTabstop;
- return filteredStyle;
- }
- void ToolbarAddress::SetStyle(HWND hToolbar, UINT newStyle, UINT styleMask)
- {
- ToolbarItem::SetStyle(hToolbar, newStyle, styleMask);
- if (NULL != hEditor)
- {
- if (0 != (stateHidden & styleMask) && 0 != (stateHidden & style))
- {
- if (GetFocus() == hEditor)
- EditboxNavigateNextCtrl(hEditor, TRUE);
- else
- DestroyWindow(hEditor);
- }
-
- if (0 != (styleAddressReadonly & styleMask))
- {
- UINT editorStyle = GetWindowStyle(hEditor);
- if (0 == (styleAddressReadonly & style) != 0 == (ES_READONLY & editorStyle))
- SendMessage(hEditor, EM_SETREADONLY, (WPARAM)(0 != (styleAddressReadonly & style)), 0L);
- }
- }
- }
- BOOL ToolbarAddress::SetRect(const RECT *prc)
- {
- BOOL result = ToolbarItem::SetRect(prc);
- if (FALSE == result) return result;
-
- if (NULL != hEditor)
- {
- UINT editorStyle = GetWindowStyle(hEditor);
- if (0 != (WS_VISIBLE & editorStyle))
- {
- RECT textRect;
- CopyRect(&textRect, &rect);
- InflateRect(&textRect, -((iconWidth -1)/2), -((iconHeight -1)/2));
- textRect.top = textRect.bottom - textHeight;
-
- SetWindowPos(hEditor, NULL, textRect.left, textRect.top,
- textRect.right - textRect.left, textRect.bottom - textRect.top,
- SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOREDRAW);
- }
- }
- return result;
- }
- BOOL ToolbarAddress::SetRectEmpty()
- {
- BOOL result = ToolbarItem::SetRectEmpty();
- if (FALSE == result) return result;
- if (NULL != hEditor)
- {
- if (GetFocus() == hEditor)
- EditboxNavigateNextCtrl(hEditor, TRUE);
- else
- DestroyWindow(hEditor);
- }
- return result;
- }
- BOOL ToolbarAddress::SetDescription(HWND hToolbar, LPCWSTR pszDescription)
- {
- if (NULL != pszDescription && FALSE == IS_INTRESOURCE(pszDescription))
- {
- if (CSTR_EQUAL == CompareString(CSTR_INVARIANT, 0, L"about:blank", -1, pszDescription, -1))
- pszDescription = NULL;
- }
-
- BOOL result = ToolbarItem::SetDescription(hToolbar, pszDescription);
- if (NULL != hToolbar)
- InvalidateRect(hToolbar, &rect, TRUE);
- return result;
- }
- BOOL ToolbarAddress::AdjustRect(HWND hToolbar, RECT *proposedRect)
- {
- if (0 == (styleFlexible & style) ||
- proposedRect->right < proposedRect->left ||
- ((UINT)(proposedRect->right - proposedRect->left)) < minWidth)
- {
- proposedRect->right = proposedRect->left + minWidth;
- }
- //INT iconCY = Toolbar_GetImageListHeight(hToolbar);
- INT height = textHeight + iconHeight;
- INT t = ((proposedRect->bottom - proposedRect->top) - height);
- proposedRect->top += (t/2 + t%2);
- proposedRect->bottom = proposedRect->top + height;
-
- return TRUE;
- }
- BOOL ToolbarAddress::Paint(HWND hToolbar, HDC hdc, const RECT *paintRect, UINT state)
- {
-
- if (NULL == bitmap)
- return FALSE;
-
- RECT blitRect;
- if (!IntersectRect(&blitRect, paintRect))
- return TRUE;
-
- BOOL success = FALSE;
- HDC hdcSrc = CreateCompatibleDC(hdc);
- UINT editorStyle = (NULL != hEditor) ? GetWindowStyle(hEditor) : 0;
- INT offsetY;
- if (0 != (stateDisabled & state) || 0 != (styleAddressReadonly & style))
- offsetY = 2* iconHeight;
- else if (WS_VISIBLE == ((WS_VISIBLE | ES_READONLY | WS_DISABLED) & editorStyle))
- offsetY = 1 * iconHeight;
- else
- offsetY = 0;
- INT partCY = (iconHeight - 1)/2;
- INT partCX = (iconWidth - 1)/2;
- RECT textRect;
- CopyRect(&textRect, &rect);
- InflateRect(&textRect, -partCX, -partCY);
- INT clipRgnCode = -1;
- HRGN clipRgn = CreateRectRgn(0, 0, 0, 0);
- if (NULL != clipRgn)
- {
- clipRgnCode = GetClipRgn(hdc, clipRgn);
- ExcludeClipRect(hdc, textRect.left, textRect.top, textRect.right, textRect.bottom);
- }
- if (NULL != hdcSrc)
- {
- success = TRUE;
- HBITMAP hbmpOld = (HBITMAP)SelectObject(hdcSrc, bitmap);
- // left-top
- BitBlt(hdc, rect.left, rect.top, partCX, partCY, hdcSrc, 0, offsetY + 0, SRCCOPY);
- // right-top
- BitBlt(hdc, rect.right - partCX, rect.top, partCX, partCY, hdcSrc, iconWidth - partCX, offsetY + 0, SRCCOPY);
- // right-bottom
- BitBlt(hdc, rect.right - partCX, rect.bottom - partCY, partCX, partCY, hdcSrc, iconWidth - partCX, offsetY + (iconHeight - partCY), SRCCOPY);
- // left-bottom
- BitBlt(hdc, rect.left, rect.bottom - partCY, partCX, partCY, hdcSrc, 0, offsetY + (iconHeight - partCY), SRCCOPY);
-
- INT stretchMode = SetStretchBltMode(hdc, COLORONCOLOR);
- StretchBlt(hdc, rect.left, rect.top + partCY, partCX, (rect.bottom - rect.top) - 2*partCY, hdcSrc, 0, offsetY + partCY, partCX, 1, SRCCOPY);
- StretchBlt(hdc, rect.right - partCX, rect.top + partCY, partCX, (rect.bottom - rect.top) - 2*partCY, hdcSrc, iconWidth - partCX, offsetY + partCY, partCX, 1, SRCCOPY);
- StretchBlt(hdc, rect.left + partCX, rect.top, (rect.right - rect.left) - 2 * partCX, partCY, hdcSrc, partCX, offsetY + 0, 1, partCY, SRCCOPY);
- StretchBlt(hdc, rect.left + partCX, rect.bottom - partCY, (rect.right - rect.left) - 2 * partCX, partCY, hdcSrc, partCX, offsetY + (iconHeight - partCY), 1, partCY, SRCCOPY);
-
- if (COLORONCOLOR != stretchMode)
- SetStretchBltMode(hdc, stretchMode);
- SelectObject(hdcSrc, hbmpOld);
- DeleteDC(hdcSrc);
- }
-
- if (clipRgnCode >= 0)
- SelectClipRgn(hdc, ( 0 != clipRgnCode) ? (clipRgn ? clipRgn : NULL) : NULL);
-
- if (NULL != clipRgn)
- DeleteObject(clipRgn);
- COLORREF rgbTextOrig, rgbBkOrig;
-
- if (0 == (stateDisabled & state) && 0 == (styleAddressReadonly & style))
- {
- rgbTextOrig = SetTextColor(hdc, rgbText);
- rgbBkOrig = SetBkColor(hdc, rgbBk);
- }
- else
- {
- rgbTextOrig = GetTextColor(hdc);
- rgbBkOrig = GetBkColor(hdc);
- }
- LPCWSTR pszText;
- pszText = ( 0 == (styleAddressShowReal & style) && NULL != description) ? description : text;
-
- UINT cchText = (NULL != pszText && FALSE == IS_INTRESOURCE(pszText)) ? lstrlen(pszText) : 0;
- INT textAlign = SetTextAlign(hdc, TA_LEFT | TA_BOTTOM);
- ExtTextOut(hdc, textRect.left + textMargin, textRect.bottom, ETO_OPAQUE | ETO_CLIPPED, &textRect, pszText, cchText, NULL);
- if (textAlign != (TA_LEFT | TA_BOTTOM)) SetTextAlign(hdc, textAlign);
- if (rgbText != rgbTextOrig) SetTextColor(hdc, rgbTextOrig);
- if (rgbBk != rgbBkOrig) SetBkColor(hdc, rgbBkOrig);
-
-
- return success;
- }
- INT ToolbarAddress::GetTip(LPTSTR pszBuffer, INT cchBufferMax)
- {
- return 0;
- }
- HRESULT ToolbarAddress::GetText(LPWSTR pszBuffer, UINT cchBufferMax)
- {
- if (NULL == pszBuffer) return E_POINTER;
- if (0 == cchBufferMax) return E_OUTOFMEMORY;
- if (NULL == text)
- {
- *pszBuffer = L'\0';
- return S_OK;
- }
- if (IS_INTRESOURCE(text))
- return Plugin_CopyResString(pszBuffer, cchBufferMax, text);
-
- return AddressEncoder_EncodeString(text, pszBuffer,(size_t*)&cchBufferMax, ICU_BROWSER_MODE);
- }
- HRESULT ToolbarAddress::GetTextLength(size_t *pcchLength)
- {
- if (NULL == pcchLength)
- return E_POINTER;
- if (NULL == text)
- {
- *pcchLength = 0;
- return S_OK;
- }
- if (IS_INTRESOURCE(text))
- {
- WCHAR szBuffer[8192] = {0};
- HRESULT hr = Plugin_CopyResString(szBuffer, ARRAYSIZE(szBuffer), text);
- *pcchLength = (FAILED(hr)) ? 0 : lstrlen(szBuffer);
- return hr;
- }
- WCHAR szBuffer[1] = {0};
- size_t cchBufferMax = ARRAYSIZE(szBuffer);
- HRESULT hr = AddressEncoder_EncodeString(text, szBuffer, &cchBufferMax, ICU_BROWSER_MODE);
- if (SUCCEEDED(hr) || ENC_E_INSUFFICIENT_BUFFER == hr)
- {
- if (0 != cchBufferMax) cchBufferMax--;
- *pcchLength = cchBufferMax;
- hr = S_OK;
- }
- else
- {
- hr = E_FAIL;
- *pcchLength = 0;
- }
- return hr;
- }
- void ToolbarAddress::MouseMove(HWND hToolbar, UINT mouseFlags, POINT pt)
- {
- // UINT styleNew = (PtInItem(pt)) ? stateHighlighted : 0;
- // SetStyle(hToolbar, styleNew, stateHighlighted);
-
- }
- void ToolbarAddress::MouseLeave(HWND hToolbar)
- {
- if (0 != (stateHighlighted & style))
- {
- SetStyle(hToolbar, 0, stateHighlighted);
- }
- }
- void ToolbarAddress::LButtonDown(HWND hToolbar, UINT mouseFlags, POINT pt)
- {
- ActivateEditor(hToolbar, &pt);
- }
- void ToolbarAddress::UpdateSkin(HWND hToolbar)
- {
- if (NULL != bitmap)
- {
- DeleteObject(bitmap);
- bitmap = NULL;
- }
-
- iconHeight = 0;
- iconWidth = 0;
- COLORREF rgbToolBk = Toolbar_GetBkColor(hToolbar);
- rgbText = Toolbar_GetEditColor(hToolbar);
- rgbBk = Toolbar_GetEditBkColor(hToolbar);
- ifc_omimageloader *loader;
- if (SUCCEEDED(Plugin_QueryImageLoader(Plugin_GetInstance(), MAKEINTRESOURCE(IDR_TOOLBARADDRESS_IMAGE), TRUE, &loader)))
- {
- BITMAPINFOHEADER headerInfo;
- BYTE *pixelData;
- if (SUCCEEDED(loader->LoadBitmapEx(&bitmap, &headerInfo, (void**)&pixelData)))
- {
- if (headerInfo.biHeight < 0) headerInfo.biHeight = -headerInfo.biHeight;
- iconHeight = headerInfo.biHeight/3;
- iconWidth = headerInfo.biWidth;
-
- Image_Colorize(pixelData, headerInfo.biWidth, headerInfo.biHeight, headerInfo.biBitCount,
- rgbToolBk, Toolbar_GetFgColor(hToolbar), FALSE);
-
- // disabled
- Image_BlendOnColorEx(pixelData, headerInfo.biWidth, headerInfo.biHeight,
- 0, 0, headerInfo.biWidth, iconHeight, headerInfo.biBitCount, FALSE, rgbToolBk);
- // highlighted
- Image_BlendOnColorEx(pixelData, headerInfo.biWidth, headerInfo.biHeight,
- 0, 1*iconHeight, headerInfo.biWidth, iconHeight, headerInfo.biBitCount, FALSE, rgbBk);
- // normal
- Image_BlendOnColorEx(pixelData, headerInfo.biWidth, headerInfo.biHeight,
- 0, 2*iconHeight, headerInfo.biWidth, iconHeight, headerInfo.biBitCount, FALSE, rgbBk);
- }
- loader->Release();
- }
- textHeight = 12;
- HFONT toolbarFont = (HFONT)SendMessage(hToolbar, WM_GETFONT, 0, 0L);
- if (NULL != toolbarFont)
- {
- HDC hdc = GetDCEx(hToolbar, NULL, DCX_CACHE | DCX_NORESETATTRS);
- if (NULL != hdc)
- {
- HFONT originalFont = (HFONT)SelectObject(hdc, toolbarFont);
- TEXTMETRIC tm;
- if (GetTextMetrics(hdc, &tm))
- {
- textHeight = tm.tmHeight;
- textMargin = tm.tmAveCharWidth/2 + tm.tmAveCharWidth%2;
- }
-
- SelectObject(hdc, originalFont);
- ReleaseDC(hToolbar, hdc);
- }
- if (NULL != hEditor)
- {
- UINT editorStyle = GetWindowStyle(hEditor);
- if (0 != (WS_VISIBLE & editorStyle))
- {
- SendMessage(hEditor, WM_SETFONT, (WPARAM)toolbarFont, 0L);
- SendMessage(hEditor, EM_SETMARGINS, (WPARAM)(EC_LEFTMARGIN | EC_RIGHTMARGIN), MAKELPARAM(textMargin, textMargin));
- }
- }
- }
- }
- BOOL ToolbarAddress::FillMenuInfo(HWND hToolbar, MENUITEMINFO *pmii, LPWSTR pszBuffer, INT cchBufferMax)
- {
- return FALSE;
- }
- void ToolbarAddress::CommandSent(HWND hToolbar, INT commandId)
- {
- if (NULL != hEditor && ID_ADDRESSBAR_CHANGED != commandId)
- {
- if (GetFocus() == hEditor)
- EditboxNavigateNextCtrl(hEditor, TRUE);
- else
- DestroyWindow(hEditor);
- }
- }
- BOOL ToolbarAddress::SetValueStr(HWND hToolbar, LPCWSTR value)
- {
- Plugin_FreeResString(text);
-
- if (NULL != value)
- {
- if (FALSE != IS_INTRESOURCE(value) || FAILED(AddressEncoder_DecodeString(value, &text)))
- text = Plugin_DuplicateResString(value);
- }
- else
- text = NULL;
-
- RECT textRect;
- CopyRect(&textRect, &rect);
- InflateRect(&textRect, -((iconWidth -1)/2), -(iconHeight - 1)/2);
- InvalidateRect(hToolbar, &textRect, TRUE);
- return TRUE;
- }
- BOOL ToolbarAddress::SetClipboardText(HWND hToolbar, LPCWSTR pszText)
- {
- if(FALSE == OpenClipboard(hToolbar))
- return FALSE;
- EmptyClipboard();
-
- INT cchLen;
- HGLOBAL hMemory;
-
- cchLen = (NULL != pszText) ? lstrlenW(pszText) : 0;
- hMemory = (0 != cchLen) ? GlobalAlloc(GMEM_MOVEABLE, (cchLen + 1) * sizeof(WCHAR)) : NULL;
- if (NULL != hMemory)
- {
- LPWSTR pszDest = (LPWSTR)GlobalLock(hMemory);
- CopyMemory(pszDest, pszText, (cchLen + 1) * sizeof(WCHAR));
- GlobalUnlock(hMemory);
- }
- SetClipboardData(CF_UNICODETEXT, hMemory);
-
- LPSTR pszTextAnsi = (NULL != pszText) ? Plugin_WideCharToMultiByte(CP_ACP, 0, pszText, -1, NULL, NULL) : NULL;
- cchLen = (NULL != pszTextAnsi) ? lstrlenA(pszTextAnsi) : 0;
- hMemory = (0 != cchLen) ? GlobalAlloc(GMEM_MOVEABLE, (cchLen + 1) * sizeof(CHAR)) : NULL;
- if (NULL != hMemory)
- {
- LPWSTR pszDest = (LPWSTR)GlobalLock(hMemory);
- CopyMemory(pszDest, pszTextAnsi, (cchLen + 1) * sizeof(CHAR));
- GlobalUnlock(hMemory);
- }
- SetClipboardData(CF_TEXT, hMemory);
- CloseClipboard();
- return TRUE;
- }
- BOOL ToolbarAddress::DisplayContextMenu(HWND hToolbar, INT x, INT y)
- {
- HMENU hMenu = Menu_GetMenu(MENU_ADDRESSBAR, 0);
- if (NULL != hMenu)
- {
- UINT fEnable = MF_BYCOMMAND;
- if (0 != (styleAddressReadonly & style))
- fEnable |= (MF_DISABLED | MF_GRAYED);
- else
- fEnable |= MF_ENABLED;
- EnableMenuItem(hMenu, ID_ADDRESSBAR_EDITADDRESS, fEnable);
- INT commandId = Menu_TrackPopup(hMenu, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RETURNCMD, x, y, hToolbar, NULL);
- switch(commandId)
- {
- case ID_ADDRESSBAR_COPY:
- if (0 == (styleAddressShowReal & style) && NULL != description)
- {
- UINT cchTextMax = (IS_INTRESOURCE(description)) ? 2048 : (lstrlen(description) + 1);
- LPWSTR pszText = Plugin_MallocString(cchTextMax);
- if (NULL != pszText && FAILED(GetDescription(pszText, cchTextMax)))
- {
- Plugin_FreeString(pszText);
- pszText = NULL;
- }
- SetClipboardText(hToolbar, pszText);
- Plugin_FreeString(pszText);
- break;
- }
- // let it go
- case ID_ADDRESSBAR_COPYADDRESS:
- {
- size_t cchTextMax;
- if (SUCCEEDED(GetTextLength(&cchTextMax)))
- {
- cchTextMax++;
- LPWSTR pszText = Plugin_MallocString(cchTextMax);
- if (NULL != pszText && FAILED(GetText(pszText, (UINT)cchTextMax)))
- {
- Plugin_FreeString(pszText);
- pszText = NULL;
- }
-
- SetClipboardText(hToolbar, pszText);
- Plugin_FreeString(pszText);
- }
- }
- break;
- case ID_ADDRESSBAR_EDITADDRESS:
- ActivateEditor(hToolbar, NULL);
- break;
- }
- Menu_ReleaseMenu(hMenu, MENU_ADDRESSBAR);
- }
- return TRUE;
- }
- void ToolbarAddress::SetFocus(HWND hToolbar, ToolbarItem *focusItem, BOOL fSet)
- {
- ActivateEditor(hToolbar, NULL);
- }
- BOOL ToolbarAddress::SetCursor(HWND hToolbar, HWND hCursor, UINT hitTest, UINT messageId)
- {
- RECT textRect;
- CopyRect(&textRect, &rect);
- InflateRect(&textRect, -((iconWidth -1)/2), -(iconHeight - 1)/2);
- UINT messagePos = GetMessagePos();
- POINTS messagePts = MAKEPOINTS(messagePos);
- POINT messagePt;
- POINTSTOPOINT(messagePt, messagePts);
- MapWindowPoints(HWND_DESKTOP, hToolbar, &messagePt, 1);
- if (::PtInRect(&textRect, messagePt))
- {
- HCURSOR cursor = LoadCursor(NULL, IDC_IBEAM);
- if (NULL != cursor)
- {
- ::SetCursor(cursor);
- return TRUE;
- }
- }
- return FALSE;
- }
- void ToolbarAddress::EditboxDestroyed(HWND hwnd)
- {
- if (hEditor == hwnd)
- {
- hEditor = NULL;
-
- HWND hToolbar = GetParent(hwnd);
- if (NULL != hToolbar)
- {
- InvalidateRect(hToolbar, &rect, FALSE);
- Toolbar_CheckHide(hToolbar, TRUE);
- }
- }
- }
- BOOL ToolbarAddress::EditboxKillFocus(HWND hwnd, HWND hFocus)
- {
- DestroyWindow(hwnd);
- return TRUE;
- }
- void ToolbarAddress::EditboxResetText(HWND hwnd)
- {
- UINT editboxStyle = GetWindowStyle(hwnd);
- if (0 != (WS_VISIBLE & editboxStyle))
- SetWindowLongPtr(hwnd, GWL_STYLE, editboxStyle & ~WS_VISIBLE);
- SetWindowText(hwnd, text);
- SendMessage(hEditor, NTEBM_SELECTALL, 0, 0L);
-
- if (0 != (WS_VISIBLE & editboxStyle))
- {
- UINT editboxStyle = GetWindowStyle(hwnd);
- if (0 == (WS_VISIBLE & editboxStyle))
- SetWindowLongPtr(hwnd, GWL_STYLE, editboxStyle | WS_VISIBLE);
-
- InvalidateRect(hwnd, NULL, FALSE);
- }
- }
- void ToolbarAddress::EditboxNavigateNextCtrl(HWND hwnd, BOOL fForward)
- {
- HWND hToolbar = GetParent(hwnd);
- if (NULL != hToolbar)
- {
- INT itemIndex = Toolbar_GetNextTabItem(hToolbar, name, (FALSE == fForward));
- if (ITEM_ERR != itemIndex)
- {
- if (FALSE != Toolbar_NextItem(hToolbar, MAKEINTRESOURCE(itemIndex), TRUE))
- {
- ::SetFocus(hToolbar);
- return;
- }
- }
- HWND hParent = GetAncestor(hToolbar, GA_PARENT);
- while(NULL != hParent &&
- 0 != (WS_CHILD & GetWindowStyle(hParent)) &&
- 0 != (WS_EX_CONTROLPARENT & GetWindowStyleEx(hParent)))
- {
- HWND hTest = GetAncestor(hParent, GA_PARENT);
- if (NULL == hTest) break;
- hParent = hTest;
- }
-
- if (NULL != hParent)
- {
- HWND hFocus = GetNextDlgTabItem(hParent, hToolbar, (FALSE == fForward));
- if (NULL != hFocus) ::SetFocus(hFocus);
- }
- }
- }
- void ToolbarAddress::EditboxAcceptText(HWND hwnd)
- {
- UINT cchLenMax = GetWindowTextLength(hwnd);
- if (0 == cchLenMax) return;
- cchLenMax++;
- Plugin_FreeResString(text);
- text = Plugin_MallocString(cchLenMax);
- if (NULL != text)
- {
- INT cchText = GetWindowText(hwnd, text, cchLenMax);
- if (0 != cchText)
- {
- LPCWSTR begin, end;
- begin = text;
- end = text + cchText + 1;
- while (L' ' == *begin && begin != end) begin++;
- while (L' ' == *end && begin != end) end--;
- if (end <= begin) return;
- }
- }
-
- HWND hToolbar = GetParent(hwnd);
- if (NULL != hToolbar)
- {
- Toolbar_SendCommand(hToolbar, ID_ADDRESSBAR_CHANGED);
- }
- EditboxNavigateNextCtrl(hwnd, TRUE);
- }
- BOOL ToolbarAddress::EditboxKeyDown(HWND hwnd, UINT vKey, UINT state)
- {
- switch(vKey)
- {
- case VK_UP:
- case VK_DOWN:
- return TRUE;
- }
- return FALSE;
- }
- BOOL ToolbarAddress::EditboxKeyUp(HWND hwnd, UINT vKey, UINT state)
- {
- return FALSE;
- }
- BOOL ToolbarAddress::EditboxPreviewChar(HWND hwnd, UINT vKey, UINT state)
- {
- return FALSE;
- }
|