mobilegui.cpp
1094 case 'ä' result += '{'; break;
case 'Ö': result += 92; break;
case 'ö': result += '|'; break;
case 'Ü': result += '^'; break;
case 'ü': result += '~'; break;
case 'ß': result += 30; break;
case 'è': result += 4; break;
case 'é': result += 5; break;
default: result += theString[ i ];
}
return result;
}
TQString MobileGui::GSM2String( const TQString &theString )
{
TQString result = "";
for ( unsigned int i = 0; i < theString.length(); i++ )
switch ( theString[ i ].latin1() ) {
case '[': result += 'Ä'; break;
case '{': result += 'ä'; break;
case 92: result += 'Ö'; break;
case '|': result += 'ö'; break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
: result += '{'; break;
1096 case 'ö' result += '|'; break;
case 'Ü': result += '^'; break;
case 'ü': result += '~'; break;
case 'ß': result += 30; break;
case 'è': result += 4; break;
case 'é': result += 5; break;
default: result += theString[ i ];
}
return result;
}
TQString MobileGui::GSM2String( const TQString &theString )
{
TQString result = "";
for ( unsigned int i = 0; i < theString.length(); i++ )
switch ( theString[ i ].latin1() ) {
case '[': result += 'Ä'; break;
case '{': result += 'ä'; break;
case 92: result += 'Ö'; break;
case '|': result += 'ö'; break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
: result += '|'; break;
1098 case 'ü' result += '~'; break;
case 'ß': result += 30; break;
case 'è': result += 4; break;
case 'é': result += 5; break;
default: result += theString[ i ];
}
return result;
}
TQString MobileGui::GSM2String( const TQString &theString )
{
TQString result = "";
for ( unsigned int i = 0; i < theString.length(); i++ )
switch ( theString[ i ].latin1() ) {
case '[': result += 'Ä'; break;
case '{': result += 'ä'; break;
case 92: result += 'Ö'; break;
case '|': result += 'ö'; break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
: result += '~'; break;
1100 case 'è' result += 4; break;
case 'é': result += 5; break;
default: result += theString[ i ];
}
return result;
}
TQString MobileGui::GSM2String( const TQString &theString )
{
TQString result = "";
for ( unsigned int i = 0; i < theString.length(); i++ )
switch ( theString[ i ].latin1() ) {
case '[': result += 'Ä'; break;
case '{': result += 'ä'; break;
case 92: result += 'Ö'; break;
case '|': result += 'ö'; break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
: result += 4; break;
1101 case 'é' result += 5; break;
default: result += theString[ i ];
}
return result;
}
TQString MobileGui::GSM2String( const TQString &theString )
{
TQString result = "";
for ( unsigned int i = 0; i < theString.length(); i++ )
switch ( theString[ i ].latin1() ) {
case '[': result += 'Ä'; break;
case '{': result += 'ä'; break;
case 92: result += 'Ö'; break;
case '|': result += 'ö'; break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
: result += 5; break;
1118 case '{': result += 'ä' break;
case 92: result += 'Ö'; break;
case '|': result += 'ö'; break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
; break;
1120 case '|': result += 'ö' break;
case '^': result += 'Ü'; break;
case '~': result += 'ü'; break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
; break;
1122 case '~': result += 'ü' break;
case 30: result += 'ß'; break;
case 4: result += 'è'; break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
; break;
1124 case 4: result += 'è' break;
case 5: result += 'é'; break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
; break;
1125 case 5: result += 'é' break;
default: result += theString[ i ];
}
return result;
}
void MobileGui::fillPhonebook( ATCommand *cmd )
{
mSyncer->mMobileEntries.clear();
TQPtrList<TQStringList> *list = cmd->resultFields();
TQStringList *fields = list->first();
while( fields ) {
if ( fields->count() != 4 )
kdDebug() << "Error! Unexpected number of address fields." << endl;
else {
TQString index = (*fields)[0];
TQString phone = (*fields)[1];
TQString type = (*fields)[2];
TQString name = GSM2String( (*fields)[3] );
SyncEntryMobile *phoneEntry = new SyncEntryMobile( true, dequote( index ),
dequote( phone ),
dequote( name ) );
mPBIndexOccupied[ index.toUInt() - mPBStartIndex ] = true;
mSyncer->mMobileEntries.append( phoneEntry );
}
fields = list->next();
}
// Display mobile entries
updateMobileBook();
emit transienStatusMessage(i18n("Read mobile phonebook."));
emit phonebookRead();
setMobState( LOADED );
}
TQString MobileGui::quote( const TQString &str )
{
if ( ( str.left(1) == "\"" ) && ( str.right(1) == "\"" ) )
return str;
return "\"" + str + "\"";
}
TQString MobileGui::dequote( const TQString &str )
{
int pos = 0;
int len = str.length();
if ( str.left(1) == "\"" ) {
pos = 1;
len --;
}
if ( str.right(1) == "\"" )
len--;
return str.mid( pos, len );
}
void MobileGui::savePhonebook()
{
if ( mMobState == UNLOADED )
return;
TQString fileName = KFileDialog::getSaveFileName( "phonebook.csv" );
TQFile outFile( fileName );
if ( outFile.open( IO_WriteOnly ) ) {
TQTextStream t( &outFile ); // use a text stream
for( uint i = 0; i < mSyncer->mMobileEntries.count(); i++) {
SyncEntryMobile *e = mSyncer->mMobileEntries.at( i );
if ( !e->mToBeDeleted )
t << e->mIndex << "," << e->mPhone << "," << e->mName << endl;
}
outFile.close();
}
}
void MobileGui::deleteMobPhonebook()
{
//
// Process all elements selected in the GUI
//
PhoneBookItem *item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
if ( item->isOn() ) {
SyncEntryMobile *mobileItem = (SyncEntryMobile *) item->syncEntry();
// Deselect current item
item->setOn( false );
mobileItem->mOn = false;
// Mark current item as deleted
mobileItem->mToBeDeleted = true;
}
item = (PhoneBookItem *) item->nextSibling();
}
// Update GUI
updateMobileBook();
setMobState( MODIFIED );
}
void MobileGui::mergePhonebooks()
{
uint i;
//
// Transfer current Selection State from GUI to mSyncer
//
PhoneBookItem *item = (PhoneBookItem *) mKabBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
item = (PhoneBookItem *) mMobileBook->firstChild();
while ( item ) {
item->syncEntry()->mOn = item->isOn();
item = (PhoneBookItem *) item->nextSibling();
}
mSyncer->mCommonEntries.clear();
//
// Put TDE Address Book list into Common List
//
for ( i = 0; i < mSyncer->mKabEntries.count(); i++ )
if ( mSyncer->mKabEntries.at( i )->mOn ) {
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, mSyncer->mKabEntries.at( i ), 0 ) );
mSyncer->mKabEntries.at( i )->mOn = false;
}
//
// Put Mobile Address Book list into Common List; Merge equivalent entries
//
for ( i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *mobileEntry = mSyncer->mMobileEntries.at( i );
bool equivalentEntryFound = false;
uint j;
if( !mobileEntry->mToBeDeleted )
for ( j = 0; j < mSyncer->mCommonEntries.count(); j++ ) {
SyncEntryCommon *theCommonEntry = mSyncer->mCommonEntries.at( j );
if ( theCommonEntry->mKabEntry &&
( theCommonEntry->mKabEntry->mName == mobileEntry->mName ) ) {
theCommonEntry->mMobileEntry = mobileEntry;
equivalentEntryFound = true;
if ( noSpaces( theCommonEntry->mKabEntry->mPhone ) ==
mobileEntry->mPhone ) {
mobileEntry->mOn = false;
break;
} else {
// Conflict: 2 Entries have same name but different numbers.
// Prompt user.
TQString text = "<qt><b>" + i18n( "Kab Entry:" ) + "</b><br>";
text += " " + theCommonEntry->mKabEntry->mName + " " +
theCommonEntry->mKabEntry->mPhone + "<br>";
text += "<b>" + i18n( "Mobile Entry:" ) + "</b><br>";
text += " " + mobileEntry->mName + " " + mobileEntry->mPhone;
text += "</qt>";
TQMessageBox *msg =
new TQMessageBox( i18n( "Conflicting Entries" ), text,
TQMessageBox::Warning, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Use Kab Entry" ) );
msg->setButtonText( 2, i18n( "Use Mobile Entry" ) );
switch ( msg->exec() ) {
case 1:
// Use TDE Address Book Entry
mobileEntry->mPhone = theCommonEntry->mKabEntry->mPhone;
mobileEntry->mName = theCommonEntry->mKabEntry->mName;
mobileEntry->mOn = true;
mobileEntry->mToBeUpdated = true;
setMobState( MODIFIED );
break;
case 2:
// Use Mobile Address Book Entry
theCommonEntry->mKabEntry->mPhone = mobileEntry->mPhone;
theCommonEntry->mKabEntry->mName = mobileEntry->mName;
theCommonEntry->mKabEntry->mOn = true;
theCommonEntry->mKabEntry->mToBeUpdated = true;
mobileEntry->mOn = false;
setKabState( MODIFIED );
break;
}
}
}
}
if ( !equivalentEntryFound && mobileEntry->mOn ) {
// No equivalent entry exists; generate a new one.
mSyncer->mCommonEntries.append(
new SyncEntryCommon( true, 0, mobileEntry ) );
mobileEntry->mOn = false;
}
}
//
// Create new KAB and Mobile Entries
//
for ( i = 0; i < mSyncer->mCommonEntries.count(); i++ ) {
SyncEntryCommon *entry = mSyncer->mCommonEntries.at( i );
SyncEntryKab *kabEntry = entry->mKabEntry;
SyncEntryMobile *mobileEntry = entry->mMobileEntry;
if ( kabEntry && !mobileEntry ) {
// Create Mobile Entry
entry->mMobileEntry = new SyncEntryMobile( true, "", kabEntry->mPhone,
kabEntry->mName );
entry->mMobileEntry->mToBeInserted = true;
mSyncer->mMobileEntries.append( entry->mMobileEntry );
setMobState( MODIFIED );
} else
if ( mobileEntry && !kabEntry ) {
// Create KAB Entry
entry->mKabEntry = new SyncEntryKab( true, mobileEntry->mIndex,
mobileEntry->mName,
mobileEntry->mPhone );
entry->mKabEntry->mToBeInserted = true;
mSyncer->mKabEntries.append( entry->mKabEntry );
setKabState( MODIFIED );
}
}
//
// Update GUI
//
updateKabBook();
updateMobileBook();
emit transienStatusMessage( i18n( "Synced phonebooks." ) );
PushButton8_3->setEnabled( true );
}
void MobileGui::syncPhonebooks()
{
PushButton8_3->setEnabled( false );
if ( mKabState == UNLOADED )
readKabc();
if ( mMobState == UNLOADED ) {
mComingFromSyncPhonebooks = true;
readPhonebook();
} else
mergePhonebooks();
}
void MobileGui::updateKabBook()
{
mKabBook->clear();
for ( uint i = 0; i < mSyncer->mKabEntries.count(); i++ ) {
SyncEntryKab *kabEntry = mSyncer->mKabEntries.at( i );
PhoneBookItem *item = new PhoneBookItem( mKabBook, kabEntry,
kabEntry->mName, kabEntry->mPhone,
kabEntry->mIndex );
item->setOn( kabEntry->mOn );
}
}
void MobileGui::updateMobileBook()
{
mMobileBook->clear();
for ( uint i = 0; i < mSyncer->mMobileEntries.count(); i++ ) {
SyncEntryMobile *entry = mSyncer->mMobileEntries.at( i );
if ( !entry->mToBeDeleted ) {
PhoneBookItem *item = new PhoneBookItem( mMobileBook, entry, entry->mName,
entry->mPhone, entry->mIndex );
item->setOn( entry->mOn );
}
}
}
void MobileGui::toggleConnection()
{
if ( mConnectButton->text() == i18n( "Connect" ) ) {
emit connectModem();
readModelInformation();
refreshStatus();
mConnectButton->setText( tr2i18n( "Disconnect" ) );
PushButton1->setEnabled( true );
PushButton5_3->setEnabled( true );
mABTab->setEnabled( true );
setKabState( UNLOADED );
setMobState( UNLOADED );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Connected "), 1 );
} else {
warnKabState( UNLOADED );
mComingFromToggleConnection = true;
if ( !warnMobState( UNLOADED ) ) {
mComingFromToggleConnection = false;
disconnectGUI();
}
}
}
void MobileGui::disconnectGUI()
{
emit disconnectModem();
mManufacturerLabel->setText( "x" );
mModelLabel->setText( "x" );
mGSMVersionLabel->setText( "x" );
mSerialNumberLabel->setText( "x" );
mBatteryChargeLabel->setText( "xx %" );
mSignalQualityLabel->setText( "x" );
mConnectButton->setText( tr2i18n( "Connect" ) );
PushButton1->setEnabled( false );
PushButton5_3->setEnabled( false );
mKabBook->clear();
mMobileBook->clear();
setKabState( UNLOADED );
setMobState( UNLOADED );
mABTab->setEnabled( false );
mMobHasFD = false;
mMobHasLD = false;
mMobHasME = false;
mMobHasMT = false;
mMobHasTA = false;
mMobHasOW = false;
mMobHasMC = false;
mMobHasRC = false;
mPBIndexOccupied.resize( 0, false );
((MobileMain *) mparent)->statusBar()->changeItem( i18n(" Disconnected "),
1 );
}
void MobileGui::termAddOutput( const char *line )
{
mTermIO->append( line );
mTermIO->setCursorPosition( mTermIO->paragraphs() - 1, 0 );
}
void MobileGui::setKabState( ABState newState )
{
switch ( mKabState ) {
case UNLOADED:
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book (modified)" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
case MODIFIED:
if ( newState != MODIFIED ) {
groupBox3->setTitle( tr2i18n( "TDE Address Book" ) );
mReadKabButton->setEnabled( true );
PushButton8->setEnabled( false );
}
break;
}
mKabState = newState;
}
void MobileGui::warnKabState( ABState newState )
{
if ( ( mKabState == MODIFIED ) && ( newState != MODIFIED ) ) {
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The TDE address book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writeKabc();
break;
case 2:
break;
}
}
}
void MobileGui::setMobState( ABState newState )
{
switch ( mMobState ) {
case UNLOADED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
case LOADED:
if ( newState == MODIFIED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book (modified)" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( true );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
} else
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
}
break;
case MODIFIED:
if ( newState == UNLOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( false );
MobDeleteButton->setEnabled( false );
} else
if ( newState == LOADED ) {
groupBox4->setTitle( tr2i18n( "Mobile Phone Book" ) );
PushButton3->setEnabled( true );
PushButton12->setEnabled( false );
PushButton4_2->setEnabled( true );
MobDeleteButton->setEnabled( true );
}
break;
}
mMobState = newState;
}
bool MobileGui::warnMobState( ABState newState )
{
if ( ( mMobState == MODIFIED ) && ( newState != MODIFIED ) )
{
TQString text = "<qt><b>" + i18n( "Warning" ) + "</b><br>";
text += i18n( "The mobile phone book contains unsaved changes." ) +
"<br></qt>";
TQMessageBox *msg = new TQMessageBox( i18n( "Unsaved Changes" ), text,
TQMessageBox::Critical, 1, 2, 0, this );
msg->setButtonText( 1, i18n( "Save" ) );
msg->setButtonText( 2, i18n( "Discard" ) );
switch ( msg->exec() ) {
case 1:
// Save Changes first
writePhonebook();
return true;
break;
case 2:
return false;
break;
}
}
return false;
}
; break;