Back to index

lightning-sunbird  0.9+nobinonly
Public Member Functions | Protected Member Functions
CProfileManager Class Reference

#include <CProfileManager.h>

List of all members.

Public Member Functions

 CProfileManager ()
virtual ~CProfileManager ()
virtual void StartUp ()
virtual void DoManageProfilesDialog ()
virtual Boolean DoNewProfileDialog (char *outName, UInt32 bufSize)
virtual void DoLogout ()

Protected Member Functions

void ExecuteSelf (MessageT inMessage, void *ioParam)
nsresult GetShowDialogOnStart (PRBool *showIt)
nsresult SetShowDialogOnStart (PRBool showIt)
nsresult OpenAppRegistry (nsIRegistry **aRegistry)

Detailed Description

Definition at line 51 of file CProfileManager.h.


Constructor & Destructor Documentation

Definition at line 81 of file CProfileManager.cpp.

                                 :
    LAttachment(msg_AnyMessage,true)
{
}

Definition at line 86 of file CProfileManager.cpp.

{
}

Member Function Documentation

Definition at line 334 of file CProfileManager.cpp.

{
    enum { iPersist = 1, iCancel, iCleanse };

    nsresult rv;
    nsCOMPtr<nsIProfile> profileService = 
             do_GetService(NS_PROFILE_CONTRACTID, &rv);
    ThrowIfNil_(profileService);
    
    nsXPIDLString currentProfile;
    Str255 pStr;
    profileService->GetCurrentProfile(getter_Copies(currentProfile));
       CPlatformUCSConversion::GetInstance()->UCSToPlatform(nsDependentString(currentProfile.get()), pStr);
    ::ParamText(pStr, "\p", "\p", "\p");
    
    DialogItemIndex item = UModalAlerts::StopAlert(alrt_ConfirmLogout);
    if (item == iCancel)
      return;

    if (item == iPersist)
        rv = profileService->ShutDownCurrentProfile(nsIProfile::SHUTDOWN_PERSIST);
    else    
        rv = profileService->ShutDownCurrentProfile(nsIProfile::SHUTDOWN_CLEANSE);
    if (NS_SUCCEEDED(rv)) {
        // Just put this up modally until they pick a new profile
        DoManageProfilesDialog();
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 177 of file CProfileManager.cpp.

{
    nsresult rv;
    StDialogHandler  theHandler(dlog_ManageProfiles, LCommander::GetTopCommander());
    LWindow                  *theDialog = theHandler.GetDialog();

    nsCOMPtr<nsIProfile> profileService = 
             do_GetService(NS_PROFILE_CONTRACTID, &rv);
    ThrowIfNil_(profileService);
        
    // Set up the dialog by filling the list of current profiles
    LTextTableView *table = (LTextTableView*) theDialog->FindPaneByID('List');    
    ThrowIfNil_(table);
    LPushButton *deleteButton = (LPushButton *) theDialog->FindPaneByID('Dele');
    ThrowIfNil_(deleteButton);
    
    //Str255 pascalStr;
    nsAutoString unicodeStr;
    nsCAutoString cStr;
    char dataBuf[256];
    UInt32 dataSize;
    
    // PowerPlant stuff to set up the list view
    STableCell selectedCell(1, 1);
    SDimension16 tableSize;
    TableIndexT rows, cols;

    table->GetFrameSize(tableSize);
       table->SetTableGeometry(new LTableMonoGeometry(table, tableSize.width, 16));
       table->SetTableStorage(new LTableArrayStorage(table, 0UL));
       table->SetTableSelector(new LTableSingleSelector(table));
       table->InsertCols(1, 0);

    // Get the name of the current profile so we can select it
    nsXPIDLString   currProfileName;
    profileService->GetCurrentProfile(getter_Copies(currProfileName));
    
    // Get the list of profile names and add them to the list
    PRUint32 listLen;
    PRUnichar **profileList;
    rv = profileService->GetProfileList(&listLen, &profileList);
    ThrowIfError_(rv);
    
    for (PRUint32 index = 0; index < listLen; index++)
    {
          CPlatformUCSConversion::GetInstance()->UCSToPlatform(nsDependentString(profileList[index]), cStr);
          table->InsertRows(1, LONG_MAX, cStr.get(), cStr.Length(), true);
          
          if (nsCRT::strcmp(profileList[index], currProfileName.get()) == 0)
            selectedCell.row = index + 1;
    }
    
    PRInt32 numProfiles;
    rv = profileService->GetProfileCount(&numProfiles);
    ThrowIfError_(rv);    
    (numProfiles > 1) ? deleteButton->Enable() : deleteButton->Disable();
    table->SelectCell(selectedCell);


    // Handle the "Ask At StartUp" checkbox    
    LCheckBox *showAtStartCheck = (LCheckBox*) theDialog->FindPaneByID('Show');
    ThrowIfNil_(showAtStartCheck);
    PRBool showIt;
    rv = GetShowDialogOnStart(&showIt);
    if (NS_FAILED(rv))
        showIt = PR_TRUE;
    showAtStartCheck->SetValue(showIt);

    
    theDialog->Show();
    theDialog->Select();
       
       while (true)  // This is our modal dialog event loop
       {                           
              MessageT      hitMessage = theHandler.DoDialog();
              
              if (hitMessage == msg_OK)
              {
                  theDialog->Hide();
            SetShowDialogOnStart(showAtStartCheck->GetValue());
                  selectedCell = table->GetFirstSelectedCell();
                  if (selectedCell.row > 0)
                  {
                      dataSize = sizeof(dataBuf) - 1;
                      table->GetCellData(selectedCell, dataBuf, dataSize);
                      dataBuf[dataSize] = '\0';
                CPlatformUCSConversion::GetInstance()->PlatformToUCS(nsDependentCString(dataBuf), unicodeStr);
                      rv = profileService->SetCurrentProfile(unicodeStr.get());
            }
                  break;
              }
        else if (hitMessage == msg_Cancel)
        {
              break;
        }
        else if (hitMessage == msg_OnNewProfile)
              {
                  if (DoNewProfileDialog(dataBuf, sizeof(dataBuf)))
                  {
                      CPlatformUCSConversion::GetInstance()->PlatformToUCS(nsDependentCString(dataBuf), unicodeStr);
                      rv = profileService->CreateNewProfile(unicodeStr.get(), nsnull, nsnull, PR_FALSE);
                      if (NS_FAILED(rv))
                          break;
                      
                table->InsertRows(1, LONG_MAX, dataBuf, strlen(dataBuf), true);
                table->GetTableSize(rows, cols);
                table->SelectCell(STableCell(rows, cols));
                
                rv = profileService->GetProfileCount(&numProfiles);
                (NS_SUCCEEDED(rv) && numProfiles > 1) ? deleteButton->Enable() : deleteButton->Disable();
                  }    
              }
              else if (hitMessage == msg_OnDeleteProfile)
              {
                  selectedCell = table->GetFirstSelectedCell();
                  if (selectedCell.row > 0)
                  {
                      dataSize = sizeof(dataBuf) - 1;
                      table->GetCellData(selectedCell, dataBuf, dataSize);
                      dataBuf[dataSize] = '\0';
                      CPlatformUCSConversion::GetInstance()->PlatformToUCS(nsDependentCString(dataBuf), unicodeStr);
                      
                      rv = profileService->DeleteProfile(unicodeStr.get(), PR_TRUE);
                      if (NS_FAILED(rv))
                          break;
                      
                      table->RemoveRows(1, selectedCell.row, true);
                      table->GetTableSize(rows, cols);    
                      if (selectedCell.row >= rows)
                          selectedCell.row = rows - 1;
                      table->SelectCell(selectedCell);
                      
                rv = profileService->GetProfileCount(&numProfiles);
                (NS_SUCCEEDED(rv) && numProfiles > 1) ? deleteButton->Enable() : deleteButton->Disable();
                  }
              }
              else if (hitMessage == msg_OnRenameProfile)
              {
               nsAutoString oldName;

                  selectedCell = table->GetFirstSelectedCell();
               dataSize = sizeof(dataBuf) - 1;
               table->GetCellData(selectedCell, dataBuf, dataSize);
               dataBuf[dataSize] = '\0';
               CPlatformUCSConversion::GetInstance()->PlatformToUCS(nsDependentCString(dataBuf), oldName);

                  if (DoNewProfileDialog(dataBuf, sizeof(dataBuf)))
                  {
                      CPlatformUCSConversion::GetInstance()->PlatformToUCS(nsDependentCString(dataBuf), unicodeStr);
                profileService->RenameProfile(oldName.get(), unicodeStr.get());
                table->SetCellData(selectedCell, dataBuf, strlen(dataBuf));                 
                  }
              }
       }  
}

Here is the call graph for this function:

Here is the caller graph for this function:

Boolean CProfileManager::DoNewProfileDialog ( char *  outName,
UInt32  bufSize 
) [virtual]

Definition at line 137 of file CProfileManager.cpp.

{
    Boolean confirmed;
    StDialogHandler  theHandler(dlog_NewProfile, LCommander::GetTopCommander());
    LWindow                  *theDialog = theHandler.GetDialog();
    
    ThrowIfNil_(theDialog);
    LEditText *responseText = dynamic_cast<LEditText*>(theDialog->FindPaneByID('Name'));
    ThrowIfNil_(responseText);
    theDialog->SetLatentSub(responseText);

    theDialog->Show();
    theDialog->Select();
       
       while (true)  // This is our modal dialog event loop
       {                           
              MessageT      hitMessage = theHandler.DoDialog();
              
              if (hitMessage == msg_OK)
              {
                  Str255 pStr;
                  UInt32 outLen;
                  
                  responseText->GetDescriptor(pStr);
                  outLen = pStr[0] >= bufSize ? bufSize - 1 : pStr[0];
                  memcpy(outName, &pStr[1], outLen);
                  outName[outLen] = '\0'; 
            confirmed = PR_TRUE;
              break;
              }
              else if (hitMessage == msg_Cancel)
              {
                  confirmed = PR_FALSE;
                  break;
              }
       }
       return confirmed;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void CProfileManager::ExecuteSelf ( MessageT  inMessage,
void ioParam 
) [protected]

Definition at line 407 of file CProfileManager.cpp.

{
       mExecuteHost = true;
       // update status
       if (inMessage == msg_CommandStatus) {
              SCommandStatus       *status = (SCommandStatus *)ioParam;
              if (status->command == cmd_ManageProfiles) {
                     *status->enabled = true;
                     *status->usesMark = false;
                     mExecuteHost = false; // we handled it
              }
              else if (status->command == cmd_Logout) {
                     *status->enabled = true;
                     *status->usesMark = false;
                     mExecuteHost = false; // we handled it
              }
       }
       else if (inMessage == cmd_ManageProfiles) {
           DoManageProfilesDialog();
           mExecuteHost = false; // we handled it
       }
       else if (inMessage == cmd_Logout) {
           DoLogout();
           mExecuteHost = false; // we handled it
       }
}

Here is the call graph for this function:

Definition at line 371 of file CProfileManager.cpp.

{
    *showIt = PR_TRUE;

    CFStringRef showDialogKey = CFSTR(kPrefShowProfilesAtStartup);
    Boolean keyExistsAndIsValid, value;
    
    value = CFPreferencesGetAppBooleanValue(showDialogKey,
                kCFPreferencesCurrentApplication,
                &keyExistsAndIsValid);
            
    if (!keyExistsAndIsValid)
      return NS_ERROR_FAILURE;
    *showIt = value;
    
    return NS_OK;
}

Here is the call graph for this function:

Here is the caller graph for this function:

nsresult CProfileManager::OpenAppRegistry ( nsIRegistry **  aRegistry) [protected]

Definition at line 389 of file CProfileManager.cpp.

{
    CFStringRef showDialogKey = CFSTR(kPrefShowProfilesAtStartup);
    
    CFPreferencesSetAppValue(showDialogKey,
      showIt ? kCFBooleanTrue : kCFBooleanFalse,
      kCFPreferencesCurrentApplication);
    
    // Write out the preference data - this is our 1 and only use of it.
    CFPreferencesAppSynchronize(kCFPreferencesCurrentApplication);
    
    return NS_OK;
}

Here is the caller graph for this function:

Definition at line 90 of file CProfileManager.cpp.

{
    nsresult rv;
         
    nsCOMPtr<nsIProfile> profileService = 
             do_GetService(NS_PROFILE_CONTRACTID, &rv);
    ThrowIfNil_(profileService);
        
    PRInt32 profileCount;
    rv = profileService->GetProfileCount(&profileCount);
    ThrowIfError_(rv);
    if (profileCount == 0)
    {
        // Make a new default profile
        NS_NAMED_LITERAL_STRING(newProfileName, "default");

        rv = profileService->CreateNewProfile(newProfileName.get(), nsnull, nsnull, PR_FALSE);
        ThrowIfError_(rv);
        rv = profileService->SetCurrentProfile(newProfileName.get());
        ThrowIfError_(rv);
    }
    else
    {
        // Use our flag here to check for whether to show profile mgr UI. If the flag
        // says don't show it, just start with the last used profile.
        
        PRBool showIt;
        rv = GetShowDialogOnStart(&showIt);
                        
        if (NS_FAILED(rv) || (profileCount > 1 && showIt))
        {
            DoManageProfilesDialog();
        }
        else
        {
            // GetCurrentProfile returns the profile which was last used but is not nescesarily
            // active. Call SetCurrentProfile to make it installed and active.
            
            nsXPIDLString   currProfileName;
            rv = profileService->GetCurrentProfile(getter_Copies(currProfileName));
            ThrowIfError_(rv);
            rv = profileService->SetCurrentProfile(currProfileName);
            ThrowIfError_(rv);
        }    
    }
}

Here is the call graph for this function:


The documentation for this class was generated from the following files: