📄 abeditor.cpp
字号:
personalTabKeys.append( PimContact::Birthday ); personalTabKeys.append( PimContact::Gender ); // business tab keys QValueList<int> businessTabKeys; businessTabKeys.append( PimContact::Company ); businessTabKeys.append( PimContact::CompanyPronunciation ); businessTabKeys.append( PimContact::JobTitle ); businessTabKeys.append( PimContact::BusinessPhone ); businessTabKeys.append( PimContact::BusinessFax ); businessTabKeys.append( PimContact::BusinessMobile ); businessTabKeys.append( PimContact::BusinessPager ); businessTabKeys.append( PimContact::BusinessStreet ); businessTabKeys.append( PimContact::BusinessCity ); businessTabKeys.append( PimContact::BusinessState ); businessTabKeys.append( PimContact::BusinessZip ); businessTabKeys.append( PimContact::BusinessCountry ); businessTabKeys.append( PimContact::BusinessWebPage ); businessTabKeys.append( PimContact::Department ); businessTabKeys.append( PimContact::Office ); businessTabKeys.append( PimContact::Profession ); businessTabKeys.append( PimContact::Manager ); businessTabKeys.append( PimContact::Assistant ); // home tab keys QValueList<int> homeTabKeys; homeTabKeys.append( PimContact::Spouse ); homeTabKeys.append( PimContact::Anniversary ); homeTabKeys.append( PimContact::Children ); homeTabKeys.append( PimContact::HomePhone ); homeTabKeys.append( PimContact::HomeFax ); homeTabKeys.append( PimContact::HomeMobile ); homeTabKeys.append( PimContact::HomeStreet ); homeTabKeys.append( PimContact::HomeCity ); homeTabKeys.append( PimContact::HomeState ); homeTabKeys.append( PimContact::HomeZip ); homeTabKeys.append( PimContact::HomeCountry ); homeTabKeys.append( PimContact::HomeWebPage ); // notes has it's own tab currently; if you want to change this // 1. remove the code at the bottom of this section // 2. add PimContact::Notes to one section and // 3. modify the addFields method to make notes a multi line edit QVBoxLayout *vb = new QVBoxLayout( this ); // setup tab groups tabs = new QTabWidget( this ); vb->addWidget( tabs ); personalTab = new VScrollView( tabs ); VScrollView *businessTab = new VScrollView( tabs ); VScrollView *homeTab = new VScrollView( tabs );#ifdef QTOPIA_DESKTOP // ### Should use summary tab if has room, not // just compiled for the desktop summaryTab = new QWidget( tabs, "summaryTab" ); tabs->addTab( summaryTab, tr("Summary") ); connect( tabs, SIGNAL( currentChanged( QWidget *) ), SLOT( tabClicked(QWidget *) ) ); QVBoxLayout *vbSummary = new QVBoxLayout( summaryTab, 5, 5 ); summary = new QTextEdit( summaryTab ); summary->setReadOnly( TRUE ); vbSummary->addWidget( summary );#else summaryTab = 0; summary = 0;#endif tabs->addTab( personalTab, tr("Personal") ); tabs->addTab( businessTab, tr("Business") ); tabs->addTab( homeTab, tr("Home") ); // add the key fields to the personal tab addFields( personalTab->widget(), personalTabKeys ); addFields( businessTab->widget(), businessTabKeys ); addFields( homeTab->widget() , homeTabKeys ); setTabOrders(); txtNote = new QMultiLineEdit( tabs ); txtNote->setWordWrap(QMultiLineEdit::WidgetWidth); tabs->addTab( txtNote, tr("Notes") );#ifdef QTOPIA_DESKTOP QHBoxLayout *bottomBox = new QHBoxLayout( vb ); bottomBox->addStretch(); QPushButton *okButton = new QPushButton( tr("OK"), this ); okButton->setDefault( TRUE ); connect( okButton, SIGNAL(clicked()), this, SLOT(accept()) ); bottomBox->addWidget( okButton ); QPushButton *cancelButton = new QPushButton( tr("Cancel"), this ); cancelButton->setAutoDefault( TRUE ); connect( cancelButton, SIGNAL(clicked()), this, SLOT(reject()) ); bottomBox->addWidget( cancelButton );#endif QWhatsThis::add(lineEdits[PimContact::FirstNamePronunciation], tr("Describes the spoken name phonetically.")); QWhatsThis::add(lineEdits[PimContact::Spouse], tr("e.g. Husband or Wife.")); QWhatsThis::add(fileAsCombo, tr("Preferred format for the contact name.")); QWhatsThis::add(lineEdits[PimContact::Profession], tr("Occupation or job description.")); new QPEDialogListener(this);}void AbEditor::setTabOrders(void){ setTabOrder(fileAsCombo, cmbCat); setTabOrder(cmbCat, emailLE); setTabOrder(emailLE, emailBtn); setTabOrder(emailBtn, bdayButton); setTabOrder(bdayButton, genderCombo);}void AbEditor::tabClicked( QWidget *tab ){#ifdef QTOPIA_DESKTOP if ( summaryTab && tab == summaryTab ) { PimContact c; contactFromFields(c); summary->setText(c.toRichText()); }#else Q_UNUSED(tab);#endif}void AbEditor::editEmails(){ EmailDialog *ed = new EmailDialog(this, "Emails", TRUE); QString strDefaultEmail; QStringList emails; parseEmailFrom( emailLE->text(), strDefaultEmail, emails ); //ent.setDefaultEmail( strDefaultEmail ); //ent.setEmailList( emails ); ed->setEmails( strDefaultEmail, emails );#ifdef QTOPIA_DESKTOP if (ed->exec())#else if (QPEApplication::execDialog(ed))#endif { ent.setDefaultEmail(ed->defaultEmail()); ent.setEmailList(ed->emails()); QString str; parseEmailTo( ed->defaultEmail(), ed->emails(), str ); emailLE->setText( str ); emailLE->home( false ); } delete ed;}void AbEditor::addFields( QWidget *container, const QValueList<int> &keys ){ // init this combo here, since addFields assumes is already exists if ( ! fileAsCombo ) fileAsCombo = new FileAsCombo( this, container ); const QMap<int, QString> & displayNames = PimContact::trFieldsMap(); QGridLayout *gl = new QGridLayout( container, keys.count()+1, 2, 4, 2 ); gl->setSpacing(1); QWidget *lastEditor = 0, *editor; int fieldInTabNum=0; for ( QValueList<int>::ConstIterator fieldKey = keys.begin(); fieldKey != keys.end(); ++fieldKey ) { QLabel *label = new QLabel( displayNames[ *fieldKey ], container ); // do a switch on the field type; most are line edits, the exceptions get a case, the default // is a linedit editor = 0; switch ( *fieldKey ) { case PimContact::Suffix: suffixCombo = new QComboBox( container ); suffixCombo->setEditable( TRUE ); suffixCombo->setDuplicatesEnabled( FALSE ); suffixCombo->setAutoCompletion( TRUE ); suffixCombo->insertItem( "", 0 ); suffixCombo->insertItem( tr( "Jr.", "Person's name suffix" ) ); suffixCombo->insertItem( tr( "Sr." ) ); suffixCombo->insertItem( tr( "I", "Person's name suffix" ) ); suffixCombo->insertItem( tr( "II" ) ); suffixCombo->insertItem( tr( "III" ) ); suffixCombo->insertItem( tr( "IV" ) ); suffixCombo->insertItem( tr( "V" ) ); connect(suffixCombo, SIGNAL(textChanged(const QString&)), fileAsCombo, SLOT(autoUpdate())); editor = suffixCombo; break; case PimContact::NameTitle: titleCombo = new QComboBox( container ); titleCombo->setEditable( TRUE ); titleCombo->setDuplicatesEnabled( FALSE ); titleCombo->setAutoCompletion( TRUE ); titleCombo->insertItem( "", 0 ); titleCombo->insertItem( tr( "Mr." ) ); titleCombo->insertItem( tr( "Mrs." ) ); titleCombo->insertItem( tr( "Ms." ) ); titleCombo->insertItem( tr( "Miss" ) ); titleCombo->insertItem( tr( "Dr." ) ); titleCombo->insertItem( tr( "Prof." ) ); editor = titleCombo; break; case PimContact::Gender: genderCombo = new QComboBox( container ); genderCombo->insertItem( "", 0 ); genderCombo->insertItem( tr( "Male" ), 1 ); genderCombo->insertItem( tr( "Female" ), 2 ); editor = genderCombo; break; case PimContact::FileAs: editor = fileAsCombo; break; case PimContact::Birthday: bdayButton = new QPEDateEdit( container, "", FALSE, TRUE ); editor = bdayButton; break; case PimContact::DefaultEmail: case PimContact::Emails: ehb = new QHBox(container); emailLE = new QLineEdit( ehb ); emailBtn = new QPushButton("...", ehb); connect(emailBtn, SIGNAL(clicked()), this, SLOT(editEmails())); editor = ehb; break; case PimContact::Anniversary: anniversaryButton = new QPEDateEdit( container, "", FALSE, TRUE ); editor = anniversaryButton; break; case PimContact::Categories: { QArray<int> emptyCat; cmbCat = new CategorySelect( emptyCat, "Address Book", // No tr() tr("Contacts"), container ); editor = cmbCat; if ( cmbCat->widgetType() == CategorySelect::ListView ) { delete label; label = 0; } } break; case PimContact::Notes: // this is taken care of later; don't want to create a line edit for it editor = 0; break; case PimContact::HomeStreet: { homeStreetEdit = new QMultiLineEdit( container ); homeStreetEdit->setWordWrap(QMultiLineEdit::WidgetWidth); int fontSize = homeStreetEdit->font().pixelSize(); if (fontSize <= 1) fontSize = 10; homeStreetEdit->setMaximumHeight(fontSize*4); editor = homeStreetEdit; } break; case PimContact::BusinessStreet: { businessStreetEdit = new QMultiLineEdit( container ); businessStreetEdit->setWordWrap(QMultiLineEdit::WidgetWidth); int fontSize = businessStreetEdit->font().pixelSize(); if (fontSize <= 1) fontSize = 10; businessStreetEdit->setMaximumHeight(fontSize*4); editor = businessStreetEdit; } break; default: { QLineEdit *lineedit = new QLineEdit( container ); lineEdits.insert( *fieldKey, lineedit ); connect( lineedit, SIGNAL ( textChanged( const QString & ) ), fileAsCombo, SLOT( autoUpdate() ) ); editor = lineedit; } break; }; if ( editor ) { // add the editor to the layout if ( label ) { gl->addWidget( label, fieldInTabNum, 0 ); labels.insert( *fieldKey, label ); gl->addWidget( editor, fieldInTabNum, 1 ); } else gl->addMultiCellWidget( editor, fieldInTabNum, fieldInTabNum, 0, 1 ); if ( lastEditor ) { setTabOrder( lastEditor, editor ); } lastEditor = editor; // increment the field number for this tab fieldInTabNum++; } else delete label; } QSpacerItem *verticleSpacer = new QSpacerItem( 1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding ); gl->addItem( verticleSpacer, fieldInTabNum, 1 );}void AbEditor::setEntry( const PimContact &entry ){ quitExplicitly = FALSE; ent = entry; // do this first, so then we can ignore the rest of the line edits change events fileAsCombo->reload(); fileAsCombo->programaticUpdate = TRUE; // categories not part of map cmbCat->setCategories( ent.categories(), "Address Book", // No tr() tr("Contacts") ); // iterate through all display fields for contact QMap<int, QCString> i2keyMap = PimContact::keyToIdentifierMap(); QMap<int, QCString>::Iterator it; for( it = i2keyMap.begin(); it != i2keyMap.end(); ++it ) { int keyIt = it.key(); if (keyIt <= PimRecord::PrivateFieldsEnd) continue; // put the non-lineedit sets here bool isLineEdit = FALSE; switch( keyIt ) { case PimContact::FileAs: break; case PimContact::Gender: { switch ( ent.gender() ) { case PimContact::UnspecifiedGender : genderCombo->setCurrentItem( 0 ); break; case PimContact::Male: genderCombo->setCurrentItem( 1 ); break; case PimContact::Female: genderCombo->setCurrentItem( 2 ); break; } } break; case PimContact::NameTitle: if ( ent.nameTitle().isEmpty() ) titleCombo->setCurrentItem( 0 ); else titleCombo->setEditText( ent.nameTitle() ); break; case PimContact::Suffix: if ( ent.suffix().isEmpty() ) suffixCombo->setCurrentItem( 0 ); else suffixCombo->setEditText( ent.suffix() ); break; case PimContact::Notes: txtNote->setText( ent.notes() ); break; case PimContact::HomeStreet: homeStreetEdit->setText( ent.homeStreet() ); break; case PimContact::BusinessStreet: businessStreetEdit->setText( ent.businessStreet() ); break; case PimContact::Birthday: bdayButton->setDate( ent.birthday() ); break; case PimContact::Anniversary: anniversaryButton->setDate( ent.anniversary() ); break; // email case PimContact::DefaultEmail: case PimContact::Emails: { QString strDefEmail = ent.defaultEmail(); QStringList strAllEmail = ent.emailList(); QString strFinal; parseEmailTo( strDefEmail, strAllEmail, strFinal ); emailLE->setText( strFinal ); // make sure we see the "default" emailLE->home( false ); break; } default: isLineEdit = TRUE; } // handle all of the line edits together since we // can extract the QLineEdit once for all rather than duplicate
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -