summaryrefslogtreecommitdiff
path: root/plugins/HistoryStats/src/column_splittimeline.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/HistoryStats/src/column_splittimeline.h')
-rw-r--r--plugins/HistoryStats/src/column_splittimeline.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/plugins/HistoryStats/src/column_splittimeline.h b/plugins/HistoryStats/src/column_splittimeline.h
new file mode 100644
index 0000000000..e3754f5891
--- /dev/null
+++ b/plugins/HistoryStats/src/column_splittimeline.h
@@ -0,0 +1,101 @@
+#if !defined(HISTORYSTATS_GUARD_COLUMN_SPLITTIMELINE_H)
+#define HISTORYSTATS_GUARD_COLUMN_SPLITTIMELINE_H
+
+#include "column.h"
+
+/*
+ * ColSplitTimeline
+ */
+
+class ColSplitTimeline
+ : public Column
+{
+public:
+ typedef std::map<int, InOut> TimelineMap;
+
+ struct SplitParams {
+ int alignment; // 0 = day, 1 = week
+ int columns_to_group;
+ int hours_in_block;
+ int blocks_in_column;
+ int effective_vis_mode;
+ };
+
+private:
+ int m_nSource; // 0 = characters, 1 = messages, 2 = chats
+ int m_nSourceType; // 0 = in, 1 = out, 2 = total, 3 = ratio
+ int m_nIgnoreOld;
+ int m_nVisMode; // 0 = hours of day, 1 = days of week, 2 = custom
+ int m_nHODGroup;
+ int m_nDOWGroup;
+ int m_nBlockUnit; // 0 = hours, 1 = days, 2 = weeks
+ int m_nUnitsPerBlock;
+ int m_nBlocks;
+ int m_nGraphAlign; // 0 = day boundary, 1 = week boundary
+ int m_nCustomGroup;
+ bool m_bTopPerColumn;
+
+ OptionsCtrl::Combo m_hSource;
+ OptionsCtrl::Edit m_hIgnoreOld;
+ OptionsCtrl::Radio m_hVisMode;
+ OptionsCtrl::Edit m_hHODGroup;
+ OptionsCtrl::Edit m_hDOWGroup;
+ OptionsCtrl::Combo m_hBlockUnit;
+ OptionsCtrl::Edit m_hUnitsPerBlock;
+ OptionsCtrl::Edit m_hBlocks;
+ OptionsCtrl::Radio m_hGraphAlign;
+ OptionsCtrl::Edit m_hCustomGroup;
+ OptionsCtrl::Check m_hTopPerColumn;
+
+ DWORD m_nTimeDiv;
+ DWORD m_nTimeOffset;
+ int m_nTimelineWidth;
+ int m_nBlockOffset;
+ int m_nNumBlocks;
+
+private:
+ int getValue(const InOut& value)
+ {
+ switch (m_nSourceType)
+ {
+ case 0: return value.in;
+ case 1: return value.out;
+ case 2: return value.total();
+ }
+
+ return 0;
+ }
+
+ SplitParams getParams() const;
+ void addToSlot(Contact& contact, bool bOutgoing, DWORD localTimestamp, int toAdd);
+
+ void outputRenderRowInOut(ext::ostream& tos, const Contact& contact, DisplayType display);
+ void outputRenderRowRatio(ext::ostream& tos, const Contact& contact, DisplayType display);
+
+public:
+ explicit ColSplitTimeline();
+
+protected:
+ virtual const mu_text* impl_getUID() const { return con::ColSplitTimeline; }
+ virtual const mu_text* impl_getTitle() const { return i18n(muT("\"Split\" timeline")); }
+ virtual const mu_text* impl_getDescription() const { return i18n(muT("Column holding a graphical overview of your chatting behaviour (out, in, total, in/out ratio) from the first to the last day of your history. The information is spread along x- and y-axis and the values are encoded as color values. Different chatting behaviour measures are available.")); }
+ virtual void impl_copyConfig(const Column* pSource);
+ virtual int impl_getFeatures() const { return cfHasConfig | cfAcquiresData; }
+ virtual void impl_configRead(const SettingsTree& settings);
+ virtual void impl_configWrite(SettingsTree& settings) const;
+ virtual void impl_configToUI(OptionsCtrl& Opt, OptionsCtrl::Item hGroup);
+ virtual void impl_configFromUI(OptionsCtrl& Opt);
+ virtual int impl_configGetRestrictions(ext::string* pDetails) const { return crPNGFull; }
+ virtual ext::string impl_contactDataGetUID() const;
+ virtual void impl_contactDataBeginAcquire();
+ virtual void impl_contactDataPrepare(Contact& contact) const;
+ virtual void impl_contactDataFree(Contact& contact) const;
+ virtual void impl_contactDataAcquireMessage(Contact& contact, Message& msg);
+ virtual void impl_contactDataAcquireChat(Contact& contact, bool bOutgoing, DWORD localTimestampStarted, DWORD duration);
+ virtual void impl_contactDataMerge(Contact& contact, const Contact& include) const;
+ virtual void impl_columnDataAfterOmit();
+ virtual void impl_outputRenderHeader(ext::ostream& tos, int row, int rowSpan) const;
+ virtual void impl_outputRenderRow(ext::ostream& tos, const Contact& contact, DisplayType display);
+};
+
+#endif // HISTORYSTATS_GUARD_COLUMN_SPLITTIMELINE_H \ No newline at end of file