home *** CD-ROM | disk | FTP | other *** search
- /* -*- 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.
- */
-
- /*
- * macmocha.h
- * MacFE mocha hacks
- *
- */
-
- #include "structs.h" // mjc
- #include "libevent.h"
-
- /*
- * static class that encapsulates most of the Macha hacks
- */
- class CMochaHacks
- {
- private:
- static LO_Element* sMouseOverElement; // layout element the cursor is over
- static MWContext* sMouseOverElementContext; // context associated with sMouseOverElement
- static LO_AnchorData* sMouseOverMapArea; // AREA tag the cursor is over
-
- public:
- static void ClearSelectionForContext( MWContext* context )
- {
- if (context == sMouseOverElementContext)
- {
- sMouseOverElement = NULL;
- sMouseOverElementContext = NULL;
- sMouseOverMapArea = NULL;
- }
- }
- static void SendOutOfElementEvent(MWContext * winContext, CL_Layer* layer, SPoint32 where); // add layer param 1997-03-02 mjc
- static void SendOutOfMapAreaEvent(MWContext * winContext, CL_Layer* layer, SPoint32 where); // add layer param 1997-03-02 mjc
- static void ResetMochaMouse();
-
- static Boolean IsMouseOverElement(LO_Element* inElement)
- { return inElement == sMouseOverElement; }
- static Boolean IsMouseOverMapArea(LO_AnchorData* inAnchorData)
- { return inAnchorData == sMouseOverMapArea; }
-
- static void SetMouseOverElement(LO_Element* inElement, MWContext* inElementContext = NULL)
- {
- sMouseOverElement = inElement;
- sMouseOverElementContext = inElementContext;
- }
- static void RemoveReferenceToMouseOverElementContext(MWContext *context)
- {
- if (sMouseOverElementContext == context)
- sMouseOverElementContext = NULL;
- }
- static void SetMouseOverMapArea(LO_AnchorData* inAnchorData)
- { sMouseOverMapArea = inAnchorData; }
-
- static LO_Element* GetMouseOverElement()
- { return sMouseOverElement; }
- static LO_AnchorData* GetMouseOverMapArea()
- { return sMouseOverMapArea; }
-
- static uint32 MochaModifiers(const UInt16 inModifiers);
- static uint32 MochaModifiersFromKeyboard(void);
-
- // manage windows declared as dependent in javascript
- static Boolean IsDependent(MWContext* inContext);
- static void AddDependent(MWContext* inParent, MWContext* inChild);
- static void RemoveDependents(MWContext* inContext);
-
- // Whenever a window or frame moves or resizes send an event to javascript
- static void SendMoveEvent(MWContext* inContext, int32 inX, int32 inY);
-
- static void SendEvent(MWContext* inContext, int32 inType, LO_Element* inElement = nil);
-
- // Send navigation events - currently not cancellable
- static void SendBackEvent(MWContext* inContext)
- { SendEvent(inContext, EVENT_BACK); }
-
- static void SendForwardEvent(MWContext* inContext)
- { SendEvent(inContext, EVENT_FORWARD); }
- };
-
- /*
- * CMochaEventCallback
- * class that encapsulates sending of mocha events
- * Subclasses should override EventComplete
- */
-
- class CMochaEventCallback {
- public:
-
- // Constructors
- CMochaEventCallback();
- virtual ~CMochaEventCallback();
-
- // Mocha interface
- void SendEvent(MWContext * context, LO_Element * element, int32 type, CL_Layer* layer, SPoint32 where);
- void SendEvent(MWContext * context, LO_AnchorData * data, int32 type, CL_Layer* layer, SPoint32 where);
-
- // MochaCallback calls EventComplete. You'll be deleted after this call
- virtual void Complete(MWContext * context, LO_Element * element,
- int32 type, ETEventStatus status);
-
- static void MochaCallback(MWContext * context, LO_Element * element,
- int32 type, void * inCallback, ETEventStatus status);
-
- private:
- // Old Mocha calls used to accept either LO_Element, or LO_AnchorData
- // New ones only accept LO_Element, so sometimes we need to create/dispose
- // dummy layout elements. This is encapsulated in this class
- LO_Element * fDummyElement;
- };