From 6b3ded37e4a4825be2df3612bdcbb7dfc00a1800 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Tue, 4 Mar 2014 20:41:13 +0000 Subject: HistoryStats sources git-svn-id: http://svn.miranda-ng.org/main/trunk@8397 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/!NotAdopted/HistoryStats/settings.h | 311 ++++++++++++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 plugins/!NotAdopted/HistoryStats/settings.h (limited to 'plugins/!NotAdopted/HistoryStats/settings.h') diff --git a/plugins/!NotAdopted/HistoryStats/settings.h b/plugins/!NotAdopted/HistoryStats/settings.h new file mode 100644 index 0000000000..9af8f1f30a --- /dev/null +++ b/plugins/!NotAdopted/HistoryStats/settings.h @@ -0,0 +1,311 @@ +#if !defined(HISTORYSTATS_GUARD_SETTINGS_H) +#define HISTORYSTATS_GUARD_SETTINGS_H + +#include "_globals.h" +#include "_consts.h" + +#include "canvas.h" +#include "mirandasettings.h" + +// #include "column.h" +class Column; + +#include +#include +#include + +class Settings + : private pattern::NotCopyable +{ +public: + // "poor man's constants" + enum Constants { + cNumSortLevels = 3, + }; + + // graphic output modes + enum GraphicsMode { + gmHTML = 0, + gmPNG = 1, + }; + + // PNG output modes + enum PNGMode { + pmHTMLFallBack = 0, + pmEnforcePNG = 1, + pmPreferHTML = 2, + }; + + // meta contact handling modes + enum MetaContactsMode { + mcmMetaOnly = 0, + mcmSubOnly = 1, + mcmBoth = 2, + mcmIgnoreMeta = 3, + }; + + // event merge mode + enum MergeMode { + mmTolerantMerge = 0, + mmStrictMerge = 1, + mmNoMerge = 2, + }; + + // sort keys + enum SortKeyEnum { + skFIRST = 0, + skLAST = 26, + skNothing = -1, + skNick = 0, + skProtocol = 1, + skGroup = 2, + skBytesOut = 3, + skBytesIn = 4, + skBytesTotal = 5, + skMessagesOut = 6, + skMessagesIn = 7, + skMessagesTotal = 8, + skChatsOut = 9, + skChatsIn = 10, + skChatsTotal = 11, + skChatDurationTotal = 12, + skTimeOfFirstMessage = 13, + skTimeOfLastMessage = 14, + skBytesOutAvg = 15, + skBytesInAvg = 16, + skBytesTotalAvg = 17, + skMessagesOutAvg = 18, + skMessagesInAvg = 19, + skMessagesTotalAvg = 20, + skChatsOutAvg = 21, + skChatsInAvg = 22, + skChatsTotalAvg = 23, + skChatDurationMin = 24, + skChatDurationAvg = 25, + skChatDurationMax = 26, + }; + + // omit by value data + enum OmitByValueEnum { + obvFIRST = 0, + obvLAST = 18, + obvBytesIn = 0, + obvBytesOut = 1, + obvBytesTotal = 2, + obvBytesInAvg = 3, + obvBytesOutAvg = 4, + obvBytesTotalAvg = 5, + obvMessagesIn = 6, + obvMessagesOut = 7, + obvMessagesTotal = 8, + obvMessagesInAvg = 9, + obvMessagesOutAvg = 10, + obvMessafesTotalAvg = 11, + obvChatsIn = 12, + obvChatsOut = 13, + obvChatsTotal = 14, + obvChatsInAvg = 15, + obvChatsOutAvg = 16, + obvChatsTotalAvg = 17, + obvChatDurationTotal = 18, + }; + + // button IDs for columns + enum ButtonID { + biFilterWords = 100, + }; + + // filter word modes + enum FilterWordsMode { + fwmFIRST = 0, + fwmLAST = 7, + fwmWordsMatching = 0, + fwmWordsContaining = 1, + fwmWordsStartingWith = 2, + fwmWordsEndingWith = 3, + fwmMessagesMatching = 4, + fwmMessagesContaining = 5, + fwmMessagesStartingWith = 6, + fwmMessagesEndingWith = 7, + }; + + class CharMapper + : private pattern::NotCopyable + { + private: +#if defined(MU_WIDE) + typedef unsigned short t_uchar; +#else // MU_WIDE + typedef unsigned char t_uchar; +#endif // MU_WIDE +#define T_NUMCHARS (1 << (sizeof(mu_text) * 8)) + + private: + mu_text m_CharMap[T_NUMCHARS]; + +#undef T_NUMCHARS + + public: + explicit CharMapper(const Settings& settings); + mu_text mapChar(mu_text c) const { return m_CharMap[static_cast(c)]; } + }; + + typedef std::set WordSet; + + class Filter + { + private: + ext::string m_strID; + ext::string m_strName; + int m_nMode; + WordSet m_Words; + int m_nRef; + + public: + explicit Filter(const ext::string& strID); + + bool operator ==(const Filter& other) const { return m_strID == other.m_strID; } + bool operator <(const Filter& other) const { return m_strID < other.m_strID; } + + const ext::string& getID() const { return m_strID; } + const ext::string& getName() const { return m_strName; } + void setName(const ext::string& strName) { m_strName = strName; } + int getMode() const { return m_nMode; } + void setMode(int nMode) { m_nMode = nMode; } + const WordSet& getWords() const { return m_Words; } + void setWords(const WordSet& Words) { m_Words = Words; } + void clearWords() { m_Words.clear(); } + void addWord(const ext::string& strWord) { m_Words.insert(strWord); } + int getRef() const { return m_nRef; } + void setRef(int nRef) { m_nRef = nRef; } + }; + + typedef std::set FilterSet; + typedef std::set ColFilterSet; + + struct SortKey { + int by; + bool asc; + }; + +public: + typedef std::set ProtoSet; + typedef std::vector ColumnList; + +public: + static const mu_text* getDefaultWordDelimiters(); + static const mu_text* getDefaultStyleSheet(); + static const mu_text* getDefaultHideContactMenuProtos(); + static const mu_text* getDefaultProtosIgnore(); + static const mu_text* getDefaultColumns(); + static const mu_text* getDefaultSort(); + static const mu_text* getDefaultOutputFile(); + static const mu_text* getDefaultOutputExtraFolder(); + static const mu_text* getDefaultFilterWords(); + +public: + const DWORD m_VersionCurrent; + +private: + // column settings + ColumnList m_Columns; + +protected: + void clearColumns(); + +public: + // global settings + bool m_OnStartup; + bool m_ShowMainMenu; + bool m_ShowMainMenuSub; + bool m_ShowContactMenu; + bool m_ShowContactMenuPseudo; + ProtoSet m_HideContactMenuProtos; + int m_GraphicsMode; + int m_PNGMode; + bool m_ThreadLowPriority; + ext::string m_PathToBrowser; + + // input settings + int m_ChatSessionMinDur; + int m_ChatSessionTimeout; + int m_AverageMinTime; + ext::string m_WordDelimiters; + ProtoSet m_ProtosIgnore; + int m_IgnoreOld; + ext::string m_IgnoreBefore; + ext::string m_IgnoreAfter; + bool m_FilterRawRTF; + bool m_FilterBBCodes; + int m_MetaContactsMode; + bool m_MergeContacts; + bool m_MergeContactsGroups; + int m_MergeMode; + + // output settings + bool m_RemoveEmptyContacts; + bool m_RemoveOutChatsZero; + bool m_RemoveOutBytesZero; + bool m_RemoveInChatsZero; + bool m_RemoveInBytesZero; + bool m_OmitContacts; + bool m_OmitByValue; + int m_OmitByValueData; + int m_OmitByValueLimit; + bool m_OmitByTime; + int m_OmitByTimeDays; + bool m_OmitByRank; + int m_OmitNumOnTop; + bool m_OmittedInTotals; + bool m_OmittedInExtraRow; + bool m_CalcTotals; + bool m_TableHeader; + int m_TableHeaderRepeat; + bool m_TableHeaderVerbose; + bool m_HeaderTooltips; + bool m_HeaderTooltipsIfCustom; + SortKey m_Sort[cNumSortLevels]; + ext::string m_OwnNick; + bool m_OutputVariables; + ext::string m_OutputFile; + bool m_OutputExtraToFolder; + ext::string m_OutputExtraFolder; + bool m_OverwriteAlways; + bool m_AutoOpenOptions; + bool m_AutoOpenStartup; + bool m_AutoOpenMenu; + + // shared column data + FilterSet m_FilterWords; + +public: + explicit Settings(); + explicit Settings(const Settings& other); + Settings& operator =(const Settings& other); + ~Settings(); + + void assignSettings(const Settings& other) { operator =(other); } + + int countCol() const { return m_Columns.size(); } + const Column* getCol(int index) const { return m_Columns[index]; } + Column* getCol(int index) { return m_Columns[index]; } + int addCol(Column* pCol); + bool delCol(int index); + bool delCol(Column* pCol); + bool moveCol(Column* pCol, Column* pInsertAfter); + + bool manageFilterWords(HWND hParent, Column* pCol); + const Filter* getFilter(const ext::string& strID) const; + + ext::string getOutputFile(DWORD timeStarted) const; + ext::string getOutputPrefix(DWORD timeStarted) const; + bool isPNGOutputActiveAndAvailable() const; + DWORD getIgnoreBefore() const; + DWORD getIgnoreAfter() const; + + void ensureConstraints(); + + void openURL(const mu_text* szURL); +}; + +#endif // HISTORYSTATS_GUARD_SETTINGS_H -- cgit v1.2.3