// Printer::EventHandler implementation OSStatus CSecondPage::OnAddPrinter( Printer * printer, bool moreComing ) { CPrinterSetupWizardSheet * psheet; Printer * selectedPrinter; OSStatus err = kNoErr; check( IsWindow( m_hWnd ) ); m_browseList.SetRedraw(FALSE); psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent()); require_quiet( psheet, exit ); selectedPrinter = psheet->GetSelectedPrinter(); printer->item = m_browseList.InsertItem(printer->displayName); m_browseList.SetItemData( printer->item, (DWORD_PTR) printer ); m_browseList.SortChildren(TVI_ROOT); // // if the searching item is still in the list // get rid of it // // note that order is important here. Insert the printer // item before removing the placeholder so we always have // an item in the list to avoid experiencing the bug // in Microsoft's implementation of CTreeCtrl // if (m_emptyListItem != NULL) { m_browseList.DeleteItem(m_emptyListItem); m_emptyListItem = NULL; m_browseList.EnableWindow(TRUE); } if ( !selectedPrinter ) { psheet->SetSelectedPrinter( printer ); m_browseList.SelectItem( printer->item ); ::SetFocus( m_browseList ); } exit: if (!moreComing) { m_browseList.SetRedraw(TRUE); m_browseList.Invalidate(); } return err; }
BOOL CSecondPage::OnSetActive() { CPrinterSetupWizardSheet * psheet; Printer * printer; OSStatus err = kNoErr; psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent()); require_action( psheet, exit, err = kUnknownErr ); if ( ( printer = psheet->GetSelectedPrinter() ) != NULL ) { psheet->SetSelectedPrinter( NULL ); delete printer; } // // initialize the browse list...this will remove everything currently // in it, and add the no rendezvous printers item // InitBrowseList(); // // start browing // err = StartBrowse(); require_noerr( err, exit ); exit: if ( err != kNoErr ) { if ( err == kDNSServiceErr_Firewall ) { CString text, caption; text.LoadString( IDS_FIREWALL ); caption.LoadString( IDS_FIREWALL_CAPTION ); MessageBox(text, caption, MB_OK|MB_ICONEXCLAMATION); } else { CPrinterSetupWizardSheet::WizardException exc; exc.text.LoadString( IDS_NO_MDNSRESPONDER_SERVICE_TEXT ); exc.caption.LoadString( IDS_ERROR_CAPTION ); throw(exc); } } return CPropertyPage::OnSetActive(); }
BOOL CSecondPage::OnSetActive() { CPrinterSetupWizardSheet * psheet; Printer * printer; Printers::iterator it; OSStatus err = kNoErr; BOOL b; b = CPropertyPage::OnSetActive(); psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent()); require_action( psheet, exit, err = kUnknownErr ); // Stash the selected printer if any printer = psheet->GetSelectedPrinter(); // initialize the browse list...this will remove everything currently // in it, and add the no printers item InitBrowseList(); // Populate the list with any printers that we currently know about for ( it = psheet->m_printers.begin(); it != psheet->m_printers.end(); it++ ) { OnAddPrinter( *it, false ); } if ( ( !printer && ( psheet->m_printers.size() > 0 ) ) || ( printer != psheet->GetSelectedPrinter() ) ) { if ( !printer ) { printer = psheet->m_printers.front(); } psheet->SetSelectedPrinter( printer ); } if ( printer ) { m_browseList.SelectItem( printer->item ); ::SetFocus( m_browseList ); } exit: return b; }
BOOL CSecondPage::OnSetActive() { CPrinterSetupWizardSheet * psheet; Printer * printer; Printers::iterator it; OSStatus err = kNoErr; BOOL b; b = CPropertyPage::OnSetActive(); psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent()); require_action( psheet, exit, err = kUnknownErr ); // Stash the selected printer if any printer = psheet->GetSelectedPrinter(); // initialize the browse list...this will remove everything currently // in it, and add the no printers item InitBrowseList(); // Populate the list with any printers that we currently know about for ( it = psheet->m_printers.begin(); it != psheet->m_printers.end(); it++ ) { OnAddPrinter( *it, false ); } // And if we hit 'Back' from page 3, then re-select printer if ( ( psheet->GetLastPage() == psheet->GetPage( 2 ) ) && printer ) { psheet->SetSelectedPrinter( printer ); m_browseList.Select( printer->item, TVGN_FIRSTVISIBLE ); } exit: return b; }
void CSecondPage::InitBrowseList() { CPrinterSetupWizardSheet * psheet; CString text; psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent()); require_quiet( psheet, exit ); // Initialize so that nothing is selected when we add to the list psheet->SetSelectedPrinter( NULL ); m_gotChoice = false; m_browseList.Select( NULL, TVGN_FIRSTVISIBLE ); // // load the no printers message until something shows up in the browse list // text.LoadString(IDS_NO_PRINTERS); LoadTextAndDisableWindow( text ); // // disable the next button until there's a printer to select // psheet->SetWizardButtons(PSWIZB_BACK); // // disable the printer information box // SetPrinterInformationState( FALSE ); m_descriptionField.SetWindowText( L"" ); m_locationField.SetWindowText( L"" ); exit: return; }
BOOL CSecondPage::OnKillActive() { OSStatus err = kNoErr; if ( m_selected ) { CPrinterSetupWizardSheet * psheet; psheet = reinterpret_cast<CPrinterSetupWizardSheet*>(GetParent()); require_quiet( psheet, exit ); psheet->SetSelectedPrinter( m_selected ); m_printers.remove( m_selected ); m_selected = NULL; } err = StopBrowse(); require_noerr( err, exit ); exit: return CPropertyPage::OnKillActive(); }