📄 ueditcontact.pas
字号:
unit uEditContact;
{
*******************************************************************************
* Descriptions: Edit phone contact
* $Source: /cvsroot/fma/fma/uEditContact.pas,v $
* $Locker: $
*
* Todo:
*
* Change Log:
* $Log: uEditContact.pas,v $
*
*******************************************************************************
}
interface
uses
Windows, TntWindows, Messages, SysUtils, TntSysUtils, Variants, Classes, TntClasses, Graphics, TntGraphics,
Controls, TntControls, Forms, TntForms, Dialogs, TntDialogs, ExtCtrls, TntExtCtrls, StdCtrls, TntStdCtrls,
ComCtrls, TntComCtrls, UniTntCtrls, Buttons, TntButtons, uSyncPhonebook, Menus, TntMenus, MPlayer, GR32_Image,
uContactSync, VirtualTrees, uVCard, ImgList, Mask, DateUtils;
type
TfrmEditContact = class(TTntForm)
PageControl1: TTntPageControl;
tsGeneral: TTntTabSheet;
TntImage: TTntImage;
Bevel1: TTntBevel;
Label1: TTntLabel;
txtTitle: TTntEdit;
txtName: TTntEdit;
Label2: TTntLabel;
Label4: TTntLabel;
txtOrganization: TTntEdit;
Label5: TTntLabel;
Bevel2: TTntBevel;
Label6: TTntLabel;
txtHome: TTntEdit;
Label7: TTntLabel;
txtWork: TTntEdit;
Label8: TTntLabel;
txtCell: TTntEdit;
Label9: TTntLabel;
txtFax: TTntEdit;
Label10: TTntLabel;
txtOther: TTntEdit;
TabSheet2: TTntTabSheet;
OkButton: TTntButton;
CancelButton: TTntButton;
ApplyButton: TTntButton;
GroupBox1: TTntGroupBox;
Panel1: TTntPanel;
btnPicSel: TTntButton;
Label12: TTntLabel;
Label13: TTntLabel;
lblPicDim: TTntLabel;
Label15: TTntLabel;
imgDim: TTntImage;
lblPicName: TTntLabel;
lblPicSize: TTntLabel;
btnPicNew: TTntButton;
GroupBox2: TTntGroupBox;
btnPicDel: TTntButton;
Label14: TTntLabel;
Label16: TTntLabel;
Label17: TTntLabel;
btnSndNew: TTntButton;
btnSndDel: TTntButton;
btnSndSel: TTntButton;
imgSnd: TTntImage;
lblSndType: TTntLabel;
lblSndName: TTntLabel;
lblSndSize: TTntLabel;
Label11: TTntLabel;
lblPicPal: TTntLabel;
TabSheet3: TTntTabSheet;
Label18: TTntLabel;
ResetButton: TTntButton;
Label19: TTntLabel;
tsCallPrefs: TTntTabSheet;
GroupBox3: TTntGroupBox;
cbDefaultNum: TTntComboBox;
Label20: TTntLabel;
Label21: TTntLabel;
Label22: TTntLabel;
Label23: TTntLabel;
PopupMenu1: TTntPopupMenu;
MediaPlayer1: TMediaPlayer;
SelImage: TImage32;
txtDisplayAs: TTntComboBox;
TabSheet5: TTntTabSheet;
Label34: TTntLabel;
tsCallNotes: TTntTabSheet;
GroupBox6: TTntGroupBox;
CheckBox1: TTntCheckBox;
SaveDialog1: TTntSaveDialog;
GroupBox8: TTntGroupBox;
RadioButton1: TTntRadioButton;
RadioButton2: TTntRadioButton;
RadioButton3: TTntRadioButton;
Button2: TTntButton;
TabSheet7: TTntTabSheet;
Label28: TTntLabel;
txtStreet: TTntEdit;
Label30: TTntLabel;
txtCity: TTntEdit;
Label31: TTntLabel;
txtRegion: TTntEdit;
txtPostalCode: TTntEdit;
Label32: TTntLabel;
txtCountry: TTntEdit;
Label33: TTntLabel;
TntImage1: TTntImage;
TntBevel1: TTntBevel;
TntLabel1: TTntLabel;
TntImage2: TTntImage;
TntLabel2: TTntLabel;
TntBevel2: TTntBevel;
TntImage3: TTntImage;
TntLabel3: TTntLabel;
TntBevel3: TTntBevel;
Label3: TTntLabel;
txtContactDataID: TTntEdit;
Label26: TTntLabel;
UnlinkOutlookButton: TTntButton;
Label25: TTntLabel;
txtFileAs: TTntEdit;
Label27: TTntLabel;
MemoDetails: TTntMemo;
TntBevel4: TTntBevel;
btNotesClear: TTntButton;
btNotesSave: TTntButton;
MemoNotes: TTntMemo;
Label29: TTntLabel;
TntImage4: TTntImage;
TntLabel4: TTntLabel;
TntBevel6: TTntBevel;
TntLabel5: TTntLabel;
TntBevel7: TTntBevel;
TntLabel6: TTntLabel;
txtAddressType: TTntComboBox;
TntTabSheet1: TTntTabSheet;
TntImage5: TTntImage;
TntLabel7: TTntLabel;
TntBevel5: TTntBevel;
TntLabel8: TTntLabel;
txtURL: TTntEdit;
TntLabel9: TTntLabel;
lvEmails: TTntListView;
MailAddButton: TTntButton;
MailEditButton: TTntButton;
MailDelButton: TTntButton;
MailPrefButton: TTntButton;
ImageList1: TImageList;
txtBirthday: TTntDateTimePicker;
TntBevel8: TTntBevel;
TntLabel10: TTntLabel;
TntBevel9: TTntBevel;
TntLabel11: TTntLabel;
BirthdayDeleteButton: TTntButton;
lblDisabledPostal: TTntLabel;
PostalDeleteButton: TTntButton;
NumbersHistoryButton: TTntButton;
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure txtCustomChange(Sender: TObject);
procedure ApplyButtonClick(Sender: TObject);
procedure OkButtonClick(Sender: TObject);
procedure txtTelKeyPress(Sender: TObject; var Key: Char);
procedure ResetButtonClick(Sender: TObject);
procedure TabSheet4Show(Sender: TObject);
procedure txtPhoneChange(Sender: TObject);
procedure txtPhoneEnter(Sender: TObject);
procedure btnPicSelClick(Sender: TObject);
procedure btnSndSelClick(Sender: TObject);
procedure OnPicSelClick(Sender: TObject);
procedure OnSndSelClick(Sender: TObject);
procedure btnPicDelClick(Sender: TObject);
procedure btnSndDelClick(Sender: TObject);
procedure MediaPlayer1Click(Sender: TObject; Button: TMPBtnType;
var DoDefault: Boolean);
procedure PageControl1Change(Sender: TObject);
procedure btnUploadClick(Sender: TObject);
procedure txtChangeEditAs(Sender: TObject);
procedure OnChangeAsEnter(Sender: TObject);
procedure UnlinkOutlookButtonClick(Sender: TObject);
procedure btNotesClearClick(Sender: TObject);
procedure MemoNotesChange(Sender: TObject);
procedure btNotesSaveClick(Sender: TObject);
procedure txtChange(Sender: TObject);
procedure txtDisplayAsChange(Sender: TObject);
procedure CancelButtonClick(Sender: TObject);
procedure txtAddressTypeChange(Sender: TObject);
procedure MailAddButtonClick(Sender: TObject);
procedure MailPrefButtonClick(Sender: TObject);
procedure MailEditButtonClick(Sender: TObject);
procedure MailDelButtonClick(Sender: TObject);
procedure lvEmailsSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure lvEmailsDblClick(Sender: TObject);
procedure BirthdayDeleteButtonClick(Sender: TObject);
procedure txtBirthdayChange(Sender: TObject);
procedure PostalDeleteButtonClick(Sender: TObject);
procedure NumbersHistoryButtonClick(Sender: TObject);
private
{ Private declarations }
FAddress: integer; // the index of last shown address
FAddresses: array[0..1] of TPostalAddress;
FPhonePrev: string;
FPrevChangeAs,FMoreNumbers: WideString;
FUseSIMMode,FLoadingData,FUseOwnMode: boolean;
FCustomImage,FSwappingAdr: Boolean;
function PhonesCount: integer;
function PrefEmailIndex: integer;
procedure DoSetModified;
procedure DoSanityCheck;
procedure DoEmailCheck(AMail: WideString);
procedure LoadContactData;
procedure SaveContactData;
procedure ShowFullName(Modified: WideString = '');
procedure FillInternetAdrs;
procedure FillPostalAdrs;
procedure FillDisplayNameList;
procedure UpdateDefNum(SetTo: integer = 0);
procedure UpdatePersonalize;
procedure SelectFile(Pos: TPoint; FileType: byte; Selected: WideString = '');
procedure SyncContactsError(Sender: TObject; const Message: String);
procedure SyncContactsConfirm(Sender: TObject; Contact: TContact;
Action: TContactAction; const Description: WideString;
var Confirmed: Boolean);
procedure SetCustomModified;
procedure Set_UseSIMMode(const Value: boolean);
procedure Set_UseOwnMode(const Value: boolean);
procedure Set_CustomImage(const Value: Boolean);
function Get_Notes: TTntStrings;
public
MaxFullNameLen: integer;
IsNew,Modified,customModified: boolean;
contact: TContactData;
published
procedure LoadAndMergeWith(AContact: TContactData);
property UseSIMMode: boolean read FUseSIMMode write Set_UseSIMMode default False;
property UseOwnMode: boolean read FUseOwnMode write Set_UseOwnMode default False;
property IsCustomImage: Boolean read FCustomImage write Set_CustomImage;
property ContactNotes: TTntStrings read Get_Notes;
end;
var
frmEditContact: TfrmEditContact;
implementation
uses
gnugettext, gnugettexthelpers,
uGlobal, uLogger, Unit1, uFiles, uDialogs, uImg32Helper, uInputQuery, uPhoneHistory;
{$R *.dfm}
procedure TfrmEditContact.FormCreate(Sender: TObject);
begin
gghTranslateComponent(self);
{ Populate images }
TntImage1.Picture.Assign(TntImage.Picture);
TntImage2.Picture.Assign(TntImage.Picture);
TntImage3.Picture.Assign(TntImage.Picture);
TntImage4.Picture.Assign(TntImage.Picture);
TntImage5.Picture.Assign(TntImage.Picture);
{ Align personalization widgets }
lblPicDim.Left := imgDim.Left + imgDim.Width + 4;
lblPicName.Left := Label13.Left + Label13.Width + 4;
lblPicSize.Left := Label15.Left + Label15.Width + 4;
lblPicPal.Left := Label11.Left + Label11.Width + 4;
lblSndType.Left := imgSnd.Left + imgSnd.Width + 4;
lblSndName.Left := Label14.Left + Label14.Width + 4;
lblSndSize.Left := Label16.Left + Label16.Width + 4;
//lblDisabledPostal.Font.Color := clRed;
{$IFNDEF VER150}
Form1.ThemeManager1.CollectForms(Self);
{$ENDIF}
end;
procedure TfrmEditContact.txtDisplayAsChange(Sender: TObject);
begin
{ Populate Display Name }
TntLabel1.Caption := txtDisplayAs.Text;
TntLabel2.Caption := txtDisplayAs.Text;
TntLabel3.Caption := txtDisplayAs.Text;
TntLabel4.Caption := txtDisplayAs.Text;
TntLabel7.Caption := txtDisplayAs.Text;
DoSetModified;
end;
procedure TfrmEditContact.FormShow(Sender: TObject);
begin
MaxFullNameLen := txtName.MaxLength;
LoadContactData;
PageControl1.ActivePageIndex := 0;
if Form1.IsT610Clone then begin
{ Hide postal adress tab if not supported by phone (T610 clones) }
TabSheet7.Enabled := False;
lblDisabledPostal.Visible := True;
end;
if not Form1.IsK610orBetter then begin
txtURL.Enabled := False;
txtAddressType.Enabled := False;
end;
txtBirthday.Enabled := Form1.IsK750orBetter and not FUseSIMMode;
ResetButton.Enabled := not IsNew;
UnlinkOutlookButton.Enabled := not IsNew;
txtName.SetFocus;
end;
procedure TfrmEditContact.LoadContactData;
var
c: TColor;
b: boolean;
w: WideString;
procedure UpdateTelView(var Item: TTntEdit);
begin
{ Always enable, and disable only empty Edits }
if b or (Item.Text = '') then begin
Item.Enabled := b;
Item.Color := c;
end;
end;
begin
FLoadingData := True;
try
FPrevChangeAs := '';
FPhonePrev := '';
if FUseSIMMode then c := clBtnFace else c := clWindow;
b := not FUseSIMMode;
// contact
txtTitle.Text := contact.title;
w := contact.name;
if contact.surname <> '' then
w := w + ' ' + contact.surname; // do not use GetContactFullName here!
txtName.Text := w;
txtContactDataID.Text := GUIDToString(contact.CDID);
txtFileAs.Text := contact.displayname;
txtDisplayAs.Text := contact.displayname;
txtOrganization.Text := contact.org;
txtBirthday.Date := contact.Birthday;
txtBirthdayChange(nil);
txtHome.Text := contact.home;
txtWork.Text := contact.work;
txtCell.Text := contact.cell;
txtFax.Text := contact.fax;
txtOther.Text := contact.other;
FillPostalAdrs;
FillInternetAdrs;
ShowFullName;
FillDisplayNameList;
FMoreNumbers := contact.morenums;
if not (FUseSIMMode or FUseOwnMode) then begin
// Personalize, will fill data on tabsheet open
btnPicDel.Click;
btnSndDel.Click;
// Preferences
UpdateDefNum(contact.DefaultIndex);
end;
{ Leave only used field for editing, or enable all fields for new contacts }
if FUseSIMMode then begin
if (txtCell.Text <> '') or (txtHome.Text <> '') or (txtWork.Text <> '') or
(txtFax.Text <> '') or (txtOther.Text <> '') then begin
UpdateTelView(txtCell);
UpdateTelView(txtHome);
UpdateTelView(txtWork);
UpdateTelView(txtFax);
UpdateTelView(txtOther);
end
else if Form1.ExplorerNew.FocusedNode = Form1.FNodeContactsSM then begin
if not Form1.IsK700orBetter then begin // older phone?
{ Creating a New Contact in SIM Card - enable only home phone }
UpdateTelView(txtCell);
UpdateTelView(txtWork);
UpdateTelView(txtFax);
UpdateTelView(txtOther);
end;
end;
end
else
GetContactDetails(@contact,MemoDetails.Lines);
GetContactNotes(@contact,MemoNotes.Lines);
MemoNotesChange(nil);
finally
FLoadingData := False;
end;
// done
ApplyButton.Enabled := False;
Modified := False;
customModified := False;
end;
procedure TfrmEditContact.SaveContactData;
var
i,j: integer;
s,a: WideString;
begin
contact.title := txtTitle.text;
contact.org := txtOrganization.text;
{ Update contact name and surname }
a := GetContactFullName(@contact);
s := Trim(txtName.text);
i := Pos(' ',s);
if i = 0 then begin
contact.name := s;
contact.surname := '';
end
else begin
contact.name := Copy(s,1,i-1);
Delete(s,1,i);
contact.surname := Trim(s);
end;
(* Commented out since will keep DisplayName as fma internal setting
s := GetContactFullName(@contact);
if WideCompareText(a,s) <> 0 then
{ If name/surname are changed, reset display name, since SE T610
doesnt support displayname vCard peoperty }
txtDisplayAs.Text := s;
*)
contact.displayname := txtDisplayAs.Text;
contact.home := txtHome.text;
contact.work := txtWork.text;
contact.cell := txtCell.text;
contact.fax := txtFax.text;
contact.other := txtOther.text;
contact.homepage := txtURL.text;
{ birthday }
contact.Birthday := DateOf(txtBirthday.Date);
{ internet }
a := '';
i := PrefEmailIndex;
if i <> -1 then contact.email := lvEmails.Items[i].Caption
else contact.email := '';
for j := 0 to lvEmails.Items.Count-1 do
if i <> j then a := a + lvEmails.Items[j].Caption + sLineBreak;
contact.moremails := a;
{ postal }
txtAddressTypeChange(nil); // save current changes to FAddresses
contact.homeAddress := FAddresses[0];
contact.workAddress := FAddresses[1];
contact.morenums := FMoreNumbers;
//See SyncPhonebook to save notes. SetContactNotes(@contact,MemoNotes.Lines);
if not (FUseSIMMode or FUseOwnMode) then begin
contact.DefaultIndex := cbDefaultNum.ItemIndex;
contact.picture := lblPicName.Caption;
contact.sound := lblSndName.Caption;
contact.CDID := StringToGUID(txtContactDataID.Text);
end;
{ Dont reset modified flags here, since we'll use them in SyncPhonebook. Only disable apply button. }
ApplyButton.Enabled := False;
end;
procedure TfrmEditContact.ApplyButtonClick(Sender: TObject);
begin
DoSanityCheck;
SaveContactData;
end;
procedure TfrmEditContact.OkButtonClick(Sender: TObject);
begin
DoSanityCheck;
if ApplyButton.Enabled or IsNew then
SaveContactData;
ModalResult := mrOk;
end;
procedure TfrmEditContact.txtTelKeyPress(Sender: TObject; var Key: Char);
begin
case ord(Key) of
8, 48..57: ;
35, 42: ; // # and * (for special service numbers)
3, 22, 24, 26: ; //escape CTRL+C,V,X,Z ;)
43: with (Sender as TTntEdit) do begin
if (Pos('+',Text) <> 0) or (SelStart <> 0) then begin
Key := #0; //only the first char can be '+'
Beep;
end;
end;
112: ; // p (pause)
else begin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -