From 34850048efa8e7e475abc269874514256f779cdd Mon Sep 17 00:00:00 2001 From: "kin%netscape.com" Date: Wed, 5 Aug 1998 19:08:58 +0000 Subject: [PATCH] Initial check-in of HTMLArea (embedded composer widget) form element feature. All Ender related code is ifdef'd ENDER. git-svn-id: svn://10.0.0.236/trunk@7379 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/cmd/xfe/editor.c | 32 +- mozilla/cmd/xfe/forms.c | 220 ++++++++++++ mozilla/cmd/xfe/src/EditorFrame.cpp | 3 +- mozilla/cmd/xfe/src/EditorFrame.h | 2 +- mozilla/cmd/xfe/src/EditorView.cpp | 11 +- mozilla/cmd/xfe/src/EmbeddedEditorView.cpp | 389 +++++++++++++++++++++ mozilla/cmd/xfe/src/EmbeddedEditorView.h | 41 +++ mozilla/cmd/xfe/src/HTMLView.cpp | 2 +- mozilla/cmd/xfe/src/Makefile | 1 + mozilla/cmd/xfe/src/MozillaApp.cpp | 35 +- mozilla/cmd/xfe/src/View.cpp | 36 +- mozilla/cmd/xfe/src/View.h | 5 + mozilla/cmd/xfe/xfe.h | 4 + 13 files changed, 767 insertions(+), 14 deletions(-) create mode 100644 mozilla/cmd/xfe/src/EmbeddedEditorView.cpp create mode 100644 mozilla/cmd/xfe/src/EmbeddedEditorView.h diff --git a/mozilla/cmd/xfe/editor.c b/mozilla/cmd/xfe/editor.c index c10b75c2fa8..0bdfcb52dcb 100644 --- a/mozilla/cmd/xfe/editor.c +++ b/mozilla/cmd/xfe/editor.c @@ -849,6 +849,8 @@ xfe2_EditorInit(MWContext* context) #endif if (context->type == MWContextEditor) { + Widget w; + /* * NOTE: the MWContextMessageComposition has it's own ev handler... * @@ -856,7 +858,14 @@ xfe2_EditorInit(MWContext* context) #ifdef DEBUG_rhess fprintf(stderr, "tag1::[ %p ]\n", CONTEXT_WIDGET(context)); #endif - XtAddEventHandler(CONTEXT_WIDGET(context), FocusChangeMask, +#ifdef ENDER + if (EDITOR_CONTEXT_DATA(context)->embedded) + w = CONTEXT_DATA(context)->drawing_area; + else +#endif /* ENDER */ + w = CONTEXT_WIDGET(context); + + XtAddEventHandler(w, FocusChangeMask, FALSE, (XtEventHandler)fe_change_focus_eh, context); } @@ -944,7 +953,10 @@ fe_EditorCleanup(MWContext* context) * for a new doc, as that'll mean dialogs, and ..... */ if (context->type != MWContextMessageComposition && - !EDT_IS_NEW_DOCUMENT(context) && + !EDT_IS_NEW_DOCUMENT(context) && +#ifdef ENDER + !EDITOR_CONTEXT_DATA(context)->embedded && +#endif /* ENDER */ (!EDT_IsBlocked(context) && EDT_DirtyFlag(context))) { fe_EditorPreferencesGetAutoSave(context, &as_enabled, &as_time); if (as_enabled) @@ -2602,8 +2614,11 @@ fe_EditorGetUrlExitRoutine(MWContext* context, URL_Struct* url, int status) /* * Then request a dissapearing act. */ - XtAppAddTimeOut(fe_XtAppContext, 0, fe_editor_exit_timeout, - (XtPointer)context); +#ifdef ENDER + if (! EDITOR_CONTEXT_DATA(context)->embedded) +#endif /* ENDER */ + XtAppAddTimeOut(fe_XtAppContext, 0, fe_editor_exit_timeout, + (XtPointer)context); } } } @@ -2664,8 +2679,13 @@ FE_EditorDocumentLoaded(MWContext* context) /* * Set autosave period. */ - fe_EditorPreferencesGetAutoSave(context, &as_enable, &as_time); - EDT_SetAutoSavePeriod(context, as_time); +#ifdef ENDER + if (! EDITOR_CONTEXT_DATA(context)->embedded) +#endif /* ENDER */ + { + fe_EditorPreferencesGetAutoSave(context, &as_enable, &as_time); + EDT_SetAutoSavePeriod(context, as_time); + } fe_HackEditorNotifyToolbarUpdated(context); } diff --git a/mozilla/cmd/xfe/forms.c b/mozilla/cmd/xfe/forms.c index 6447f573fe0..c8ed0bbf4a9 100644 --- a/mozilla/cmd/xfe/forms.c +++ b/mozilla/cmd/xfe/forms.c @@ -29,6 +29,10 @@ #include "xpform.h" #include "layers.h" +#ifdef ENDER +#include "edt.h" +#endif /* ENDER */ + #include /* for mocha */ #include #include @@ -130,6 +134,15 @@ typedef struct { Widget text_widget; /* form_data.widget is the scrolled window. */ } FETextAreaFormData; +#ifdef ENDER + +typedef struct { + FEFormData form_data; + MWContext *editor_context; +} FEHTMLAreaFormData; + +#endif /* ENDER */ + typedef struct { FEFormData form_data; @@ -173,6 +186,19 @@ static void textarea_get_value(FEFormData *, LO_FormElementStruct *, XP_Bool); static void textarea_reset(FEFormData *, LO_FormElementStruct *); static void textarea_lost_focus(FEFormData *); +#ifdef ENDER + +static void htmlarea_create_widget(FEFormData *, LO_FormElementStruct *); +static void htmlarea_get_size(FEFormData *, LO_FormElementStruct *); +static void htmlarea_display(FEFormData *, LO_FormElementStruct *); +static void htmlarea_get_value(FEFormData *, LO_FormElementStruct *, XP_Bool); +static void htmlarea_reset(FEFormData *, LO_FormElementStruct *); +static void htmlarea_text_focus(FEFormData *, LO_FormElementStruct *); +static void htmlarea_lost_focus(FEFormData *); +static void htmlarea_element_free(FEFormData *, LO_FormElementStruct *); + +#endif /* ENDER */ + static void form_element_display(FEFormData *, LO_FormElementStruct *); static void form_element_get_size(FEFormData *, LO_FormElementStruct *); static void form_element_is_submit(FEFormData *, LO_FormElementStruct *); @@ -280,6 +306,24 @@ static FEFormVtable textarea_form_vtable = { textarea_lost_focus }; +#ifdef ENDER + +static FEFormVtable htmlarea_form_vtable = { + htmlarea_create_widget, + htmlarea_get_size, + NULL, + htmlarea_display, + htmlarea_get_value, + htmlarea_element_free, + htmlarea_reset, + NULL /* text_select */, + NULL /* text_change */, + htmlarea_text_focus, + htmlarea_lost_focus +}; + +#endif /* ENDER */ + /* ** Why are these next two functions in this file? */ @@ -2376,6 +2420,173 @@ textarea_lost_focus(FEFormData *fed) } } +#ifdef ENDER + +static void +htmlarea_focus_cb(Widget w, XtPointer closure, XEvent *event, Boolean *cont) +{ + *cont = TRUE; + + if (event->type == FocusIn) + fe_got_focus_cb(w, closure, (XtPointer)0); + else + fe_lost_focus_cb(w, closure, (XtPointer)0); +} + +static void +htmlarea_create_widget(FEFormData *fed, LO_FormElementStruct *form) +{ + extern Widget XFE_CreateEmbeddedEditor(Widget, int32, int32, const char *, MWContext *); + extern MWContext *XFE_GetEmbeddedEditorContext(Widget, MWContext *); + + FEHTMLAreaFormData *ha_fed = (FEHTMLAreaFormData *)fed; + LO_FormElementData *form_data = XP_GetFormElementData(form); + MWContext *context = ha_fed->form_data.context; + Widget parent = CONTEXT_DATA(context)->drawing_area; + char *default_text = (char*)XP_FormGetDefaultText(form_data); + LO_TextAttr *text_attr = XP_GetFormTextAttr(form); + int32 wid, ht; + + + /* XXX: For now, we are using the textarea's rows/cols attribute to specify + * the composer widget's dimensions. + */ + XP_FormTextAreaGetDimensions(form_data, &ht, &wid); + + ha_fed->form_data.widget = + XFE_CreateEmbeddedEditor(parent, wid, ht, NULL, context); + + ha_fed->editor_context = + XFE_GetEmbeddedEditorContext(ha_fed->form_data.widget, + context); + + /* Can't register a XmNfocusCallback or XmNlosingFocusCallback on + * a DrawingArea so we register an event handler. + */ + XtAddEventHandler(CONTEXT_DATA(ha_fed->editor_context)->drawing_area, + FocusChangeMask, FALSE, htmlarea_focus_cb, fed); + + if (default_text) + { + fe_forms_clean_text(fed->context, text_attr->charset, default_text, False); + EDT_SetDefaultText(ha_fed->editor_context, default_text); + } +} + +static void +htmlarea_get_size(FEFormData *fed, LO_FormElementStruct *form) +{ +#if 1 + LO_FormElementData *form_data; + int32 wid, ht; + + form_data = XP_GetFormElementData(form); + + /* XXX: For now, we are using the textarea's rows/cols attribute to specify + * the composer widget's dimensions. + */ + XP_FormTextAreaGetDimensions(form_data, &ht, &wid); + + form->width = wid; + form->height = ht; +#else + form_element_get_size(fed, form); +#endif +} + +static void +htmlarea_display(FEFormData *fed, LO_FormElementStruct *form) +{ + form_element_display(fed, form); +} + +static void +htmlarea_get_value(FEFormData *fed, LO_FormElementStruct *form, XP_Bool delete_p) +{ + MWContext *context = fed->context; + LO_FormElementData *form_data = XP_GetFormElementData(form); + FEHTMLAreaFormData *ha_fed = (FEHTMLAreaFormData*)fed; + int32 cols; + PA_Block current_text; + PA_Block default_text; + + XP_HUGE_CHAR_PTR text = 0; + + XP_FormTextAreaGetDimensions(form_data, NULL, &cols); + + EDT_SaveToBuffer(ha_fed->editor_context, &text); + + if (! text) return; + + current_text = XP_FormGetCurrentText(form_data); + default_text = XP_FormGetDefaultText(form_data); + + if (current_text && current_text != default_text) + free (current_text); + + XP_FormSetCurrentText(form_data, (char *)text); + + if (delete_p) + { + extern Widget XFE_DestroyEmbeddedEditor(Widget, MWContext *); + XFE_DestroyEmbeddedEditor(ha_fed->form_data.widget, context); + ha_fed->form_data.widget = 0; + } +} + +static void +htmlarea_reset(FEFormData *fed, LO_FormElementStruct *form) +{ +#ifdef NOT_YET_KIN + LO_FormElementData *form_data = XP_GetFormElementData(form); + FEHTMLAreaFormData *ha_fed = (FEHTMLAreaFormData*)fed; + char *default_text = (char*)XP_FormGetDefaultText(form_data); + LO_TextAttr *text_attr = XP_GetFormTextAttr(form); + int16 charset = text_attr->charset; + + if (default_text) + { + fe_forms_clean_text(fed->context, charset, default_text, False); + EDT_SetDefaultText(ha_fed->editor_context, default_text); + } +#endif /* NOT_YET_KIN */ +} + +static void +htmlarea_text_focus(FEFormData *fed, LO_FormElementStruct *form) +{ + text_focus(fed, form); +} + +static void +htmlarea_lost_focus(FEFormData *fed) +{ + // + // TODO: Do stuff like in ... + // + // text_lost_focus(fed); + // +} + +static void +htmlarea_element_free(FEFormData *fed, LO_FormElementStruct *form) +{ + extern Widget XFE_DestroyEmbeddedEditor(Widget, MWContext *); + + if (fed->widget) + { + FEHTMLAreaFormData *ha_fed = (FEHTMLAreaFormData *)fed; + MWContext *context = ha_fed->form_data.context; + + XFE_DestroyEmbeddedEditor(ha_fed->form_data.widget, context); + ha_fed->form_data.widget = 0; + } + + XP_FREE(fed); +} + +#endif /* ENDER */ + static FEFormData * alloc_form_data(int32 form_type) { @@ -2418,6 +2629,15 @@ alloc_form_data(int32 form_type) data->vtbl = textarea_form_vtable; return data; +#ifdef ENDER + + case FORM_TYPE_HTMLAREA: + data = (FEFormData*)XP_NEW_ZAP(FEHTMLAreaFormData); + data->vtbl = htmlarea_form_vtable; + return data; + +#endif /* ENDER */ + case FORM_TYPE_SELECT_MULT: data = (FEFormData*)XP_NEW_ZAP(FESelectMultFormData); data->vtbl = selectmult_form_vtable; diff --git a/mozilla/cmd/xfe/src/EditorFrame.cpp b/mozilla/cmd/xfe/src/EditorFrame.cpp index cd71c0bb784..e41d96c3a6b 100644 --- a/mozilla/cmd/xfe/src/EditorFrame.cpp +++ b/mozilla/cmd/xfe/src/EditorFrame.cpp @@ -579,9 +579,8 @@ static MenuSpec fe_editor_show_options_popups[] = }; XFE_PopupMenu* -fe_EditorNewPopupMenu(XFE_Frame* frame, Widget parent) +fe_EditorNewPopupMenu(XFE_Frame* frame, Widget parent, MWContext *context) { - MWContext* context = frame->getContext(); XFE_PopupMenu* popup; ED_ElementType e_type; MenuSpec* list; diff --git a/mozilla/cmd/xfe/src/EditorFrame.h b/mozilla/cmd/xfe/src/EditorFrame.h index a3eb5c67519..7ff1fd20b89 100644 --- a/mozilla/cmd/xfe/src/EditorFrame.h +++ b/mozilla/cmd/xfe/src/EditorFrame.h @@ -118,6 +118,6 @@ protected: }; MenuSpec* fe_EditorInstanciateMenu(XFE_Frame* frame, MenuSpec* spec); -XFE_PopupMenu* fe_EditorNewPopupMenu(XFE_Frame*, Widget); +XFE_PopupMenu* fe_EditorNewPopupMenu(XFE_Frame*, Widget, MWContext*); #endif /* _xfe_editorframe_h */ diff --git a/mozilla/cmd/xfe/src/EditorView.cpp b/mozilla/cmd/xfe/src/EditorView.cpp index 2c5101d9b5e..c1c11e042e4 100644 --- a/mozilla/cmd/xfe/src/EditorView.cpp +++ b/mozilla/cmd/xfe/src/EditorView.cpp @@ -2696,14 +2696,21 @@ EditorPopupCommand::reallyDoCommand(XFE_View* v_view, XFE_CommandInfo* info) unsigned long x; unsigned long y; XFE_PopupMenu* popup; + XFE_Frame *frame; fe_EventLOCoords(context, info->event, &x, &y); if (!fe_editor_selection_contains_point(context, x, y)) EDT_SelectObject(context, x, y); - popup = fe_EditorNewPopupMenu((XFE_Frame*)view->getToplevel(), - info->widget); + frame = (XFE_Frame*)view->getToplevel(); + +#ifdef ENDER + if (! EDITOR_CONTEXT_DATA(context)->embedded) +#endif /* ENDER */ + context = frame->getContext(); + + popup = fe_EditorNewPopupMenu(frame, info->widget, context); view->setPopupMenu(popup); popup = view->getPopupMenu(); diff --git a/mozilla/cmd/xfe/src/EmbeddedEditorView.cpp b/mozilla/cmd/xfe/src/EmbeddedEditorView.cpp new file mode 100644 index 00000000000..29ec6c6d2db --- /dev/null +++ b/mozilla/cmd/xfe/src/EmbeddedEditorView.cpp @@ -0,0 +1,389 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +/* + EmbeddedEditorView.cpp -- class definition for the embedded editor class + Created: Kin Blas , 01-Jul-98 + */ + +#ifdef ENDER + +#include "Frame.h" +#include "EmbeddedEditorView.h" +#include "DisplayFactory.h" +#include "ViewGlue.h" +#include "il_util.h" +#include "layers.h" + +extern "C" +{ +MWContext *fe_CreateNewContext(MWContextType type, Widget w, + fe_colormap *cmap, XP_Bool displays_html); +void fe_set_scrolled_default_size(MWContext *context); +CL_Compositor *fe_create_compositor (MWContext *context); +void fe_EditorCleanup(MWContext *context); +void fe_DestroyLayoutData(MWContext *context); +void fe_load_default_font(MWContext *context); +void xfe2_EditorInit(MWContext *context); +int fe_add_to_all_MWContext_list(MWContext *context); +int fe_remove_from_all_MWContext_list(MWContext *context); +void DisplayPixmap(MWContext *context, IL_Pixmap* image, + IL_Pixmap *mask, long int x, long int y, + jint x_offset, jint y_offset, jint width, + jint height); +void fe_find_scrollbar_sizes(MWContext *context); +void fe_get_final_context_resources(MWContext *context); +} + + + +XFE_EmbeddedEditorView::XFE_EmbeddedEditorView(XFE_Component *toplevel_component, + Widget parent, + XFE_View *parent_view, + MWContext *context) + : XFE_EditorView(toplevel_component, parent, parent_view, context) +{ + XtOverrideTranslations(CONTEXT_DATA(context)->drawing_area, + fe_globalData.editor_global_translations); + + if (parent_view) + parent_view->addView(this); +} + +XFE_EmbeddedEditorView::~XFE_EmbeddedEditorView() +{ + XFE_View *parent_view = getParent(); + + if (parent_view) + parent_view->removeView(this); +} + +extern "C" Widget +XFE_CreateEmbeddedEditor(Widget parent, int32 wid, int32 ht, + const char *default_url, MWContext *context) +{ + Widget w; + MWContext *new_context; + + XFE_Frame *frame = (XFE_Frame *)CONTEXT_DATA(context)->view; + XFE_View *view = frame->widgetToView(parent); + + new_context = fe_CreateNewContext(MWContextEditor, CONTEXT_WIDGET(context), + XFE_DisplayFactory::theFactory()->getPrivateColormap(), + TRUE); + + EDITOR_CONTEXT_DATA(new_context)->embedded = TRUE; + + ViewGlue_addMapping(frame, new_context); + + fe_init_image_callbacks(new_context); + fe_InitColormap(new_context); + + XFE_EmbeddedEditorView *eev = new XFE_EmbeddedEditorView( + frame, + CONTEXT_DATA(context)->drawing_area, + view, + new_context); + + fe_set_scrolled_default_size(new_context); + eev->show(); + + // New Stuff + fe_get_final_context_resources(new_context); + fe_find_scrollbar_sizes(new_context); + fe_InitScrolling(new_context); + // New Stuff + + new_context->compositor = fe_create_compositor(new_context); + + w = eev->getBaseWidget(); + XtVaSetValues(w, + XmNwidth, wid, + XmNheight, ht, + XmNborderWidth, 1, + 0); + + XtVaSetValues(CONTEXT_DATA(new_context)->scrolled, + XmNshadowThickness, 1, + 0); + + + xfe2_EditorInit(eev->getContext()); + + if (!default_url || !*default_url) + default_url = "about:editfilenew"; + + URL_Struct* url = NET_CreateURLStruct(default_url, NET_NORMAL_RELOAD); + + eev->getURL(url); + return(w); +} + +extern "C" MWContext * +XFE_GetEmbeddedEditorContext(Widget w, MWContext *context) +{ + XFE_Frame *frame = (XFE_Frame *)CONTEXT_DATA(context)->view; + XFE_View *view = frame->widgetToView(w); + + return((view) ? view->getContext() : 0); +} + +extern "C" void +XFE_DestroyEmbeddedEditor(Widget w, MWContext *context) +{ + XFE_Frame *frame = (XFE_Frame *)CONTEXT_DATA(context)->view; + XFE_View *view = frame->widgetToView(w); + MWContext *vcontext; + + if (!view) + return; + + vcontext = view->getContext(); + + XP_RemoveContextFromList(vcontext); + fe_remove_from_all_MWContext_list(vcontext); + + delete view; + + if (!vcontext) + return; + + fe_EditorCleanup(vcontext); + fe_DestroyLayoutData (vcontext); + + if (vcontext->color_space) + { + IL_ReleaseColorSpace(vcontext->color_space); + vcontext->color_space = NULL; + } + + SHIST_EndSession(vcontext); + + if (vcontext->compositor) + { + CL_DestroyCompositor(vcontext->compositor); + vcontext->compositor = NULL; + } + + free(CONTEXT_DATA(vcontext)); + free(vcontext); +} + +extern "C" MWContext * +fe_CreateNewContext(MWContextType type, Widget w, fe_colormap *cmap, + XP_Bool displays_html) +{ + fe_ContextData *fec; + struct fe_MWContext_cons *cons; + MWContext *context; + + context = XP_NewContext(); + + if (context == NULL) + return 0; + + cons = XP_NEW_ZAP(struct fe_MWContext_cons); + if (cons == NULL) + { + XP_FREE(context); + return 0; + } + + fec = XP_NEW_ZAP (fe_ContextData); + + if (fec == NULL) + { + XP_FREE(cons); + XP_FREE(context); + return 0; + } + + context->type = type; + switch (type) + { + case MWContextEditor: + case MWContextMessageComposition: + context->is_editor = True; + break; + default: + context->is_editor = False; + break; + } + + CONTEXT_DATA (context) = fec; + CONTEXT_DATA (context)->colormap = cmap; + + // set image library Callback functions + CONTEXT_DATA (context)->DisplayPixmap = (DisplayPixmapPtr)DisplayPixmap; + CONTEXT_DATA (context)->NewPixmap = (NewPixmapPtr)NULL; + CONTEXT_DATA (context)->ImageComplete = (ImageCompletePtr)NULL; + + CONTEXT_WIDGET (context) = w; + + fe_InitRemoteServer (XtDisplay (w)); + + /* add the layout function pointers */ + context->funcs = fe_BuildDisplayFunctionTable(); + context->convertPixX = context->convertPixY = 1; + context->is_grid_cell = FALSE; + context->grid_parent = NULL; + + /* set the XFE default Document Character set */ + CONTEXT_DATA(context)->xfe_doc_csid = fe_globalPrefs.doc_csid; + + cons->context = context; + cons->next = fe_all_MWContexts; + fe_all_MWContexts = cons; + XP_AddContextToList (context); + + fe_InitIconColors(context); + + XtGetApplicationResources (w, + (XtPointer) CONTEXT_DATA (context), + fe_Resources, fe_ResourcesSize, + 0, 0); + + // Use colors from prefs + + LO_Color *color; + + color = &fe_globalPrefs.links_color; + CONTEXT_DATA(context)->link_pixel = + fe_GetPixel(context, color->red, color->green, color->blue); + + color = &fe_globalPrefs.vlinks_color; + CONTEXT_DATA(context)->vlink_pixel = + fe_GetPixel(context, color->red, color->green, color->blue); + + color = &fe_globalPrefs.text_color; + CONTEXT_DATA(context)->default_fg_pixel = + fe_GetPixel(context, color->red, color->green, color->blue); + + color = &fe_globalPrefs.background_color; + CONTEXT_DATA(context)->default_bg_pixel = + fe_GetPixel(context, color->red, color->green, color->blue); + + if (displays_html) { + Display * dpy; + int screen; + double pixels; + double millimeters; + + /* Determine pixels per point for back end font size calculations. */ + + dpy = XtDisplay(w); + screen = XScreenNumberOfScreen(XtScreen(w)); + +#define MM_PER_INCH (25.4) +#define POINTS_PER_INCH (72.0) + + /* N pixels 25.4 mm 1 inch + * -------- * ------- * ------ + * M mm 1 inch 72 pts + */ + + pixels = DisplayWidth(dpy, screen); + millimeters = DisplayWidthMM(dpy, screen); + context->XpixelsPerPoint = + ((pixels * MM_PER_INCH) / millimeters) / POINTS_PER_INCH; + + pixels = DisplayHeight(dpy,screen); + millimeters = DisplayHeightMM(dpy, screen); + context->YpixelsPerPoint = + ((pixels * MM_PER_INCH) / millimeters) / POINTS_PER_INCH; + + + SHIST_InitSession (context); + + fe_load_default_font(context); + } + + /* + * set the default coloring correctly into the new context. + */ + { + Pixel unused_select_pixel; + XmGetColors (XtScreen (w), + fe_cmap(context), + CONTEXT_DATA (context)->default_bg_pixel, + &(CONTEXT_DATA (context)->fg_pixel), + &(CONTEXT_DATA (context)->top_shadow_pixel), + &(CONTEXT_DATA (context)->bottom_shadow_pixel), + &unused_select_pixel); + } + + // New field added by putterman for increase/decrease font + context->fontScalingPercentage = 1.0; + + return context; +} + +extern "C" int +fe_add_to_all_MWContext_list(MWContext *context) +{ + struct fe_MWContext_cons *cons; + + XP_ASSERT(context); + + if (!context) + return 0; + + cons = XP_NEW_ZAP(struct fe_MWContext_cons); + + if (!cons) + return -1; + + cons->context = context; + cons->next = fe_all_MWContexts; + fe_all_MWContexts = cons; + + return 0; +} + +extern "C" int +fe_remove_from_all_MWContext_list(MWContext *context) +{ + struct fe_MWContext_cons *rest, *prev; + + XP_ASSERT(context); + + if (!context) + return 0; + + for (prev = 0, rest = fe_all_MWContexts ; rest ; + prev = rest, rest = rest->next) + { + if (rest->context == context) + break; + } + + XP_ASSERT(rest); + + if (!rest) + return -1; + + if (prev) + prev->next = rest->next; + else + fe_all_MWContexts = rest->next; + + free(rest); + + return 0; +} + +#endif /* ENDER */ diff --git a/mozilla/cmd/xfe/src/EmbeddedEditorView.h b/mozilla/cmd/xfe/src/EmbeddedEditorView.h new file mode 100644 index 00000000000..04d22bd4bea --- /dev/null +++ b/mozilla/cmd/xfe/src/EmbeddedEditorView.h @@ -0,0 +1,41 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +/* + EmbeddedEditorView.h -- class definition for the embedded editor class + Created: Kin Blas , 01-Jul-98 + */ + + + +#ifndef _xfe_embeddededitorview_h +#define _xfe_embeddededitorview_h + +#ifdef ENDER + +#include "EditorView.h" + +class XFE_EmbeddedEditorView : public XFE_EditorView +{ +public: + XFE_EmbeddedEditorView(XFE_Component *toplevel_component, Widget parent, XFE_View *parent_view, MWContext *context); + ~XFE_EmbeddedEditorView(); +}; + +#endif /* ENDER */ + +#endif /* _xfe_embeddededitorview_h */ diff --git a/mozilla/cmd/xfe/src/HTMLView.cpp b/mozilla/cmd/xfe/src/HTMLView.cpp index e86ee2afa65..1544d42e1ff 100644 --- a/mozilla/cmd/xfe/src/HTMLView.cpp +++ b/mozilla/cmd/xfe/src/HTMLView.cpp @@ -1118,7 +1118,7 @@ XFE_HTMLView::doCommand(CommandType cmd, void *callData, XFE_CommandInfo* info) } else { - XFE_View::doCommand(cmd); + XFE_View::doCommand(cmd, callData, info); } #undef IS_CMD } diff --git a/mozilla/cmd/xfe/src/Makefile b/mozilla/cmd/xfe/src/Makefile index 9d7130d7b14..c5fcc047ffa 100644 --- a/mozilla/cmd/xfe/src/Makefile +++ b/mozilla/cmd/xfe/src/Makefile @@ -190,6 +190,7 @@ CPPSRCS += \ EditorView.cpp \ EditRecentMenu.cpp \ EditTableDialog.cpp \ + EmbeddedEditorView.cpp \ $(NULL) endif diff --git a/mozilla/cmd/xfe/src/MozillaApp.cpp b/mozilla/cmd/xfe/src/MozillaApp.cpp index 9c30743aa2e..8d0c5838fdf 100644 --- a/mozilla/cmd/xfe/src/MozillaApp.cpp +++ b/mozilla/cmd/xfe/src/MozillaApp.cpp @@ -23,6 +23,11 @@ #include "rosetta.h" #include "Frame.h" + +#ifdef ENDER +#include "View.h" +#endif /* ENDER */ + #include "MozillaApp.h" #include "ViewGlue.h" #include "Dashboard.h" @@ -899,6 +904,34 @@ xfeDoCommandAction(Widget w, XEvent *event, XFE_CommandInfo info(cmd_type, w, event, p_params, num_cmd_params); +#ifdef ENDER + + XFE_View *v = f->widgetToView(w); + + if (v && v->handlesCommand(cmd, NULL, &info)) + { + if (v->isCommandEnabled(cmd, NULL, &info)) + { + XFE_Command *handler = v->getCommand(cmd); + + if (handler) + { + printf("handler->doCommand(0x%.8x): %s\n", handler, cmd); + fflush(stdout); + handler->doCommand(v, &info); + } + else + { + printf("v->doCommand(0x%.8x): %s\n", v, cmd); + fflush(stdout); + v->doCommand(cmd, NULL, &info); + } + return; + } + } + +#endif /* ENDER */ + /* if the frame doesn't handle the command, bomb out early */ if (!f->handlesCommand(cmd, NULL, &info)) { @@ -998,7 +1031,7 @@ xfeDoClickAction(Widget widget, XEvent *event, String *av, Cardinal *ac) time = fe_GetTimeFromEvent(event); - int delta = (time - fe_click_action_last); + unsigned int delta = (time - fe_click_action_last); if (delta < XtGetMultiClickTime(XtDisplay(widget))) n_clicks = 2; diff --git a/mozilla/cmd/xfe/src/View.cpp b/mozilla/cmd/xfe/src/View.cpp index b02f08afbb2..132bf827cac 100644 --- a/mozilla/cmd/xfe/src/View.cpp +++ b/mozilla/cmd/xfe/src/View.cpp @@ -125,6 +125,25 @@ XFE_View::addView(XFE_View *new_view) m_subviews[ m_numsubviews ++ ] = new_view; } +void +XFE_View::removeView(XFE_View *view) +{ + XP_Bool found = FALSE; + int i, vindex; + + for (vindex = 0; vindex < m_numsubviews; vindex++) + { + if (m_subviews[vindex] == view) + break; + } + + for (i = vindex + 1; i < m_numsubviews; i++) + m_subviews[i - 1] = m_subviews[i]; + + if (vindex < m_numsubviews) + --m_numsubviews; +} + Boolean XFE_View::hasSubViews() { @@ -150,6 +169,11 @@ Boolean XFE_View::isCommandEnabled(CommandType cmd, void *calldata, XFE_CommandInfo* info) { + XFE_Command* handler = getCommand(cmd); + + if (handler != NULL) + return handler->isEnabled(this, info); + if ( cmd == xfeCmdStopLoading && m_contextData ) { @@ -177,7 +201,12 @@ XFE_View::isCommandEnabled(CommandType cmd, void XFE_View::doCommand(CommandType cmd, void *calldata, XFE_CommandInfo* info) { - if ( cmd == xfeCmdStopLoading + XFE_Command* handler = getCommand(cmd); + if (handler != NULL) + { + handler->doCommand(this, info); + } + else if ( cmd == xfeCmdStopLoading && m_contextData ) { XP_InterruptContext(m_contextData); @@ -217,6 +246,11 @@ Boolean XFE_View::handlesCommand(CommandType cmd, void *calldata, XFE_CommandInfo* info) { + XFE_Command* handler = getCommand(cmd); + + if (handler != NULL) + return True; + if (cmd == xfeCmdStopLoading) { return True; diff --git a/mozilla/cmd/xfe/src/View.h b/mozilla/cmd/xfe/src/View.h index 05fb8c10108..fb24a9b7662 100644 --- a/mozilla/cmd/xfe/src/View.h +++ b/mozilla/cmd/xfe/src/View.h @@ -118,7 +118,12 @@ public: protected: MWContext *m_contextData; // the MWContext * + +public: virtual void addView(XFE_View *new_view); + virtual void removeView(XFE_View *view); + +protected: virtual Boolean hasSubViews(); // list of children diff --git a/mozilla/cmd/xfe/xfe.h b/mozilla/cmd/xfe/xfe.h index 153e4ebcac1..b2fc2f4a924 100644 --- a/mozilla/cmd/xfe/xfe.h +++ b/mozilla/cmd/xfe/xfe.h @@ -876,6 +876,10 @@ typedef struct fe_EditorContextData { Widget toolbar_center; Widget toolbar_right; +#ifdef ENDER + XP_Bool embedded; +#endif /* ENDER */ + } fe_EditorContextData; /*