--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/plugins/TextPlugin/src/ImageEditorTextPlugin.cpp Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,274 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:
+* Text plugin class.
+*
+*/
+
+
+
+#include <aknquerydialog.h>
+
+#include "ImageEditorTextPlugin.h"
+#include "ImageEditorTextControl.h"
+#include "ImageEditorPluginBaseDefs.h"
+#include "DrawUtils.h"
+#include "SystemParameters.h"
+
+#ifdef TEXT_INSERTION_IN_PORTRAIT_ONLY
+#include <aknappui.h>
+#endif
+
+// CONSTANTS
+_LIT (KPgnResourceFile, "text.rsc");
+
+
+//=============================================================================
+EXPORT_C CImageEditorPluginBase * CreateImageEditorPlugin ()
+{
+ CImageEditorTextPlugin * plugin = new (ELeave) CImageEditorTextPlugin;
+ CleanupStack::PushL(plugin);
+ plugin->ConstructL();
+ CleanupStack::Pop(); // plugin
+ return plugin;
+}
+
+//=============================================================================
+CImageEditorTextPlugin::CImageEditorTextPlugin () : iLandscapeEnabled(EFalse)
+{
+
+}
+
+//=============================================================================
+void CImageEditorTextPlugin::ConstructL ()
+{
+ CImageEditorPluginBase::ConstructL (KPgnResourcePath, KPgnResourceFile);
+}
+
+//=============================================================================
+CImageEditorTextPlugin::~CImageEditorTextPlugin ()
+{
+ ReleasePlugin();
+ iSysPars = NULL;
+}
+
+//=============================================================================
+TInt CImageEditorTextPlugin::SetProperty (
+ TInt aPropertyId,
+ TDesC & aPropertyValue
+ )
+{
+
+ TInt err = KErrNone;
+ TLex parser;
+
+ // Copy data
+ switch (aPropertyId)
+ {
+ case KCapSystemParameters:
+ {
+ parser.Assign (aPropertyValue);
+ TInt tempval = 0;
+ parser.Val (tempval);
+ iSysPars = (const CSystemParameters *)tempval;
+ err = KErrNone;
+ break;
+ }
+ default:
+ {
+ err = CImageEditorPluginBase::SetProperty (aPropertyId, aPropertyValue);
+ break;
+ }
+ }
+ return err;
+}
+
+//=============================================================================
+TInt CImageEditorTextPlugin::GetProperty (
+ TInt aPropertyId,
+ TDes & aPropertyValue
+ )
+{
+ // Clean buffer
+ aPropertyValue.Zero();
+
+ // Copy data
+ switch (aPropertyId)
+ {
+ case KCapParamStruct:
+ {
+ // Control found
+ if (iControl)
+ {
+ aPropertyValue.Copy ( ((CImageEditorTextControl *)iControl)->GetParam() );
+ return KErrNone;
+ }
+
+ // Control not found, return KErrNotReady
+ else
+ {
+ return KErrNotReady;
+ }
+ }
+ case KCapReadyToRender:
+ {
+ TBool readytorender = ETrue;
+ if (iControl)
+ {
+ readytorender = ((CImageEditorTextControl *)iControl)->IsReadyToRender();
+ }
+ aPropertyValue.AppendNum ((TInt)readytorender);
+ return KErrNone;
+ }
+ case KCapIsLandscapeEnabled:
+ {
+ aPropertyValue.AppendNum ((TInt)iLandscapeEnabled);
+ return KErrNone;
+ }
+ case KCapIsSlowPlugin:
+ {
+ aPropertyValue.AppendNum ((TInt)ETrue);
+ return KErrNone;
+ }
+ default:
+ {
+ return CImageEditorPluginBase::GetProperty (aPropertyId, aPropertyValue);
+ }
+ }
+}
+
+//=============================================================================
+TInt CImageEditorTextPlugin::InitPluginL (
+ const TRect & aRect,
+ CCoeControl * aParent,
+ CCoeControl *& aPluginControl
+ )
+{
+ // Delete previous control
+ ReleasePlugin();
+
+ TInt ret = KErrNone;
+
+ // Get pointer to the parameter descriptor array
+ TBuf<256> readbuf;
+ TLex parser;
+ User::LeaveIfError ( CImageEditorPluginBase::GetProperty (KCapPluginParamNames, readbuf) );
+ parser.Assign (readbuf);
+ TInt tempval = 0;
+ parser.Val ( tempval );
+ CDesCArray * pars = (CDesCArray *)tempval;
+
+ CEikonEnv* env = CEikonEnv::Static();
+
+#ifdef TEXT_INSERTION_IN_PORTRAIT_ONLY
+ // Text input is always insterted in portrait mode.
+ // Store the original orientation before forcing to portrait.
+ CAknAppUiBase* appUi = static_cast<CAknAppUiBase *>( env->EikAppUi() );
+ CAknAppUiBase::TAppUiOrientation originalOrientation = appUi->Orientation();
+ appUi->SetOrientationL(CAknAppUiBase::EAppUiOrientationPortrait);
+#endif
+
+ TRAPD(err,
+
+ TBuf<256> text;
+ TBuf<64> prompt;
+ prompt.Copy ( (*pars)[0] );
+
+ TInt ok = SDrawUtils::LaunchMultiLineTextQueryDialogL ( text, prompt );
+
+ // Create new control
+ if (ok)
+ {
+ iControl = CImageEditorTextControl::NewL (aRect, aParent);
+ aPluginControl = iControl;
+
+ // Set system parameters
+ ((CImageEditorTextControl*)iControl)->SetSystemParameters (iSysPars);
+
+ // Set the text
+ ((CImageEditorTextControl*)iControl)->SetTextL ( text );
+
+ iLandscapeEnabled = ETrue;
+
+ ret = KErrNone;
+ }
+ else
+ {
+ aPluginControl = 0;
+ ret = KErrNotSupported;
+ }
+
+ ) // TRAP
+
+
+#ifdef TEXT_INSERTION_IN_PORTRAIT_ONLY
+ // Set always back to original orientation, even if leaves
+ CAknAppUiBase::TAppUiOrientation orientation = appUi->Orientation();
+
+ if (orientation != originalOrientation)
+ {
+ appUi->SetOrientationL(originalOrientation);
+
+ // Send screen device change event to validate screen
+ TWsEvent event;
+
+ RWsSession& rws = env->WsSession();
+ event.SetType( EEventScreenDeviceChanged );
+ event.SetTimeNow();
+ event.SetHandle( rws.WsHandle() );
+
+ User::LeaveIfError( rws.SendEventToAllWindowGroups(event) );
+ }
+#else
+#ifdef LANDSCAPE_ONLY
+
+ appUi->SetOrientationL(CAknAppUiBase::EAppUiOrientationLandscape);
+
+ // Send screen device change event to validate screen
+ TWsEvent event;
+
+ RWsSession& rws = env->WsSession();
+ event.SetType( EEventScreenDeviceChanged );
+ event.SetTimeNow();
+ event.SetHandle( rws.WsHandle() );
+
+ User::LeaveIfError( rws.SendEventToAllWindowGroups(event) );
+
+#endif
+#endif
+
+
+ if (err)
+ {
+ User::Leave(err);
+ }
+
+ return ret;
+}
+
+//=============================================================================
+void CImageEditorTextPlugin::ProcessImageL (CEditorImage * /*aImage*/ )
+{
+
+}
+
+//=============================================================================
+void CImageEditorTextPlugin::ReleasePlugin ()
+{
+ delete iControl;
+ iControl = NULL;
+}
+
+// End of File