src/windows/native/sun/windows/awt_TextArea.cpp
Print this page
@@ -72,139 +72,14 @@
m_hEditCtrl = NULL;
}
AwtTextComponent::Dispose();
}
-LPCTSTR AwtTextArea::GetClassName() {
- static BOOL richedLibraryLoaded = FALSE;
- if (!richedLibraryLoaded) {
- JDK_LoadSystemLibrary("RICHED20.DLL");
- richedLibraryLoaded = TRUE;
- }
- return RICHEDIT_CLASS;
-}
-
/* Create a new AwtTextArea object and window. */
AwtTextArea* AwtTextArea::Create(jobject peer, jobject parent)
{
- JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
-
- jobject target = NULL;
- AwtTextArea* c = NULL;
-
- try {
- if (env->EnsureLocalCapacity(1) < 0) {
- return NULL;
- }
-
- PDATA pData;
- AwtCanvas* awtParent;
- JNI_CHECK_PEER_GOTO(parent, done);
-
- awtParent = (AwtCanvas*)pData;
- JNI_CHECK_NULL_GOTO(awtParent, "null awtParent", done);
-
- target = env->GetObjectField(peer, AwtObject::targetID);
- JNI_CHECK_NULL_GOTO(target, "null target", done);
-
- c = new AwtTextArea();
-
- {
- /* Adjust style for scrollbar visibility and word wrap */
- DWORD scroll_style;
- jint scrollbarVisibility =
- env->GetIntField(target, AwtTextArea::scrollbarVisibilityID);
-
- switch (scrollbarVisibility) {
- case java_awt_TextArea_SCROLLBARS_NONE:
- scroll_style = ES_AUTOVSCROLL;
- break;
- case java_awt_TextArea_SCROLLBARS_VERTICAL_ONLY:
- scroll_style = WS_VSCROLL | ES_AUTOVSCROLL;
- break;
- case java_awt_TextArea_SCROLLBARS_HORIZONTAL_ONLY:
- scroll_style = WS_HSCROLL | ES_AUTOHSCROLL | ES_AUTOVSCROLL;
- break;
- case java_awt_TextArea_SCROLLBARS_BOTH:
- scroll_style = WS_VSCROLL | WS_HSCROLL |
- ES_AUTOVSCROLL | ES_AUTOHSCROLL;
- break;
- }
-
- /*
- * Specify ES_DISABLENOSCROLL - RichEdit control style to disable
- * scrollbars instead of hiding them when not needed.
- */
- DWORD style = WS_CHILD | WS_CLIPSIBLINGS | ES_LEFT | ES_MULTILINE |
- ES_WANTRETURN | scroll_style | ES_DISABLENOSCROLL;
- DWORD exStyle = WS_EX_CLIENTEDGE;
- if (GetRTL()) {
- exStyle |= WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR;
- if (GetRTLReadingOrder())
- exStyle |= WS_EX_RTLREADING;
- }
-
- jint x = env->GetIntField(target, AwtComponent::xID);
- jint y = env->GetIntField(target, AwtComponent::yID);
- jint width = env->GetIntField(target, AwtComponent::widthID);
- jint height = env->GetIntField(target, AwtComponent::heightID);
-
- c->CreateHWnd(env, L"", style, exStyle,
- x, y, width, height,
- awtParent->GetHWnd(),
- reinterpret_cast<HMENU>(static_cast<INT_PTR>(
- awtParent->CreateControlID())),
- ::GetSysColor(COLOR_WINDOWTEXT),
- ::GetSysColor(COLOR_WINDOW),
- peer);
-
- // Fix for 4753116.
- // If it is not win95 (we are using Richedit 2.0)
- // we set plain text mode, in which the control is
- // similar to a standard edit control:
- // - The text in a plain text control can have only
- // one format.
- // - The user cannot paste rich text formats, such as RTF
- // or embedded objects into a plain text control.
- // - Rich text mode controls always have a default
- // end-of-document marker or carriage return,
- // to format paragraphs.
- // kdm@sparc.spb.su
- c->SendMessage(EM_SETTEXTMODE, TM_PLAINTEXT, 0);
-
- c->m_backgroundColorSet = TRUE;
- /* suppress inheriting parent's color. */
- c->UpdateBackground(env, target);
- c->SendMessage(EM_SETMARGINS, EC_LEFTMARGIN | EC_RIGHTMARGIN,
- MAKELPARAM(1, 1));
- /*
- * Fix for BugTraq Id 4260109.
- * Set the text limit to the maximum.
- * Use EM_EXLIMITTEXT for RichEdit controls.
- * For some reason RichEdit 1.0 becomes read-only if the
- * specified limit is greater than 0x7FFFFFFD.
- */
- c->SendMessage(EM_EXLIMITTEXT, 0, 0x7FFFFFFD);
-
- /* Unregister RichEdit built-in drop target. */
- VERIFY(::RevokeDragDrop(c->GetHWnd()) != DRAGDROP_E_INVALIDHWND);
-
- /* To enforce CF_TEXT format for paste operations. */
- VERIFY(c->SendMessage(EM_SETOLECALLBACK, 0,
- (LPARAM)&GetOleCallback()));
-
- c->SendMessage(EM_SETEVENTMASK, 0, ENM_CHANGE);
- }
- } catch (...) {
- env->DeleteLocalRef(target);
- throw;
- }
-
-done:
- env->DeleteLocalRef(target);
-
- return c;
+ return (AwtTextArea*) AwtTextComponent::Create(peer, parent, true);
}
void AwtTextArea::EditSetSel(CHARRANGE &cr) {
// Fix for 5003402: added restoring/hiding selection to enable automatic scrolling
SendMessage(EM_HIDESELECTION, FALSE, TRUE);
@@ -218,15 +93,10 @@
void AwtTextArea::EditGetSel(CHARRANGE &cr) {
SendMessage(EM_EXGETSEL, 0, reinterpret_cast<LPARAM>(&cr));
}
-LONG AwtTextArea::EditGetCharFromPos(POINT& pt) {
- return static_cast<LONG>(SendMessage(EM_CHARFROMPOS, 0,
- reinterpret_cast<LPARAM>(&pt)));
-}
-
/* Count how many '\n's are there in jStr */
size_t AwtTextArea::CountNewLines(JNIEnv *env, jstring jStr, size_t maxlen)
{
size_t nNewlines = 0;
@@ -251,38 +121,10 @@
return nNewlines;
}
BOOL AwtTextArea::InheritsNativeMouseWheelBehavior() {return true;}
-MsgRouting
-AwtTextArea::PreProcessMsg(MSG& msg)
-{
- MsgRouting mr = mrPassAlong;
- static BOOL bPassAlongWmLButtonUp = TRUE;
-
- if (msg.message == WM_LBUTTONDBLCLK) {
- bPassAlongWmLButtonUp = FALSE;
- }
-
- /*
- * For some reason RichEdit 1.0 filters out WM_LBUTTONUP after
- * WM_LBUTTONDBLCLK. To work around this "feature" we send WM_LBUTTONUP
- * directly to the window procedure and consume instead of passing it
- * to the next hook.
- */
- if (msg.message == WM_LBUTTONUP && bPassAlongWmLButtonUp == FALSE) {
- SendMessage(WM_LBUTTONUP, msg.wParam, msg.lParam);
- bPassAlongWmLButtonUp = TRUE;
- mr = mrConsume;
- }
-
- if (mr == mrPassAlong) {
- mr = AwtComponent::PreProcessMsg(msg);
- }
-
- return mr;
-}
LRESULT
AwtTextArea::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) {
LRESULT retValue = 0;
@@ -798,58 +640,10 @@
m_synthetic = FALSE;
return returnVal;
}
-/*
- * WM_CTLCOLOR is not sent by rich edit controls.
- * Use EM_SETCHARFORMAT and EM_SETBKGNDCOLOR to set
- * respectively foreground and background color.
- */
-void AwtTextArea::SetColor(COLORREF c) {
- AwtComponent::SetColor(c);
-
- CHARFORMAT cf;
- memset(&cf, 0, sizeof(cf));
- cf.cbSize = sizeof(cf);
- cf.dwMask = CFM_COLOR;
-
- cf.crTextColor = ::IsWindowEnabled(GetHWnd()) ? GetColor() : ::GetSysColor(COLOR_3DSHADOW);
-
- /*
- * The documentation for EM_GETCHARFORMAT is not exactly
- * correct. It appears that wParam has the same meaning
- * as for EM_SETCHARFORMAT. Our task is to secure that
- * all the characters in the control have the required
- * formatting. That's why we use SCF_ALL.
- */
- VERIFY(SendMessage(EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&cf));
- VERIFY(SendMessage(EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf));
-}
-
-/*
- * In responce to EM_SETBKGNDCOLOR rich edit changes
- * its bg color and repaints itself so we don't need
- * to force repaint.
- */
-void AwtTextArea::SetBackgroundColor(COLORREF c) {
- AwtComponent::SetBackgroundColor(c);
- SendMessage(EM_SETBKGNDCOLOR, (WPARAM)FALSE, (LPARAM)GetBackgroundColor());
-}
-
-/*
- * Disabled edit control has grayed foreground.
- * Disabled RichEdit 1.0 control has original foreground.
- * Thus we have to set grayed foreground manually.
- */
-void AwtTextArea::Enable(BOOL bEnable)
-{
- AwtComponent::Enable(bEnable);
-
- SetColor(GetColor());
-}
-
/* Fix for 4776535, 4648702
* If width is 0 or 1 Windows hides the horizontal scroll bar even
* if the WS_HSCROLL style is set. It is a bug in Windows.
* As a workaround we should set an initial width to 2.
@@ -1046,135 +840,5 @@
}
} /* extern "C" */
-AwtTextArea::OleCallback AwtTextArea::sm_oleCallback;
-
-/************************************************************************
- * Inner class OleCallback definition.
- */
-
-AwtTextArea::OleCallback::OleCallback() {
- m_refs = 0;
- AddRef();
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::QueryInterface(REFIID riid, LPVOID * ppvObj) {
-
- TRY;
-
- if (::IsEqualIID(riid, IID_IUnknown)) {
- *ppvObj = (void __RPC_FAR *__RPC_FAR)(IUnknown*)this;
- AddRef();
- return S_OK;
- } else if (::IsEqualIID(riid, IID_IRichEditOleCallback)) {
- *ppvObj = (void __RPC_FAR *__RPC_FAR)(IRichEditOleCallback*)this;
- AddRef();
- return S_OK;
- } else {
- *ppvObj = NULL;
- return E_NOINTERFACE;
- }
-
- CATCH_BAD_ALLOC_RET(E_OUTOFMEMORY);
-}
-
-STDMETHODIMP_(ULONG)
-AwtTextArea::OleCallback::AddRef() {
- return ++m_refs;
-}
-
-STDMETHODIMP_(ULONG)
-AwtTextArea::OleCallback::Release() {
- int refs;
-
- if ((refs = --m_refs) == 0) delete this;
-
- return (ULONG)refs;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::GetNewStorage(LPSTORAGE FAR * ppstg) {
- return E_NOTIMPL;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::GetInPlaceContext(LPOLEINPLACEFRAME FAR * ppipframe,
- LPOLEINPLACEUIWINDOW FAR* ppipuiDoc,
- LPOLEINPLACEFRAMEINFO pipfinfo)
-{
- return E_NOTIMPL;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::ShowContainerUI(BOOL fShow) {
- return E_NOTIMPL;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::QueryInsertObject(LPCLSID pclsid,
- LPSTORAGE pstg,
- LONG cp) {
- return NOERROR;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::DeleteObject(LPOLEOBJECT poleobj) {
- return NOERROR;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::QueryAcceptData(LPDATAOBJECT pdataobj,
- CLIPFORMAT *pcfFormat,
- DWORD reco,
- BOOL fReally,
- HGLOBAL hMetaPict) {
- if (reco == RECO_PASTE) {
- // If CF_TEXT format is available edit controls will select it,
- // otherwise if it is CF_UNICODETEXT is available it will be
- // selected, otherwise if CF_OEMTEXT is available it will be selected.
- if (::IsClipboardFormatAvailable(CF_TEXT)) {
- *pcfFormat = CF_TEXT;
- } else if (::IsClipboardFormatAvailable(CF_UNICODETEXT)) {
- *pcfFormat = CF_UNICODETEXT;
- } else if (::IsClipboardFormatAvailable(CF_OEMTEXT)) {
- *pcfFormat = CF_OEMTEXT;
- } else {
- // Don't allow rich edit to paste clipboard data
- // in other formats.
- *pcfFormat = CF_TEXT;
- }
- }
-
- return NOERROR;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::ContextSensitiveHelp(BOOL fEnterMode) {
- return NOERROR;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::GetClipboardData(CHARRANGE *pchrg,
- DWORD reco,
- LPDATAOBJECT *ppdataobj) {
- return E_NOTIMPL;
-}
-
-STDMETHODIMP
-AwtTextArea::OleCallback::GetDragDropEffect(BOOL fDrag,
- DWORD grfKeyState,
- LPDWORD pdwEffect) {
-
- return E_NOTIMPL;
-}
-
-
-STDMETHODIMP
-AwtTextArea::OleCallback::GetContextMenu(WORD seltype,
- LPOLEOBJECT lpoleobj,
- CHARRANGE FAR * lpchrg,
- HMENU FAR * lphmenu) {
- return E_NOTIMPL;
-}