Boolean UPropertyInspector::SelectInspectorWindow( DMElement* inElement) { // Validate pointers. ValidateObject_(inElement); // See if there's an inspector for this element. PIInspectorTable* table = (PIInspectorTable*) inElement->FindUserInterfaceObject(PIInspectorTable::object_ID); if (table == nil) return false; // There's a table. Select its window. LWindow* window = LWindow::FetchWindowObject(GetWindowFromPort(table->GetMacPort())); ValidateObject_(window); window->Select(); return true; }
void UPropertyInspector::InspectSelection( DMSelection* inSelection, LCommander* inUndoHost, Boolean inUseHostAsCommander, Boolean inPlaceInWindowMenu) { // Validate pointers. if (inSelection != nil) ValidateObject_(inSelection); if (inUndoHost != nil) ValidateObject_(inUndoHost); // See if there's a free-floating inspector window for this object. if (inSelection != nil) { if (inSelection->GetSelectedElements().GetCount() >= 1) { DMElement* element = nil; inSelection->GetSelectedElements().FetchItemAt(1, &element); ValidateObject_(element); if (SelectInspectorWindow(element)) return; } } // Create an inspector window if none is already open. Boolean createdWindow = false; if (sInspectorWindow == nil) { sInspectorWindow = CreateInspectorWindow( (inUseHostAsCommander) ? inUndoHost : nil,inPlaceInWindowMenu); createdWindow = true; } // Sanity check: Make sure we now have an inspector window. ValidateObject_(sInspectorWindow); LWindow* newWindow = sInspectorWindow; // Configure the inspector to use the named selection. ConfigureInspectorWindow(inSelection, inUndoHost); // Position & show the window. if (createdWindow) { newWindow->DoSetZoom(true); newWindow->ProcessCommand(cmd_PositionWindow); newWindow->Show(); } else newWindow->Select(); }
Boolean CProfileManager::DoNewProfileDialog(char *outName, UInt32 bufSize) { 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; }
void CProfileManager::DoManageProfilesDialog() { 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)); } } } }