1 // frmContactEditorTelephone.cpp - frmContactEditorTelephone form.
3 // (c) 2012-2015 Xestia Software Development.
5 // This file is part of Xestia Address Book.
7 // Xestia Address Book is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by the
9 // Free Software Foundation, version 3 of the license.
11 // Xestia Address Book is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with Xestia Address Book. If not, see <http://www.gnu.org/licenses/>
19 #include "frmContactEditorTelephone.h"
20 #include "../common/textprocessing.h"
21 #include <wx/tokenzr.h>
23 frmContactEditorTelephone::frmContactEditorTelephone( wxWindow* parent )
25 frmContactEditorTelephoneADT( parent )
31 priorityCtrl = new XABPriorityCtrl(tabGeneral);
32 szrGeneral->Add(priorityCtrl, 1, wxEXPAND, 5);
36 void frmContactEditorTelephone::ProcessAction( wxCommandEvent& event )
43 if (EditorMode == FALSE){
46 wxString strTelTypesLCtrl;
47 bool AddComma = FALSE;
49 // Add the telephone number.
52 TelephoneListPtr->insert(std::make_pair(TelephoneListIndex, txtTelephone->GetValue()));
54 // Add the telephone type.
56 if (EditSectionType == CE_GENERAL){
58 strTelTypes.Append(wxT(""));
60 } else if (EditSectionType == CE_HOME) {
62 strTelTypes.Append(wxT("home"));
65 } else if (EditSectionType == CE_WORK) {
67 strTelTypes.Append(wxT("work"));
72 if (chkVoice->IsChecked()){
76 strTelTypes.Append(wxT(","));
77 strTelTypesLCtrl.Append(wxT(","));
81 strTelTypes.Append(wxT("voice"));
82 strTelTypesLCtrl.Append(wxT("voice"));
87 if (chkFax->IsChecked()){
91 strTelTypes.Append(wxT(","));
92 strTelTypesLCtrl.Append(wxT(","));
96 strTelTypes.Append(wxT("fax"));
97 strTelTypesLCtrl.Append(wxT("fax"));
102 if (chkVideo->IsChecked()){
106 strTelTypes.Append(wxT(","));
107 strTelTypesLCtrl.Append(wxT(","));
111 strTelTypes.Append(wxT("video"));
112 strTelTypesLCtrl.Append(wxT("video"));
117 if (chkText->IsChecked()){
121 strTelTypes.Append(wxT(","));
122 strTelTypesLCtrl.Append(wxT(","));
126 strTelTypes.Append(wxT("text"));
127 strTelTypesLCtrl.Append(wxT("text"));
132 if (chkMobile->IsChecked()){
136 strTelTypes.Append(wxT(","));
137 strTelTypesLCtrl.Append(wxT(","));
141 strTelTypes.Append(wxT("cell"));
142 strTelTypesLCtrl.Append(wxT("cell"));
147 if (chkTextphone->IsChecked()){
151 strTelTypes.Append(wxT(","));
152 strTelTypesLCtrl.Append(wxT(","));
156 strTelTypes.Append(wxT("textphone"));
157 strTelTypesLCtrl.Append(wxT("textphone"));
162 if (chkPager->IsChecked()){
166 strTelTypes.Append(wxT(","));
167 strTelTypesLCtrl.Append(wxT(","));
171 strTelTypes.Append(wxT("pager"));
172 strTelTypesLCtrl.Append(wxT("pager"));
177 TelephoneListTypePtr->insert(std::make_pair(TelephoneListIndex, strTelTypes));
179 TelephoneListTypeInfoPtr->insert(std::make_pair(TelephoneListIndex, strTelTypes));
181 // Add Telephone Priority.
183 if (priorityCtrl->IsPriorityChecked()){
185 TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, priorityCtrl->GetValue()));
189 TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, 0));
197 coldata.SetId(TelephoneListIndex);
198 coldata.SetData(TelephoneListIndex);
199 coldata.SetText(txtTelephone->GetValue());
200 ListCtrlIndex = TelephoneListCtrlPtr->InsertItem(coldata);
202 strTelTypesLCtrl.Replace(wxT(","), wxT(""), FALSE);
204 TelephoneListCtrlPtr->SetItem(ListCtrlIndex, 1, strTelTypesLCtrl);
206 if (priorityCtrl->IsPriorityChecked()){
208 TelephoneListCtrlPtr->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), priorityCtrl->GetValue()));
214 } else if (EditorMode == TRUE) {
216 wxString strTelTypes;
217 wxString strTelTypesLCtrl;
218 bool AddComma = FALSE;
219 long longSelected = -1;
221 // Edit the Telephone number.
224 TelephoneListPtr->erase(TelephoneListIndex);
225 TelephoneListPtr->insert(std::make_pair(TelephoneListIndex, txtTelephone->GetValue()));
227 // Edit the Telephone type.
229 if (EditSectionType == CE_GENERAL){
231 strTelTypes.Append(wxT(""));
233 } else if (EditSectionType == CE_HOME) {
235 strTelTypes.Append(wxT("home"));
238 } else if (EditSectionType == CE_WORK) {
240 strTelTypes.Append(wxT("work"));
245 if (chkVoice->IsChecked()){
249 strTelTypes.Append(wxT(","));
250 strTelTypesLCtrl.Append(wxT(","));
254 strTelTypes.Append(wxT("voice"));
255 strTelTypesLCtrl.Append(wxT("voice"));
260 if (chkFax->IsChecked()){
264 strTelTypes.Append(wxT(","));
265 strTelTypesLCtrl.Append(wxT(","));
269 strTelTypes.Append(wxT("fax"));
270 strTelTypesLCtrl.Append(wxT("fax"));
275 if (chkVideo->IsChecked()){
279 strTelTypes.Append(wxT(","));
280 strTelTypesLCtrl.Append(wxT(","));
284 strTelTypes.Append(wxT("video"));
285 strTelTypesLCtrl.Append(wxT("video"));
290 if (chkText->IsChecked()){
294 strTelTypes.Append(wxT(","));
295 strTelTypesLCtrl.Append(wxT(","));
299 strTelTypes.Append(wxT("text"));
300 strTelTypesLCtrl.Append(wxT("text"));
305 if (chkMobile->IsChecked()){
309 strTelTypes.Append(wxT(","));
310 strTelTypesLCtrl.Append(wxT(","));
314 strTelTypes.Append(wxT("cell"));
315 strTelTypesLCtrl.Append(wxT("cell"));
320 if (chkTextphone->IsChecked()){
324 strTelTypes.Append(wxT(","));
325 strTelTypesLCtrl.Append(wxT(","));
329 strTelTypes.Append(wxT("textphone"));
330 strTelTypesLCtrl.Append(wxT("textphone"));
335 if (chkPager->IsChecked()){
339 strTelTypes.Append(wxT(","));
340 strTelTypesLCtrl.Append(wxT(","));
344 strTelTypes.Append(wxT("pager"));
345 strTelTypesLCtrl.Append(wxT("pager"));
350 strTelTypesLCtrl.Replace(wxT(","), wxT(""), FALSE);
352 TelephoneListTypePtr->erase(TelephoneListIndex);
353 TelephoneListTypePtr->insert(std::make_pair(TelephoneListIndex, strTelTypes));
355 TelephoneListTypeInfoPtr->erase(TelephoneListIndex);
356 TelephoneListTypeInfoPtr->insert(std::make_pair(TelephoneListIndex, strTelTypes));
358 // Edit the Telephone Priority.
360 TelephoneListPrefPtr->erase(TelephoneListIndex);
362 if (priorityCtrl->IsPriorityChecked()){
364 TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, priorityCtrl->GetValue()));
368 TelephoneListPrefPtr->insert(std::make_pair(TelephoneListIndex, 0));
374 longSelected = TelephoneListCtrlPtr->GetNextItem(longSelected,
376 wxLIST_STATE_SELECTED);
378 if (longSelected == -1){
382 TelephoneListCtrlPtr->SetItem(longSelected, 0, txtTelephone->GetValue());
383 TelephoneListCtrlPtr->SetItem(longSelected, 1, strTelTypesLCtrl);
385 if (priorityCtrl->IsPriorityChecked()){
387 TelephoneListCtrlPtr->SetItem(longSelected, 2, wxString::Format(wxT("%i"), priorityCtrl->GetValue()));
391 TelephoneListCtrlPtr->SetItem(longSelected, 2, wxT(""));
401 void frmContactEditorTelephone::CloseWindow( wxCommandEvent& event )
410 void frmContactEditorTelephone::SetEditorMode(bool EditMode, SectionType SectType)
413 // Set the editor mode.
415 // Set if the editor is adding or editing an address.
419 if (EditMode == FALSE){
422 btnAction->SetLabel(_("Add"));
423 this->SetTitle(_("Add Telephone"));
425 } else if (EditMode == TRUE){
428 btnAction->SetLabel(_("Modify"));
429 this->SetTitle(_("Modify Telephone"));
431 std::map<int,int>::iterator intiter;
432 std::map<int,wxString>::iterator striter;
435 // Load the data into the form. Get the phone number.
437 striter = TelephoneListPtr->find(TelephoneListIndex);
439 if (striter->first == TelephoneListIndex){
441 strValue = striter->second;
445 txtTelephone->SetValue(strValue);
449 // Get the phone types in.
452 if (TelephoneListTypeInfoPtr->find(TelephoneListIndex) !=
453 TelephoneListTypeInfoPtr->end()){
455 striter = TelephoneListTypeInfoPtr->find(TelephoneListIndex);
457 if (striter->first == TelephoneListIndex){
459 strValue = striter->second;
465 wxStringTokenizer TelephonePrefToken (strValue, wxT(","));
469 while(TelephonePrefToken.HasMoreTokens()){
471 strValue = TelephonePrefToken.GetNextToken();
473 if (strValue == wxT("home") || strValue == wxT("work")){
475 // Ignore these two since they aren't needed.
481 if (strValue == wxT("voice")){
483 chkVoice->SetValue(TRUE);
487 if (strValue == wxT("fax")){
489 chkFax->SetValue(TRUE);
493 if (strValue == wxT("video")){
495 chkVideo->SetValue(TRUE);
499 if (strValue == wxT("text")){
501 chkText->SetValue(TRUE);
505 if (strValue == wxT("cell")){
507 chkMobile->SetValue(TRUE);
511 if (strValue == wxT("textphone")){
513 chkTextphone->SetValue(TRUE);
517 if (strValue == wxT("pager")){
519 chkPager->SetValue(TRUE);
527 intiter = TelephoneListPrefPtr->find(TelephoneListIndex);
529 if (intiter->first == TelephoneListIndex && intiter->second > 0 &&
530 intiter != TelephoneListPrefPtr->end()){
532 priorityCtrl->SetValue(intiter->second);
533 priorityCtrl->EnablePriority(true);
539 EditSectionType = SectType;
543 void frmContactEditorTelephone::SetupPointers(std::map<int, wxString> *TelephoneList,
544 std::map<int, wxString> *TelephoneListAltID,
545 std::map<int, wxString> *TelephoneListPID,
546 std::map<int, wxString> *TelephoneListType,
547 std::map<int, wxString> *TelephoneListTypeInfo,
548 std::map<int, wxString> *TelephoneListTokens,
549 std::map<int, int> *TelephoneListPref,
550 wxListCtrl *TelephoneListCtrl,
554 // Setup the pointers.
556 TelephoneListPtr = TelephoneList;
557 TelephoneListAltIDPtr = TelephoneListAltID;
558 TelephoneListPIDPtr = TelephoneListPID;
559 TelephoneListTypePtr = TelephoneListType;
560 TelephoneListTypeInfoPtr = TelephoneListTypeInfo;
561 TelephoneListTokensPtr = TelephoneListTokens;
562 TelephoneListPrefPtr = TelephoneListPref;
563 TelephoneListCtrlPtr = TelephoneListCtrl;
564 TelephoneListIndex = TelephoneIndex;