Beispiel #1
0
TBool CProfileListDialog::OkToExitL(TInt aButtonId) {

    TBool okToExit = EFalse;   
    CEikTextListBox *lbox = ((CEikTextListBox*)Control(EProfileListDlgProfileList));

    // Buffers for current and new file names and a name
    HBufC *fileNameBuf = HBufC::NewLC(KMaxFileName);
    TPtr fileName = fileNameBuf->Des();
    HBufC *nameBuf = HBufC::NewLC(KMaxFileName);
    TPtr name = nameBuf->Des();
    
    switch ( aButtonId ) {
        case ECmdProfileListConnect: {
            // Connect to the selected profile
            TInt sel = lbox->CurrentItemIndex();
            if ( sel == KDefaultProfileIndex ) {
                iProfileFile = iDefaultProfileFile;
            } else {
                iProfileFile = iProfileDirectory;
                iProfileFile.Append((*iProfileArray)[sel]);
            }
            okToExit = ETrue;
            break;
        }
            
        case ECmdProfileListEdit: {
            // Edit the selected profile
            TInt sel = lbox->CurrentItemIndex();
            if ( sel == KDefaultProfileIndex ) {
                name = KDefaultProfileName;
                fileName = iDefaultProfileFile;
            } else {
                name = (*iProfileArray)[sel];
                fileName = iProfileDirectory;
                fileName.Append(name);
            }

            // Edit settings
            iPutty->ReadConfigFileL(fileName);
            Config *cfg = iPutty->GetConfig();
            CSettingsDialog *dlg = new (ELeave)
                CSettingsDialog(name, (sel == KDefaultProfileIndex), cfg,
                                iPutty);
            switch ( dlg->ExecuteLD(R_SETTINGS_DIALOG) ) {
                case EEikBidOk:
                    // Handle rename first
                    if ( (sel != KDefaultProfileIndex) &&
                         (name.Compare((*iProfileArray)[sel]) != 0) ) {
                        MakeNameLegal(name);
                        // Delete current file so that we can rename to a file
                        // that maps to the same name (e.g. changes in case)
                        User::LeaveIfError(
                            CEikonEnv::Static()->FsSession().Delete(fileName));
                        MakeNameUniqueL(name);
                        fileName = iProfileDirectory;
                        fileName.Append(name);
                        
                        // Update profile list and listbox
                        iProfileArray->Delete(sel);
                        iProfileArray->InsertL(sel, name);
                        lbox->DrawNow();
                    }
                    // Just write, the name can be an old one or a renamed one
                    iPutty->WriteConfigFileL(fileName);
                    break;

                case ECmdSettingsDelete:
                    if ( sel != KDefaultProfileIndex ) {
                        // Remove the profile from the list and update
                        // listbox
                        iProfileArray->Delete(sel);
                        lbox->HandleItemRemovalL();
                        if ( sel >= iProfileArray->Count() ) {
                            sel = iProfileArray->Count() - 1;
                        }
                        lbox->SetCurrentItemIndexAndDraw(sel);

                        // Delete profile file
                        User::LeaveIfError(
                            CEikonEnv::Static()->FsSession().Delete(fileName));
                    }
                    break;

                default:
                    break;
            }
            okToExit = EFalse;
            break;
        }
            
        case ECmdProfileListNew: {
            // New profile -- start with defaults, but with a new name
            iPutty->ReadConfigFileL(iDefaultProfileFile);
            Config *cfg = iPutty->GetConfig();
            name = KNewProfileName;
            MakeNameUniqueL(name);

            CSettingsDialog *dlg = new (ELeave)
                CSettingsDialog(name, EFalse, cfg, iPutty);
            if ( dlg->ExecuteLD(R_SETTINGS_DIALOG) == EEikBidOk ) {
                // Finalize name
                MakeNameLegal(name);
                MakeNameUniqueL(name);
                fileName = iProfileDirectory;
                fileName.Append(name);
                
                // Update the listbox
                iProfileArray->AppendL(name);
                lbox->HandleItemAdditionL();
                lbox->SetCurrentItemIndexAndDraw(iProfileArray->Count() - 1);

                // Write out new settings
                iPutty->WriteConfigFileL(fileName);
            }
            okToExit = EFalse;
            break;
        }

        case ECmdProfileListClose:
            okToExit = ETrue;
            break;
        
        default:
            User::Invariant();
    }

    CleanupStack::PopAndDestroy(2); //fileNameBuf, nameBuf
    return okToExit;
}