netscape-revival
sun-java/awt/x/awt_TextArea.c
/*
* @(#)awt_TextArea.c 1.15 95/11/27 Sami Shaio
*
* Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
*
* Permission to use, copy, modify, and distribute this software
* and its documentation for NON-COMMERCIAL purposes and without
* fee is hereby granted provided that this copyright notice
* appears in all copies. Please refer to the file "copyright.html"
* for further important copyright and licensing information.
*
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
*/
#include "awt_p.h"
#include "java_awt_Color.h"
#include "java_awt_Font.h"
#include "sun_awt_motif_MTextAreaPeer.h"
#include "java_awt_Component.h"
#include "sun_awt_motif_MComponentPeer.h"
#include "ustring.h"
static void
TextArea_focusIn(Widget w, XtPointer client_data, XmAnyCallbackStruct *s)
{
JAVA_UPCALL((EE(),(void *)client_data, "gotFocus","()V"));
}
static void
TextArea_focusOut(Widget w, XtPointer client_data, XmAnyCallbackStruct *s)
{
JAVA_UPCALL((EE(),(void *)client_data, "lostFocus","()V"));
}
void
sun_awt_motif_MTextAreaPeer_create(struct Hsun_awt_motif_MTextAreaPeer *this,
struct Hsun_awt_motif_MComponentPeer *parent)
{
struct TextAreaData *tdata;
Arg args[30];
int argc;
struct ComponentData *wdata;
Pixel bg;
AWT_LOCK();
if (parent == 0 || unhand(parent)->pData == 0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
tdata = ZALLOC(TextAreaData);
SET_PDATA(this, tdata);
if (!tdata) {
SignalError(0, JAVAPKG "OutOfMemoryError", 0);
AWT_UNLOCK();
return;
}
wdata = (struct ComponentData *)unhand(parent)->pData;
XtVaGetValues(wdata->widget, XmNbackground, &bg, NULL);
argc = 0;
XtSetArg(args[argc], XmNrecomputeSize, False); argc++;
XtSetArg(args[argc], XmNx, 0); argc++;
XtSetArg(args[argc], XmNy, 0); argc++;
XtSetArg(args[argc], XmNbackground, bg); argc++;
XtSetArg(args[argc], XmNeditMode, XmMULTI_LINE_EDIT); argc++;
XtSetArg(args[argc], XmNwordWrap, True); argc++;
XtSetArg(args[argc], XmNmarginHeight, 0); argc++;
XtSetArg(args[argc], XmNmarginWidth, 0); argc++;
tdata->txt = XmCreateScrolledText(wdata->widget, "textA",
args, argc);
tdata->comp.widget = XtParent(tdata->txt);
XtSetMappedWhenManaged(tdata->comp.widget, False);
XtManageChild(tdata->txt);
XtManageChild(tdata->comp.widget);
XtAddCallback(tdata->txt,
XmNfocusCallback,
(XtCallbackProc)TextArea_focusIn,
(XtPointer)this);
XtAddCallback(tdata->txt,
XmNlosingFocusCallback,
(XtCallbackProc)TextArea_focusOut,
(XtPointer)this);
AWT_UNLOCK();
}
void
sun_awt_motif_MTextAreaPeer_pSetEditable(struct Hsun_awt_motif_MTextAreaPeer *this,
/*boolean*/ long editable)
{
struct TextAreaData *tdata;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
XtVaSetValues(tdata->txt,
XmNeditable, (editable ? True : False),
XmNcursorPositionVisible, (editable ? True : False),
NULL);
AWT_FLUSH_UNLOCK();
}
void
sun_awt_motif_MTextAreaPeer_setTextBackground(struct Hsun_awt_motif_MTextAreaPeer *this,
struct Hjava_awt_Color *c)
{
struct TextAreaData *tdata;
Pixel color;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0 || c==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
color = awt_getColor(c);
XtVaSetValues(tdata->txt,
XmNbackground, color,
NULL);
AWT_FLUSH_UNLOCK();
}
void
sun_awt_motif_MTextAreaPeer_select(struct Hsun_awt_motif_MTextAreaPeer *this, long start, long end)
{
struct TextAreaData *tdata;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
XmTextSetSelection(tdata->txt, (XmTextPosition)start, (XmTextPosition)end, 0);
AWT_FLUSH_UNLOCK();
}
long
sun_awt_motif_MTextAreaPeer_getSelectionStart(struct Hsun_awt_motif_MTextAreaPeer *this)
{
struct TextAreaData *tdata;
XmTextPosition start, end, pos;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return 0;
}
if (XmTextGetSelectionPosition(tdata->txt, &start, &end)) {
pos = start;
} else {
pos = XmTextGetCursorPosition(tdata->txt);
}
AWT_UNLOCK();
return pos;
}
long
sun_awt_motif_MTextAreaPeer_getSelectionEnd(struct Hsun_awt_motif_MTextAreaPeer *this)
{
struct TextAreaData *tdata;
XmTextPosition start, end, pos;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return 0;
}
if (XmTextGetSelectionPosition(tdata->txt, &start, &end)) {
pos = end;
} else {
pos = XmTextGetCursorPosition(tdata->txt);
}
AWT_UNLOCK();
return pos;
}
long
sun_awt_motif_MTextAreaPeer_getCursorPos(struct Hsun_awt_motif_MTextAreaPeer *this)
{
struct TextAreaData *tdata;
XmTextPosition pos;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return 0;
}
pos = XmTextGetCursorPosition(tdata->txt);
AWT_UNLOCK();
return pos;
}
void
sun_awt_motif_MTextAreaPeer_setCursorPos(struct Hsun_awt_motif_MTextAreaPeer *this,
long pos)
{
struct TextAreaData *tdata;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
XmTextSetCursorPosition(tdata->txt, (XmTextPosition)pos);
AWT_FLUSH_UNLOCK();
}
long
sun_awt_motif_MTextAreaPeer_endPos(struct Hsun_awt_motif_MTextAreaPeer *this)
{
struct TextAreaData *tdata;
XmTextPosition pos;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return 0;
}
pos = XmTextGetLastPosition(tdata->txt);
AWT_UNLOCK();
return pos;
}
void
sun_awt_motif_MTextAreaPeer_setText(struct Hsun_awt_motif_MTextAreaPeer *this,
Hjava_lang_String *txt)
{
struct TextAreaData *tdata;
char *cTxt;
if (txt == 0) {
SignalError(0, JAVAPKG "NullPointerException",0);
return;
}
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
cTxt = makeLocalizedCString(txt);
XtVaSetValues(tdata->txt, XmNvalue, cTxt, NULL);
AWT_FLUSH_UNLOCK();
}
Hjava_lang_String *
sun_awt_motif_MTextAreaPeer_getText(struct Hsun_awt_motif_MTextAreaPeer *this)
{
struct TextAreaData *tdata;
char *cTxt;
Hjava_lang_String *rval;
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return 0;
}
cTxt = XmTextGetString(tdata->txt);
rval = makeJavaStringFromLocalizedCString(cTxt);
XtFree(cTxt);
AWT_UNLOCK();
return rval;
}
void
sun_awt_motif_MTextAreaPeer_insertText(struct Hsun_awt_motif_MTextAreaPeer *this,
Hjava_lang_String *txt,
long pos)
{
struct TextAreaData *tdata;
char *cTxt;
if (txt == 0) {
SignalError(0, JAVAPKG "NullPointerException",0);
return;
}
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
cTxt = makeLocalizedCString(txt);
XmTextInsert(tdata->txt, (XmTextPosition)pos, cTxt);
AWT_FLUSH_UNLOCK();
}
void
sun_awt_motif_MTextAreaPeer_replaceText(struct Hsun_awt_motif_MTextAreaPeer *this,
Hjava_lang_String *txt,
long start,
long end)
{
struct TextAreaData *tdata;
char *cTxt;
if (txt == 0) {
SignalError(0, JAVAPKG "NullPointerException",0);
return;
}
AWT_LOCK();
if ((tdata = PDATA(TextAreaData,this)) == 0 || tdata->txt==0) {
SignalError(0, JAVAPKG "NullPointerException", 0);
AWT_UNLOCK();
return;
}
cTxt = makeLocalizedCString(txt);
XmTextReplace(tdata->txt,
(XmTextPosition)start,
(XmTextPosition)end,
cTxt);
AWT_FLUSH_UNLOCK();
}