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;
-}