📄 callinfo.h
字号:
/////////////////////////////////////////////////////////////////////////////
// Name: callinfo.h
// Copyright: wellgain
// Author: bet
// Date: 2003-10-8
// Description: the interface for class CCallinfo
// and others which are used by it
/////////////////////////////////////////////////////////////////////////////
#ifndef _WG_CALLINFO_H_
#define _WG_CALLINFO_H_
#include <glib.h>
#include "archive.h"
#include "datetime.h"
/////////////////////////////////////////////////////////////////////////////
// 通话时间类
class CCallTimes
{
public:
CCallTimes(const char* szfilename);
CCallTimes(const CCallTimes& ct);
CCallTimes& operator=(const CCallTimes& ct);
virtual ~CCallTimes();
// Attributes
//上次通话时间
inline CTime GetLast() { return m_last; }
//接听时间总计
inline CTime GetCallIn() { return m_callin; }
//打出时间总计
inline CTime GetCallOut() { return m_callout; }
//总通话时间
inline CTime GetTotal() { return GetCallIn()+GetCallOut(); }
// Operations
//增加新的通话时间t,若iscallin=TRUE表示接听,否则为打出
void NewCall(CTime& t, bool iscallin);
// 清零
void Clear();
protected:
void SaveToFile();
void LoadFromFile();
private:
CTime m_last;
CTime m_callin;
CTime m_callout;
char* m_szFileName;
};
/////////////////////////////////////////////////////////////////////////////
// 电话记录类
const int MaxTelNoLength = 31;
const int MaxNameLength = 16;
class CCallRecord
{
public:
CCallRecord(const char* szName="", const char* szTel="",
CDateTime dt=CDateTime(), CTime dur=CTime(0,0,0), int freq=0);
CCallRecord(const CCallRecord& cr);
CCallRecord& operator=(const CCallRecord& cr);
virtual ~CCallRecord();
// Attributes
inline const char* GetTel() const { return m_szTel; }
inline const char* GetName() const { return m_szName; }
inline int GetFreq() const { return m_nFreq; }
inline CDateTime GetTime() const { return m_Time; }
inline CTime GetDuration() const { return m_Duration; }
inline bool isDeleted() const { return (GetFreq() < 0); }
// Operations
inline void inCrease() { m_nFreq++; }
inline void SetName(const char* szName)
{ if(!szName) m_szName[0] = '\0';
else strncpy(m_szName, szName, sizeof(m_szName)-1);
}
void SetTel(const char* szTel)
{ if(!szTel) m_szTel[0] = '\0';
else strncpy(m_szTel, szTel, sizeof(m_szTel)-1);
}
inline void SetTime(CDateTime dt=CDateTime()) { m_Time = dt; }
inline void SetFreq(int f) { m_nFreq = f; }
inline void SetDuration(CTime t) { m_Duration = t; }
inline void Delete() { m_nFreq = -1; }
virtual void Serialize(CArchive& ar);
public:
int m_nIndex;
private:
char m_szTel[MaxTelNoLength];
char m_szName[MaxNameLength];
int m_nFreq;
CDateTime m_Time;
CTime m_Duration;
};
/////////////////////////////////////////////////////////////////////////////
// 通话类
// 永久类
const int MaxRecordCount = 50;
gint FindCompareFunc(gconstpointer a, gconstpointer b);
class CCallsInfo
{
public:
enum CallType { offen, missed, dialed, received, blacklist };
CCallsInfo(CallType type, const char* szfilename);
virtual ~CCallsInfo();
inline CallType GetType() { return m_eType; }
inline CCallRecord* const GetDetail(int nth) const
{ return (CCallRecord*)g_slist_nth_data(m_Records, nth); }
static int telcmp(const char* tel1, const char* tel2);
inline CCallRecord* FindRecord(CCallRecord& newrec)
{
GSList* list = g_slist_find_custom(m_Records, &newrec, FindCompareFunc);
if(list)
return (CCallRecord*) list->data;
else
return NULL;
}
int NewCall(CCallRecord& newrec);
int NewBlackName(CCallRecord& newrec);
void UpdateDuration(CTime dur);
void Delete(int nth);
void UpdateRecord(CCallRecord* newrecord);
typedef bool (*CallsInfoForEach)(const CCallRecord& cr, gpointer user_data);
void ForEach(CallsInfoForEach f, gpointer user_data);
static void SyncDataFile();
protected:
CCallsInfo();
CCallsInfo(const CCallsInfo& cif);
CCallsInfo& operator=(const CCallsInfo& cif);
void LoadFromFile();
void SaveToFile();
private:
GSList* m_Records;
CallType m_eType;
int m_nCount;
long m_lRecordLength;
char* m_szFileName;
};
/////////////////////////////////////////////////////////////////////////////
#endif //_WG_CALLINFO_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -