browserui/browser/FeedsSrc/FeedsEditFeedDialog.cpp
changeset 0 84ad3b177aa3
child 10 57d5b8e231c4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/browserui/browser/FeedsSrc/FeedsEditFeedDialog.cpp	Mon Mar 30 12:49:49 2009 +0300
@@ -0,0 +1,660 @@
+/*
+* Copyright (c) 2005 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:  Encapsulates a edit feed dialog.
+*
+*/
+
+
+#include <AknPopupFieldText.h>
+#include <aknslider.h>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <eikedwin.h>
+#include <eikmenup.h>
+#include <charconv.h>
+#include <aknviewappui.h>
+#include <StringLoader.h>
+
+#ifdef __SERIES60_HELP
+// Context-Sensitve Help File
+#include <hlplch.h>
+#include <csxhelp/browser.hlp.hrh>
+#include "BrowserApplication.h"
+#endif // __SERIES60_HELP
+
+#include "BrowserAppUi.h"
+#include "BrowserAppViewBase.h"
+#include "Browser.hrh"
+#include <BrowserNG.rsg>
+#include <AknRadioButtonSettingPage.h>
+
+#include "FeedsEditFeedDialog.h"
+
+//Constants
+const TInt KAutoUpdatingOff = 0;
+const TInt KFifteen = 15;
+const TInt KOneHour = 60;
+const TInt KFourHour = 240;
+const TInt KDay = 1440;
+const TInt KWeek = 10080;
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog* CFeedsEditFeedDialog::NewL(MFeedsEditFeedDialogObserver& aObserver,
+        CAknViewAppUi* aAppUi,
+        const TDesC& aName, const TDesC& aUrl, TInt aFreq) 
+    {
+    CFeedsEditFeedDialog* self = new (ELeave) CFeedsEditFeedDialog(aObserver, aAppUi, aName, aUrl, aFreq);   
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    self->iSelectedDlgLine = 0;
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::NewL
+//
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog* CFeedsEditFeedDialog::NewL(MFeedsEditFeedDialogObserver& aObserver, CAknViewAppUi* aAppUi)
+    {
+    CFeedsEditFeedDialog* self = new (ELeave) CFeedsEditFeedDialog(aObserver, aAppUi, KNullDesC, KNullDesC,0);   
+    
+    CleanupStack::PushL(self);
+    self->iIsNewFeed = ETrue;
+    self->ConstructL();
+    CleanupStack::Pop(self);
+
+    return self;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::CFeedsEditFeedDialog
+//
+// C++ default constructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog::CFeedsEditFeedDialog (MFeedsEditFeedDialogObserver& aObserver,
+        CAknViewAppUi* aAppUi,
+        const TDesC& aName, const TDesC& aUrl, TInt aFreq)
+    :iObserver(aObserver), iAppUi(aAppUi), iName(aName), iUrl(aUrl),iFreq(aFreq), iActionCancelled(EFalse)
+    {
+    iPreviousFreq = iFreq;
+    }
+
+
+
+// ----------------------------------------------------
+// CFeedsEditFeedDialog::OfferKeyEventL
+// Keyevent process.
+// ----------------------------------------------------
+//
+TKeyResponse CFeedsEditFeedDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,
+                                      TEventCode aType)
+    {
+    if ((aKeyEvent.iScanCode == EStdKeyDevice3) || (aKeyEvent.iScanCode == EStdKeyEnter))
+        {
+        if ((aType == EEventKey) && (iSelectedDlgLine == EFeedsEditAutomaticUpdatingId))
+            {         
+            HandleFreqCmdL();
+            return EKeyWasConsumed;
+            }
+        }
+    return CAknForm::OfferKeyEventL(aKeyEvent, aType);
+    }    
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::HandlePointerEventL
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::HandlePointerEventL(const TPointerEvent& aPointerEvent) 
+    {
+    if ((iSelectedDlgLine == EFeedsEditAutomaticUpdatingId) && (aPointerEvent.iType == TPointerEvent::EButton1Up))
+        HandleFreqCmdL();
+    else 
+        CAknForm::HandlePointerEventL(aPointerEvent);
+    }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::OkToExitL
+// ---------------------------------------------------------
+//
+
+TBool CFeedsEditFeedDialog::OkToExitL( TInt aButtonId  )
+    {
+    if (aButtonId == EAknSoftkeyOptions)
+        {
+        DisplayMenuL();
+        return EFalse;
+        }
+    else
+        if ((aButtonId == EAknSoftkeyChange) && (iSelectedDlgLine == EFeedsEditAutomaticUpdatingId))
+        {
+        HandleFreqCmdL();
+        return EFalse;
+        }
+    else
+        {
+        return CAknForm::OkToExitL(aButtonId);    	
+        }    
+    }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::HandleFreqCmdL
+// Handles the auto update freuency modification commands
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::HandleFreqCmdL()
+    {
+    TBuf<32> title(_L("Auto update"));
+    TInt currentlySelected = KAutoUpdatingOff;
+
+    // options array
+    CDesCArrayFlat* values = new( ELeave )CDesCArrayFlat(1);
+
+    CleanupStack::PushL( values );
+    HBufC* text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF);
+    values->AppendL(text->Des());
+    CleanupStack::Pop();
+
+    text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN);
+    values->AppendL(text->Des());
+    CleanupStack::Pop();
+
+    text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY);
+    values->AppendL(text->Des());
+    CleanupStack::Pop();
+
+    text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS);
+    values->AppendL(text->Des());
+    CleanupStack::Pop();
+
+    text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY);
+    values->AppendL(text->Des());
+    CleanupStack::Pop();
+
+    text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY);
+    values->AppendL(text->Des());
+    CleanupStack::Pop();
+
+    switch(iFreq)
+        {
+        case KAutoUpdatingOff:
+            currentlySelected = EFeedsEditAutomaticUpdatingOff;
+            break;
+        case KFifteen:
+            currentlySelected = EFeedsEditAutomaticUpdating15min;
+            break;
+        case KOneHour:
+            currentlySelected = EFeedsEditAutomaticUpdatingHourly;
+            break;
+        case KFourHour:
+            currentlySelected = EFeedsEditAutomaticUpdating4hours;
+            break;
+        case KDay:
+            currentlySelected = EFeedsEditAutomaticUpdatingDaily;
+            break;
+        case KWeek:
+            currentlySelected = EFeedsEditAutomaticUpdatingWeekly;
+            break;
+        }
+
+    currentlySelected = ShowRadioButtonSettingPageL(title,values,currentlySelected);
+
+    if(!iActionCancelled)
+        {
+        switch(currentlySelected)
+            {
+            case EFeedsEditAutomaticUpdatingOff:
+                iFreq = KAutoUpdatingOff;
+                break;
+            case EFeedsEditAutomaticUpdating15min:
+                iFreq = KFifteen;
+                break;
+            case EFeedsEditAutomaticUpdatingHourly:
+                iFreq = KOneHour;
+                break;
+            case EFeedsEditAutomaticUpdating4hours:
+                iFreq = KFourHour;
+                break;
+            case EFeedsEditAutomaticUpdatingDaily:
+                iFreq = KDay;
+                break;
+            case EFeedsEditAutomaticUpdatingWeekly:
+                iFreq = KWeek;
+                break;
+            }
+        CAknPopupField *freqControl =
+        static_cast< CAknPopupField* >( Control( EFeedsEditAutomaticUpdatingId ) );	
+        switch(iFreq)
+            {
+            case KAutoUpdatingOff:
+                text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF);
+                break;
+            case KFifteen:
+                text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN);
+                break;
+            case KOneHour:
+                text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY);
+                break;
+            case KFourHour:
+                text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS);
+                break;
+            case KDay:
+                text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY);
+                break;
+            case KWeek:
+                text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY);
+                break;
+            }
+        freqControl->SetEmptyTextL(text->Des());
+        CleanupStack::Pop();
+        SetChangesPending(ETrue);
+        }
+    CleanupStack::PopAndDestroy(values);
+    }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::PostLayoutDynInitL
+// ---------------------------------------------------------
+//
+
+void CFeedsEditFeedDialog::PostLayoutDynInitL()
+    {
+    //Call the Base class LineChangedL() before the form is actually drawn
+    // Call the LineChangedL to avoid the line clicking error for the first line
+    LineChangedL(EFeedsEditDialogUrlId);
+    // Call the base class PostLayoutDynInitL()
+    CAknForm::PostLayoutDynInitL();
+    }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::LineChangedL
+// Takes any action required when the current line is changed
+// to aControlId.
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::LineChangedL( TInt aControlId )
+    {	
+    iSelectedDlgLine = aControlId;		
+    //get the reference to the buttomgroup container
+    CEikButtonGroupContainer& cba = ButtonGroupContainer();
+    //add the 'Change' command
+    //cba.SetCommandSetL(R_EDIT_FEEDS_CBA_OPTIONS_AUTO_UPDATE_CONTEXT_MENU);
+
+    //now we check where is the control, as 'Change' command is not to be 
+    //shown for the first two form lines
+    if((aControlId == EFeedsEditDialogUrlId) ||
+                    (aControlId == EFeedsEditDialogNameId))
+        {
+        // make the 'Change' button invisible
+        cba.MakeCommandVisible(EAknSoftkeyChange, EFalse);
+        }
+    else if(aControlId == EFeedsEditAutomaticUpdatingId) 
+        {
+        // make the 'Change' Button visible
+        cba.MakeCommandVisible(EAknSoftkeyChange, ETrue);
+        }
+    else
+        {
+        //blank implementation
+        }
+        // draw the CBA	
+    cba.DrawNow();	
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::~CFeedsEditFeedDialog
+//
+// Deconstructor.
+// -----------------------------------------------------------------------------
+//
+CFeedsEditFeedDialog::~CFeedsEditFeedDialog()
+    {
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::PreLayoutDynInitL
+//
+// Called to setup the options menu with the dialog is active.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFeedDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+    {
+    CAknForm::DynInitMenuPaneL(aResourceId, aMenuPane);
+    
+    if (aResourceId == R_AVKON_FORM_MENUPANE)
+        {
+        aMenuPane->SetItemDimmed(EAknFormCmdLabel, ETrue);
+        aMenuPane->SetItemDimmed(EAknFormCmdAdd, ETrue);
+        aMenuPane->SetItemDimmed(EAknFormCmdDelete, ETrue);
+
+        aMenuPane->AddMenuItemsL(R_FEEDS_HELP_EXIT_FEED_MENU);
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::SaveFormDataL
+//
+// Called by the framework whenver the 'Save' menu item is selected.
+// -----------------------------------------------------------------------------
+//
+TBool CFeedsEditFeedDialog::SaveFormDataL()
+    {
+    CEikEdwin*  textEditorName;
+    CEikEdwin*  textEditorUrl;
+
+    HBufC*      name = NULL;
+    HBufC*      url = NULL;  
+    TBool       valid = EFalse;
+
+    // Extract the new name.
+    textEditorName = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+    name = textEditorName->GetTextInHBufL();
+    CleanupStack::PushL(name);
+
+    // Extract the url name.
+    textEditorUrl = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogUrlId));
+    url = textEditorUrl->GetTextInHBufL();
+    CleanupStack::PushL(url);
+
+    // Notify the observer.
+    valid = iObserver.IsFeedNameValidL(name, !iIsNewFeed);
+
+    // If invalid force the user to reentry it.
+    if (!valid)
+        {
+        // Change Focus and select the name field.
+        TryChangeFocusToL( EFeedsEditDialogNameId );
+        textEditorName->SelectAllL();
+
+        iExitDialog = EFalse;
+        }
+
+    // Otherwise, check the url too.
+    else
+        {
+        valid = iObserver.IsFeedUrlValidL(url);
+
+        // If invalid force the user to reentry it.
+        if (!valid)
+            {
+	        // Set focus to url field 
+            TryChangeFocusToL( EFeedsEditDialogUrlId );
+            // Position focus to end of char, but not highlight the whole url field
+            textEditorUrl->SetSelectionL( textEditorUrl->TextLength(), textEditorUrl->TextLength() );
+            textEditorUrl->DrawDeferred();
+			iExitDialog = EFalse;
+			}
+
+        // Otherwise pass the new values to the observer.
+        else
+            {
+            if (iIsNewFeed)
+                {
+                iObserver.NewFeedL(*name, *url, iFreq);
+                }
+            else
+                {
+                // If the setting is changed from Off to other values, a confirmation
+                // query with text: 'Enabling automatic updating may increase your monthly
+                // phone bill' is shown.
+                if ((iPreviousFreq == EFeedsEditAutomaticUpdatingOff) && 
+                     (iFreq != EFeedsEditAutomaticUpdatingOff) && (iPreviousFreq != iFreq))
+                    {
+                    HBufC* note = StringLoader::LoadLC( R_FEEDS_DATAQUERY_AUTOUPDATEWARN );
+                    if(iPreviousFreq == 0)
+                        {
+                      //  ShowInfoDialogwithOkSoftKeyL( note->Des() );    
+                        ShowInfoDialogwithOkSoftKeyL( _L("Enabling automatic updating may increase your monthly phone bill") );    
+                        }
+                    CleanupStack::PopAndDestroy(); // note
+                    iPreviousFreq = iFreq;
+                    }
+                iObserver.UpdateFeedL(*name, *url, iFreq);
+                }
+
+            iExitDialog = ETrue;
+            }
+        }
+
+    // Clean up.
+    CleanupStack::PopAndDestroy(url);   
+    CleanupStack::PopAndDestroy(name);  
+
+    return valid;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::PreLayoutDynInitL
+//
+// Called by the framework before the form is initialised.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFeedDialog::PreLayoutDynInitL()
+    {
+    CEikEdwin*  textEditor = NULL;
+
+    CAknForm::PreLayoutDynInitL();
+
+    // Get the name field
+    textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
+
+    // If the name was set then set it.
+    if (iName.Length() > 0)
+        {
+        textEditor->SetTextL(&iName);
+        }
+
+    // Otherwise use the default name.
+    else
+        {
+    	HBufC*  text = NULL;
+	
+        // Load the label
+        text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_ITEM);
+        CleanupStack::PushL(text);
+
+        textEditor->SetTextL(text);
+  		SetFormFlag(EUnsavedEdit, ETrue);
+
+        CleanupStack::PopAndDestroy(text);
+        }
+
+    // Get the url field
+    textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogUrlId));
+
+    textEditor->SetAknEditorAllowedInputModes( EAknEditorTextInputMode | EAknEditorNumericInputMode );
+
+	textEditor->SetAknEditorFlags
+        (
+        EAknEditorFlagLatinInputModesOnly |
+        EAknEditorFlagUseSCTNumericCharmap
+        );
+    textEditor->SetAknEditorPermittedCaseModes( EAknEditorUpperCase | EAknEditorLowerCase );
+
+    // If the url was set then set it.
+    if (iUrl.Length() > 0)
+        {
+        textEditor->SetTextL(&iUrl);
+        }
+
+    // Otherwise use the url.
+    else
+        {
+    	HBufC*  text = NULL;
+	
+        // Load the label
+        text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FEED_URL_ITEM);
+        CleanupStack::PushL(text);
+
+        textEditor->SetTextL(text);
+  		SetFormFlag(EUnsavedEdit, ETrue);
+
+        CleanupStack::PopAndDestroy(text);
+        }
+    CAknPopupField *freqControl =
+    static_cast< CAknPopupField* >( Control( EFeedsEditAutomaticUpdatingId ) );
+    HBufC* text = NULL;
+    switch(iFreq)
+        {
+        case KAutoUpdatingOff:
+            text = iCoeEnv->AllocReadResourceLC(R_FEEDS_AUTOUPDATING_FEEDS_OFF);
+            break;
+        case KFifteen:
+            text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_15MIN);
+            break;
+        case KOneHour:
+            text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_HOURLY);
+            break;
+        case KFourHour:
+            text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_4HOURS);
+            break;
+        case KDay:
+            text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_DAILY);
+            break;
+        case KWeek:
+            text = iCoeEnv->AllocReadResourceLC(R_FEEDS_UPDATING_INTERVAL_WEEKLY);
+            break;
+        }
+    freqControl->SetEmptyTextL(text->Des());
+    CleanupStack::Pop();
+    }
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::ProcessCommandL
+//
+// Called by the framework to process the options menu.
+// -----------------------------------------------------------------------------
+//
+void CFeedsEditFeedDialog::ProcessCommandL(TInt aCommandId)
+    {
+    switch (aCommandId)
+        {
+        case EAknCmdExit:
+            {
+            // Custom added commands. Forward to view.
+            // Note that we respond to EAknCmdExit, not CEikCmdExit; it's
+            // because we don't get it through the AppUi framework (instead,
+            // we forward it there now).
+            CBrowserAppUi::Static()->ActiveView()->ProcessCommandL( aCommandId ); 
+            break;
+            }
+
+        case EEikCmdExit:
+            break;
+
+#ifdef __SERIES60_HELP
+        case EAknFepCmdPredHelp:
+        case EAknCmdHelp:
+            HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), 
+                    iAppUi->AppHelpContextL());
+
+	        break;
+#endif //__SERIES60_HELP 
+
+        default:
+            // Standard form commands.
+            CAknForm::ProcessCommandL(aCommandId);
+
+            if (iExitDialog)
+                {
+                TryExitL(EAknSoftkeyBack);
+                }
+            break;
+        }
+    }  
+
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::GetHelpContext
+//
+// Get help context for the control.
+// -----------------------------------------------------------------------------
+//
+#ifdef __SERIES60_HELP
+void CFeedsEditFeedDialog::GetHelpContext(TCoeHelpContext& aContext) const
+    {
+    // This must be the Browser's uid becasue the help texts are under Browser topics.
+    aContext.iMajor = KUidBrowserApplication;
+    
+    if (iIsNewFeed)
+        {        
+        aContext.iContext = KOSS_HLP_RSS_ADD;
+        }
+    else
+        {        
+        aContext.iContext = KOSS_HLP_RSS_EDIT;
+        }    
+    }
+#endif // __SERIES60_HELP
+
+// -----------------------------------------------------------------------------
+// CFeedsEditFeedDialog::ShowRadioButtonSettingPageL
+// -----------------------------------------------------------------------------
+//
+TInt CFeedsEditFeedDialog::ShowRadioButtonSettingPageL(
+                                                    TDesC& aTitle,
+                                                    CDesCArrayFlat* aValues,
+                                                    TInt aCurrentItem )
+    {
+
+    // index must be turned upside down, because options list is upside down
+    //TInt newItem = aCurrentItem = aValues->Count() - 1 - aCurrentItem;
+    TInt newItem = aCurrentItem;
+
+    // We have everything to create dialog
+    CAknRadioButtonSettingPage* dlg = new ( ELeave )CAknRadioButtonSettingPage(
+        R_RADIO_BUTTON_SETTING_PAGE, newItem, aValues );
+
+    CleanupStack::PushL( dlg );
+    dlg->SetSettingTextL( aTitle );
+    CleanupStack::Pop(); // dlg
+    iActionCancelled = EFalse;
+    if ( !dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+        {
+        // Changes confirmed
+        newItem = aCurrentItem;
+        iActionCancelled = ETrue;
+        }
+    //iActionCancelled = EFalse;
+
+    // index must be re-turned upside down, because options list is upside down
+    return newItem;
+    }
+
+// ---------------------------------------------------------
+// CFeedsEditFeedDialog::ShowInfoDialogwithOkSoftKeyL
+// ---------------------------------------------------------
+//
+void CFeedsEditFeedDialog::ShowInfoDialogwithOkSoftKeyL( const TDesC& aNoteText )
+    {
+    CAknNoteDialog* dlg = new (ELeave) CAknNoteDialog(CAknNoteDialog::EConfirmationTone,CAknNoteDialog::ENoTimeout);
+    dlg->SetTextL( aNoteText );
+    dlg->PrepareLC( R_FEEDS_EDIT_AUTOUPDATE_INFORMATION_NOTE_DIALOG );
+    dlg->RunLD();
+    }