diff -r 92a765b5b3e7 -r 91031d3aab7d webengine/wmlengine/src/fbox/src/FBOXImageButtonBox.cpp --- a/webengine/wmlengine/src/fbox/src/FBOXImageButtonBox.cpp Mon May 03 13:32:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,430 +0,0 @@ -/* -* Copyright (c) 2000 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* -*/ - - -#include "nw_fbox_imagebuttonboxi.h" - -#include "nwx_string.h" -#include "nw_evt_activateevent.h" -#include "nw_fbox_imagebuttonboxskin.h" -#include "nw_evt_focusevent.h" -#include "nw_evt_accesskeyevent.h" -#include "nw_lmgr_rootbox.h" -#include "GDIDevicecontext.h" -#include "nw_image_virtualimage.h" -#include "BrsrStatusCodes.h" - -/* ------------------------------------------------------------------------- * - static data - * ------------------------------------------------------------------------- */ - -/* ------------------------------------------------------------------------- */ -const -NW_FBox_ImageButtonBox_Class_t NW_FBox_ImageButtonBox_Class = { - { /* NW_Object_Core */ - /* super */ &NW_FBox_FormBox_Class, - /* queryInterface */ _NW_Object_Base_QueryInterface - }, - { /* NW_Object_Base */ - /* secondaryList */ _NW_FBox_ImageButtonBox_SecondaryList - }, - { /* NW_Object_Dynamic */ - /* instanceSize */ sizeof (NW_FBox_ImageButtonBox_t), - /* construct */ _NW_FBox_ImageButtonBox_Construct, - /* destruct */ _NW_FBox_ImageButtonBox_Destruct, - }, - { /* NW_LMgr_Box */ - /* split */ _NW_FBox_ImageButtonBox_Split, - /* resize */ _NW_FBox_FormBox_Resize, - /* postResize */ _NW_LMgr_Box_PostResize, - /* getMinimumContentSize */ _NW_FBox_FormBox_GetMinimumContentSize, - /* hasFixedContentSize */ _NW_FBox_FormBox_HasFixedContentSize, - /* constrain */ _NW_LMgr_Box_Constrain, - /* draw */ _NW_FBox_ImageButtonBox_Draw, - /* render */ _NW_LMgr_Box_Render, - /* getBaseline */ _NW_FBox_ImageButtonBox_GetBaseline, - /* shift */ _NW_LMgr_Box_Shift, - /* clone */ _NW_LMgr_Box_Clone - - }, - { /* NW_LMgr_ActiveBox */ - /* unused */ NW_Object_Unused - }, - { /* NW_FBox_FormBox */ - /* initSkin */ _NW_FBox_ImageButtonBox_InitSkin, - /* initInteractor */ _NW_FBox_ImageButtonBox_InitInteractor, - /* reset */ _NW_FBox_FormBox_Reset - }, - { /* NW_FBox_ImageButtonBox*/ - /* unused */ NW_Object_Unused - } -}; - -/* ------------------------------------------------------------------------- */ -const NW_Object_Class_t* const _NW_FBox_ImageButtonBox_SecondaryList[] = { - &_NW_FBox_ImageButtonBox_IEventListener_Class, - &_NW_LMgr_AnimatedImageButtonBoxAggregate_Class, - NULL -}; - -/* ------------------------------------------------------------------------- */ -const -NW_LMgr_IEventListener_Class_t _NW_FBox_ImageButtonBox_IEventListener_Class = { - { /* NW_Object_Core */ - /* super */ &NW_LMgr_IEventListener_Class, - /* queryInterface */ _NW_Object_Interface_QueryInterface - }, - { /* NW_Object_Interface */ - /* offset */ offsetof (NW_LMgr_ActiveBox_t, NW_LMgr_IEventListener) - }, - { /* NW_LMgr_IEventListener */ - /* processEvent */ _NW_FBox_ImageButtonBox_IEventListener_ProcessEvent - } -}; - -/* ------------------------------------------------------------------------- */ -const NW_LMgr_AnimatedImageAggregate_Class_t _NW_LMgr_AnimatedImageButtonBoxAggregate_Class = { - { /* NW_Object_Core */ - /* super */ &NW_LMgr_AnimatedImageAggregate_Class, - /* querySecondary */ _NW_Object_Core_QuerySecondary - }, - { /* NW_Object_Secondary */ - /* offset */ offsetof (NW_FBox_ImageButtonBox_t, NW_LMgr_AnimatedImageAggregate) - }, - { /* NW_Object_Aggregate */ - /* secondaryList */ NULL, - /* construct */ NULL, - /* destruct */ NULL - }, - { /* NW_LMgr_AnimatedImageAggregate*/ - /* animate */ _NW_LMgr_AnimatedImageAggregate_Animate, - /* getImage */ _NW_FBox_ImageButtonBox_AnimatedImageAggregate_GetImage - } -}; - -/* ------------------------------------------------------------------------- * - NW_Object_Dynamic - * ------------------------------------------------------------------------- */ - -TBrowserStatusCode -_NW_FBox_ImageButtonBox_Construct (NW_Object_Dynamic_t* dynamicObject, - va_list* argp) -{ - NW_FBox_ImageButtonBox_t* thisObj; - TBrowserStatusCode status; - NW_Text_UCS2_t* label; - static const NW_Ucs2 noText[] = {'\0'}; - - /* for convenience */ - thisObj = NW_FBox_ImageButtonBoxOf (dynamicObject); - - /* invoke our superclass constructor */ - status = _NW_FBox_FormBox_Construct (dynamicObject, argp); - if (status != KBrsrSuccess) { - return status; - } - - /* initialize the member variables */ - - thisObj->value = va_arg (*argp, NW_Text_t*); - thisObj->image = va_arg (*argp, NW_Image_AbstractImage_t*); - - - if (thisObj->value == NULL) { - label = NULL; - label = NW_Text_UCS2_New((NW_Ucs2*) noText, NW_Str_Strlen(noText), 0); - thisObj->value = NW_TextOf(label); - } - else - { - NW_Ucs2* storage = NULL; - NW_Bool freeNeeded = NW_FALSE; - NW_Uint16 flags = 0; - NW_Text_Length_t len = 0; - - /* compress whitespaces */ - flags = NW_Text_Flags_Aligned | NW_Text_Flags_Copy | NW_Text_Flags_NullTerminated; - flags |= NW_Text_Flags_CompressWhitespace; - storage = NW_Text_GetUCS2Buffer (thisObj->value, flags, &len, &freeNeeded); - if (storage == NULL){ - return KBrsrOutOfMemory; - } - status = NW_Text_SetStorage(thisObj->value, storage, len, freeNeeded); - } - - return status; -} - -/* --------------------------------------------------------------------------*/ -void -_NW_FBox_ImageButtonBox_Destruct (NW_Object_Dynamic_t* dynamicObject) -{ - NW_FBox_ImageButtonBox_t* thisObj; - - /* for convenience */ - thisObj = NW_FBox_ImageButtonBoxOf (dynamicObject); - - /* Destroy our text object */ - if(thisObj->value != NULL) - { - NW_Object_Delete(thisObj->value); - } - // destroy virtual image -do not destroy canned image though - if( NW_Object_IsInstanceOf( thisObj->image, &NW_Image_Virtual_Class ) == NW_TRUE ) - { - NW_Object_Delete( thisObj->image ); - } -} - -/* ------------------------------------------------------------------------- */ -/* NW_LMgr_Box */ -/* ------------------------------------------------------------------------- */ -TBrowserStatusCode -_NW_FBox_ImageButtonBox_Draw (NW_LMgr_Box_t* box, - CGDIDeviceContext* deviceContext, - NW_Uint8 hasFocus) -{ - NW_FBox_ImageButtonBox_t* thisObj; - NW_LMgr_AnimatedImageAggregate_t* AnimatedImageAggregate; - TBrowserStatusCode status; - - thisObj = NW_FBox_ImageButtonBoxOf (box); - - /* invoke our superclass draw method first */ - status = _NW_FBox_FormBox_Draw (box, deviceContext, hasFocus); - - /* support for animations. Note the method checks for animations also, i.e. - ImageButtonBox need not be concerned wether the image is animated or not - vishy */ - - /* Get the aggregate object */ - AnimatedImageAggregate = (NW_LMgr_AnimatedImageAggregate_t*) - NW_Object_QuerySecondary (thisObj, &NW_LMgr_AnimatedImageAggregate_Class); - status = NW_LMgr_AnimatedImageAggregate_Animate (AnimatedImageAggregate); - - return status; - -} - -/* ------------------------------------------------------------------------- */ -/* NW_FBox_FormBox */ -/* ------------------------------------------------------------------------- */ - -NW_FBox_Skin_t* -_NW_FBox_ImageButtonBox_InitSkin(NW_FBox_FormBox_t* formBox) -{ - return (NW_FBox_Skin_t *)NW_FBox_ImageButtonBoxSkin_New(formBox); -} - -/* --------------------------------------------------------------------------*/ -NW_FBox_Interactor_t* -_NW_FBox_ImageButtonBox_InitInteractor(NW_FBox_FormBox_t* formBox) -{ - (void)formBox; - return NULL; -} - -/* --------------------------------------------------------------------------*/ - -NW_GDI_Metric_t -_NW_FBox_ImageButtonBox_GetBaseline (NW_LMgr_Box_t* box) - { - CGDIFont* font; - TGDIFontInfo fontInfo; - NW_FBox_ImageButtonBox_t* thisObj; - - /* parameter assertion block */ - NW_ASSERT (box != NULL); - NW_ASSERT (NW_Object_IsInstanceOf (box, &NW_FBox_ImageButtonBox_Class)); - - /* for convenience */ - thisObj = NW_FBox_ImageButtonBoxOf (box); - - if ( thisObj->image ) - { - return NW_LMgr_Box_GetFormatBounds(box).dimension.height; - } - - /* Get the font info */ - font = NW_LMgr_Box_GetFont (box); - if (font != NULL) - { - NW_LMgr_FrameInfo_t padding; - NW_LMgr_FrameInfo_t borderWidth; - - (void) font->GetFontInfo ( &fontInfo); - - /* Get the padding and the border width */ - NW_LMgr_Box_GetPadding(box, &padding, ELMgrFrameTop ); - NW_LMgr_Box_GetBorderWidth(box, &borderWidth, ELMgrFrameTop ); - - return (NW_GDI_Metric_t)(fontInfo.baseline + borderWidth.top + padding.top); - } - - /* unable to get the FontInfo we return our height */ - return NW_LMgr_Box_GetFormatBounds(box).dimension.height; -} - - -/* ------------------------------------------------------------------------- * - implemented interface/aggregate methods - * ------------------------------------------------------------------------- */ - -NW_Image_AbstractImage_t* -_NW_FBox_ImageButtonBox_AnimatedImageAggregate_GetImage (NW_LMgr_AnimatedImageAggregate_t* AnimatedImageAggregate) -{ - NW_FBox_ImageButtonBox_t* thisObj; - - /* obtain the implementer */ - thisObj = (NW_FBox_ImageButtonBox_t*) NW_Object_Interface_GetImplementer (AnimatedImageAggregate); - NW_ASSERT (NW_Object_IsInstanceOf (thisObj, &NW_FBox_ImageButtonBox_Class)); - - return thisObj->image; -} - - -/* --------------------------------------------------------------------------*/ -NW_Uint8 -_NW_FBox_ImageButtonBox_IEventListener_ProcessEvent (NW_LMgr_IEventListener_t* eventListener, - NW_Evt_Event_t* event) - { - NW_FBox_ImageButtonBox_t* thisObj; - NW_FBox_FormLiaison_t* formLiason; - TBrowserStatusCode status = KBrsrSuccess; - - /* parameter assertion block */ - NW_ASSERT (NW_Object_IsInstanceOf (eventListener, - &NW_LMgr_IEventListener_Class)); - NW_ASSERT (NW_Object_IsInstanceOf (event, &NW_Evt_Event_Class)); - - /* obtain the implementer */ - thisObj = (NW_FBox_ImageButtonBox_t*) NW_Object_Interface_GetImplementer (eventListener); - NW_ASSERT (NW_Object_IsInstanceOf (thisObj, &NW_FBox_ImageButtonBox_Class)); - - formLiason = NW_FBox_FormBox_GetFormLiaison( thisObj ); - - if ((NW_Object_Core_GetClass (event) == &NW_Evt_ActivateEvent_Class) || - (NW_Object_Core_GetClass (event) == &NW_Evt_AccessKeyEvent_Class)) - { - // set the button active in order that we can send .x .y data - // at submit time - void* formControlId = NW_FBox_FormBox_GetFormCntrlID( thisObj ); - - // "on" is the keyword - NW_Ucs2 onStr[] = { 'o', 'n', 0 }; - NW_Text_t* onText = NW_Text_New( HTTP_iso_10646_ucs_2, onStr, - NW_Str_Strlen( onStr ), NW_Text_Flags_Copy ); - // cannot handle OOM properly - if( onText ) - { - // SetStringValue takes onText's ownership, unless it fails. - if( NW_FBox_FormLiaison_SetStringValue( formLiason, formControlId, onText ) - != KBrsrSuccess ) - { - NW_Object_Delete( onText ); - } - } - // notify of the click event, - // if the ECMAScript is supported and the element has OnClick attribute - // then the submit and reset function calls are handled after executing OnClick script. - status = NW_FBox_FormLiaison_DelegateEcmaEvent( formLiason, formControlId, NW_Ecma_Evt_OnClick ); - - if( status == KBrsrSuccess ) - { - return NW_LMgr_EventAbsorbed; - } - - /* all submit on form liason */ - (void)NW_FBox_FormLiaison_Submit( formLiason, NW_FBox_FormBox_GetFormCntrlID( thisObj ) ); - return NW_LMgr_EventAbsorbed; - } - else if(NW_Object_Core_GetClass(event) == &NW_Evt_FocusEvent_Class) { - return NW_LMgr_EventAbsorbed; - } - - return _NW_LMgr_ActiveBox_IEventListener_ProcessEvent (eventListener, event); - } - -/* --------------------------------------------------------------------------*/ -TBrowserStatusCode -_NW_FBox_ImageButtonBox_Split(NW_LMgr_Box_t* box, - NW_GDI_Metric_t space, - NW_LMgr_Box_t* *splitBox, - NW_Uint8 flags) -{ - NW_ASSERT(box != NULL); - - *splitBox = NULL; - /* If box does not fit in the space and the box is not - on the new line the input box needs to be pushed on the new line */ - NW_GDI_Rectangle_t boxBounds = NW_LMgr_Box_GetFormatBounds( box ); - if ((boxBounds.dimension.width > space) && !(flags & NW_LMgr_Box_SplitFlags_AtNewLine)) - { - return KBrsrLmgrNoSplit; - } - - if(boxBounds.dimension.width <= space) - { - return KBrsrSuccess; - } - - /* we are more than space */ - - /* if width was specified we do not want to change it / - status = NW_LMgr_Box_GetPropertyValue(box, NW_CSS_Prop_width, NW_CSS_ValueType_Px, &sizeVal); - if (status == KBrsrSuccess){ - return status; - }*/ - boxBounds.dimension.width = space; - NW_LMgr_Box_SetFormatBounds( box, boxBounds ); - - return KBrsrSuccess; -} - - -/* --------------------------------------------------------------------------*/ -void -NW_LMgr_ImageButtonBox_ReplaceBrokenImage( NW_LMgr_Box_t* box, NW_Image_AbstractImage_t* image ) - { - NW_FBox_ImageButtonBox_t* thisObj; - - NW_ASSERT( box != NULL ); - NW_ASSERT( NW_Object_IsInstanceOf ( box, &NW_FBox_ImageButtonBox_Class ) ); - - thisObj = NW_FBox_ImageButtonBoxOf( box ); - - // dont free canned image - // but replace it - thisObj->image = image; - } - -/* ------------------------------------------------------------------------- * - convenience methods - * ------------------------------------------------------------------------- */ - -/* --------------------------------------------------------------------------*/ -NW_FBox_ImageButtonBox_t* -NW_FBox_ImageButtonBox_New (NW_ADT_Vector_Metric_t numProperties, - NW_LMgr_EventHandler_t* eventHandler, - void* formCntrlId, - NW_FBox_FormLiaison_t* formLiaison, - NW_Text_t* value, - NW_Image_AbstractImage_t* image) -{ - return (NW_FBox_ImageButtonBox_t*) - NW_Object_New (&NW_FBox_ImageButtonBox_Class, numProperties, eventHandler, - formCntrlId, formLiaison,value, image); -}