// frmContactEditorTelephone.cpp - frmContactEditorTelephone form. // // (c) 2012-2015 Xestia Software Development. // // This file is part of Xestia Address Book. // // Xestia Address Book is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by the // Free Software Foundation, version 3 of the license. // // Xestia Address Book is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with Xestia Address Book. If not, see #include "frmContactEditorTelephone.h" #include "../common/textprocessing.h" #include frmContactEditorTelephone::frmContactEditorTelephone( wxWindow* parent ) : frmContactEditorTelephoneADT( parent ) { // Setup the window. EditorMode = FALSE; priorityCtrl = new XABPriorityCtrl(tabGeneral); szrGeneral->Add(priorityCtrl, 1, wxEXPAND, 5); szrGeneral->Layout(); } void frmContactEditorTelephone::ProcessAction( wxCommandEvent& event ) { // Process action. long ListCtrlIndex; if (EditorMode == FALSE){ wxString strTelTypes; wxString strTelTypesLCtrl; bool AddComma = FALSE; // Add the telephone number. wxString strValue; TelephoneListPtr->insert(std::make_pair(TelephoneListIndex, txtTelephone->GetValue())); // Add the telephone type. if (EditSectionType == CE_GENERAL){ strTelTypes.Append(wxT("")); } else if (EditSectionType == CE_HOME) { strTelTypes.Append(wxT("home")); AddComma = TRUE; } else if (EditSectionType == CE_WORK) { strTelTypes.Append(wxT("work")); AddComma = TRUE; } if (chkVoice->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("voice")); strTelTypesLCtrl.Append(wxT("voice")); AddComma = TRUE; } if (chkFax->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("fax")); strTelTypesLCtrl.Append(wxT("fax")); AddComma = TRUE; } if (chkVideo->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("video")); strTelTypesLCtrl.Append(wxT("video")); AddComma = TRUE; } if (chkText->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("text")); strTelTypesLCtrl.Append(wxT("text")); AddComma = TRUE; } if (chkMobile->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("cell")); strTelTypesLCtrl.Append(wxT("cell")); AddComma = TRUE; } if (chkTextphone->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("textphone")); strTelTypesLCtrl.Append(wxT("textphone")); AddComma = TRUE; } if (chkPager->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("pager")); strTelTypesLCtrl.Append(wxT("pager")); AddComma = TRUE; } TelephoneListTypePtr->insert(std::make_pair(TelephoneListIndex, strTelTypes)); TelephoneListTypeInfoPtr->insert(std::make_pair(TelephoneListIndex, strTelTypes)); // Add Telephone Priority. if (priorityCtrl->IsPriorityChecked()){ TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, priorityCtrl->GetValue())); } else { TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, 0)); } // Add to the form. wxListItem coldata; coldata.SetId(TelephoneListIndex); coldata.SetData(TelephoneListIndex); coldata.SetText(txtTelephone->GetValue()); ListCtrlIndex = TelephoneListCtrlPtr->InsertItem(coldata); strTelTypesLCtrl.Replace(wxT(","), wxT(""), FALSE); TelephoneListCtrlPtr->SetItem(ListCtrlIndex, 1, strTelTypesLCtrl); if (priorityCtrl->IsPriorityChecked()){ TelephoneListCtrlPtr->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), priorityCtrl->GetValue())); } this->Close(); } else if (EditorMode == TRUE) { wxString strTelTypes; wxString strTelTypesLCtrl; bool AddComma = FALSE; long longSelected = -1; // Edit the Telephone number. wxString strValue; TelephoneListPtr->erase(TelephoneListIndex); TelephoneListPtr->insert(std::make_pair(TelephoneListIndex, txtTelephone->GetValue())); // Edit the Telephone type. if (EditSectionType == CE_GENERAL){ strTelTypes.Append(wxT("")); } else if (EditSectionType == CE_HOME) { strTelTypes.Append(wxT("home")); AddComma = TRUE; } else if (EditSectionType == CE_WORK) { strTelTypes.Append(wxT("work")); AddComma = TRUE; } if (chkVoice->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("voice")); strTelTypesLCtrl.Append(wxT("voice")); AddComma = TRUE; } if (chkFax->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("fax")); strTelTypesLCtrl.Append(wxT("fax")); AddComma = TRUE; } if (chkVideo->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("video")); strTelTypesLCtrl.Append(wxT("video")); AddComma = TRUE; } if (chkText->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("text")); strTelTypesLCtrl.Append(wxT("text")); AddComma = TRUE; } if (chkMobile->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("cell")); strTelTypesLCtrl.Append(wxT("cell")); AddComma = TRUE; } if (chkTextphone->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("textphone")); strTelTypesLCtrl.Append(wxT("textphone")); AddComma = TRUE; } if (chkPager->IsChecked()){ if (AddComma){ strTelTypes.Append(wxT(",")); strTelTypesLCtrl.Append(wxT(",")); } strTelTypes.Append(wxT("pager")); strTelTypesLCtrl.Append(wxT("pager")); AddComma = TRUE; } strTelTypesLCtrl.Replace(wxT(","), wxT(""), FALSE); TelephoneListTypePtr->erase(TelephoneListIndex); TelephoneListTypePtr->insert(std::make_pair(TelephoneListIndex, strTelTypes)); TelephoneListTypeInfoPtr->erase(TelephoneListIndex); TelephoneListTypeInfoPtr->insert(std::make_pair(TelephoneListIndex, strTelTypes)); // Edit the Telephone Priority. TelephoneListPrefPtr->erase(TelephoneListIndex); if (priorityCtrl->IsPriorityChecked()){ TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, priorityCtrl->GetValue())); } else { TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, 0)); } // Update the form. longSelected = TelephoneListCtrlPtr->GetNextItem(longSelected, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); if (longSelected == -1){ return; } TelephoneListCtrlPtr->SetItem(longSelected, 0, txtTelephone->GetValue()); TelephoneListCtrlPtr->SetItem(longSelected, 1, strTelTypesLCtrl); if (priorityCtrl->IsPriorityChecked()){ TelephoneListCtrlPtr->SetItem(longSelected, 2, wxString::Format(wxT("%i"), priorityCtrl->GetValue())); } else { TelephoneListCtrlPtr->SetItem(longSelected, 2, wxT("")); } this->Close(); } } void frmContactEditorTelephone::CloseWindow( wxCommandEvent& event ) { // Close the window. this->Close(); } void frmContactEditorTelephone::SetEditorMode(bool EditMode, SectionType SectType) { // Set the editor mode. // Set if the editor is adding or editing an address. // FALSE = Add // TRUE = Edit if (EditMode == FALSE){ EditorMode = FALSE; btnAction->SetLabel(_("Add")); this->SetTitle(_("Add Telephone")); } else if (EditMode == TRUE){ EditorMode = TRUE; btnAction->SetLabel(_("Modify")); this->SetTitle(_("Modify Telephone")); std::map::iterator intiter; std::map::iterator striter; wxString strValue; // Load the data into the form. Get the phone number. striter = TelephoneListPtr->find(TelephoneListIndex); if (striter->first == TelephoneListIndex){ strValue = striter->second; } txtTelephone->SetValue(strValue); strValue.Clear(); // Get the phone types in. if (TelephoneListTypeInfoPtr->find(TelephoneListIndex) != TelephoneListTypeInfoPtr->end()){ striter = TelephoneListTypeInfoPtr->find(TelephoneListIndex); if (striter->first == TelephoneListIndex){ strValue = striter->second; } } wxStringTokenizer TelephonePrefToken (strValue, wxT(",")); strValue.Clear(); while(TelephonePrefToken.HasMoreTokens()){ strValue = TelephonePrefToken.GetNextToken(); if (strValue == wxT("home") || strValue == wxT("work")){ // Ignore these two since they aren't needed. continue; } if (strValue == wxT("voice")){ chkVoice->SetValue(TRUE); } if (strValue == wxT("fax")){ chkFax->SetValue(TRUE); } if (strValue == wxT("video")){ chkVideo->SetValue(TRUE); } if (strValue == wxT("text")){ chkText->SetValue(TRUE); } if (strValue == wxT("cell")){ chkMobile->SetValue(TRUE); } if (strValue == wxT("textphone")){ chkTextphone->SetValue(TRUE); } if (strValue == wxT("pager")){ chkPager->SetValue(TRUE); } } // Setup the Slider. intiter = TelephoneListPrefPtr->find(TelephoneListIndex); if (intiter->first == TelephoneListIndex && intiter->second > 0 && intiter != TelephoneListPrefPtr->end()){ priorityCtrl->SetValue(intiter->second); priorityCtrl->EnablePriority(true); } } EditSectionType = SectType; } void frmContactEditorTelephone::SetupPointers(std::map *TelephoneList, std::map *TelephoneListAltID, std::map *TelephoneListPID, std::map *TelephoneListType, std::map *TelephoneListTypeInfo, std::map *TelephoneListTokens, std::map *TelephoneListPref, wxListCtrl *TelephoneListCtrl, int TelephoneIndex ) { // Setup the pointers. TelephoneListPtr = TelephoneList; TelephoneListAltIDPtr = TelephoneListAltID; TelephoneListPIDPtr = TelephoneListPID; TelephoneListTypePtr = TelephoneListType; TelephoneListTypeInfoPtr = TelephoneListTypeInfo; TelephoneListTokensPtr = TelephoneListTokens; TelephoneListPrefPtr = TelephoneListPref; TelephoneListCtrlPtr = TelephoneListCtrl; TelephoneListIndex = TelephoneIndex; }