summaryrefslogtreecommitdiffabout
path: root/SettingsPage.cpp
Side-by-side diff
Diffstat (limited to 'SettingsPage.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--SettingsPage.cpp186
1 files changed, 186 insertions, 0 deletions
diff --git a/SettingsPage.cpp b/SettingsPage.cpp
new file mode 100644
index 0000000..2fa42d0
--- a/dev/null
+++ b/SettingsPage.cpp
@@ -0,0 +1,186 @@
+// SettingsPage.cpp : implementation file
+//
+
+#include "stdafx.h"
+#include "BigBrother.h"
+#include "SettingsPage.h"
+#include "HostPropertyPages.h"
+#include "BigBrotherDoc.h"
+#include "BigBrotherView.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CSettingsPage property page
+
+IMPLEMENT_DYNCREATE(CSettingsPage, CPropertyPage)
+
+CSettingsPage::CSettingsPage() : CPropertyPage(CSettingsPage::IDD)
+{
+ //{{AFX_DATA_INIT(CSettingsPage)
+ m_OverrideIntervals = FALSE;
+ m_OverrideRetries = FALSE;
+ m_OverrideTimeout = FALSE;
+ m_IntervalBad = 0;
+ m_IntervalGood = 0;
+ m_TimeOut = 0;
+ m_Retries = 0;
+ //}}AFX_DATA_INIT
+}
+
+CSettingsPage::~CSettingsPage()
+{
+}
+
+void CSettingsPage::DoDataExchange(CDataExchange* pDX)
+{
+ CPropertyPage::DoDataExchange(pDX);
+ //{{AFX_DATA_MAP(CSettingsPage)
+ DDX_Control(pDX, IDC_RETRIES, m_RetriesCtl);
+ DDX_Control(pDX, IDC_PINGTIMEOUT, m_TimeOutCtl);
+ DDX_Control(pDX, IDC_PINGINTERVAL_GOOD, m_IntervalGoodCtl);
+ DDX_Control(pDX, IDC_PINGINTERVAL_BAD, m_IntervalBadCtl);
+ DDX_Control(pDX, IDC_OVERRIDE_TIMEOUT, m_OverrideTimeoutCtl);
+ DDX_Control(pDX, IDC_OVERRIDE_RETRIES, m_OverrideRetriesCtl);
+ DDX_Control(pDX, IDC_OVERRIDE_INTERVALS, m_OverrideIntervalsCtl);
+ DDX_Check(pDX, IDC_OVERRIDE_INTERVALS, m_OverrideIntervals);
+ DDX_Check(pDX, IDC_OVERRIDE_RETRIES, m_OverrideRetries);
+ DDX_Check(pDX, IDC_OVERRIDE_TIMEOUT, m_OverrideTimeout);
+ DDX_Text(pDX, IDC_PINGINTERVAL_BAD, m_IntervalBad);
+ DDX_Text(pDX, IDC_PINGINTERVAL_GOOD, m_IntervalGood);
+ DDX_Text(pDX, IDC_PINGTIMEOUT, m_TimeOut);
+ DDX_Text(pDX, IDC_RETRIES, m_Retries);
+ //}}AFX_DATA_MAP
+}
+
+
+BEGIN_MESSAGE_MAP(CSettingsPage, CPropertyPage)
+ //{{AFX_MSG_MAP(CSettingsPage)
+ ON_BN_CLICKED(IDC_OVERRIDE_INTERVALS, OnOverrideIntervals)
+ ON_BN_CLICKED(IDC_OVERRIDE_RETRIES, OnOverrideRetries)
+ ON_BN_CLICKED(IDC_OVERRIDE_TIMEOUT, OnOverrideTimeout)
+ //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CSettingsPage message handlers
+
+void CSettingsPage::SetupControls()
+{
+ m_IntervalBadCtl.EnableWindow(m_OverrideIntervals);
+ m_IntervalGoodCtl.EnableWindow(m_OverrideIntervals);
+ m_RetriesCtl.EnableWindow(m_OverrideRetries);
+ m_TimeOutCtl.EnableWindow(m_OverrideTimeout);
+}
+
+void CSettingsPage::UpdatePage()
+{
+ if(!m_dad->m_Brother)
+ return;
+ if(::IsWindow(m_hWnd)){
+ if(m_dad->m_Brother->m_Daddy){
+ m_OverrideIntervalsCtl.EnableWindow(TRUE);
+ m_OverrideRetriesCtl.EnableWindow(TRUE);
+ m_OverrideTimeoutCtl.EnableWindow(TRUE);
+ }else{
+ m_OverrideIntervalsCtl.EnableWindow(FALSE);
+ m_OverrideRetriesCtl.EnableWindow(FALSE);
+ m_OverrideTimeoutCtl.EnableWindow(FALSE);
+ }
+ }
+ if(m_dad->m_Brother->flags&CBrother::flagsOverrideIntervals)
+ m_OverrideIntervals=TRUE;
+ else
+ m_OverrideIntervals=FALSE;
+ if(m_dad->m_Brother->flags&CBrother::flagsOverrideTimeout)
+ m_OverrideTimeout=TRUE;
+ else
+ m_OverrideTimeout=FALSE;
+ if(m_dad->m_Brother->flags&CBrother::flagsOverrideRetries)
+ m_OverrideRetries=TRUE;
+ else
+ m_OverrideRetries=FALSE;
+ m_IntervalBad=m_dad->m_Brother->m_IntervalBad;
+ m_IntervalGood=m_dad->m_Brother->m_IntervalGood;
+ m_Retries=m_dad->m_Brother->m_Retries;
+ m_TimeOut=m_dad->m_Brother->m_TimeOut;
+ if(::IsWindow(m_hWnd)){
+ UpdateData(FALSE);
+ SetupControls();
+ }
+}
+
+BOOL CSettingsPage::OnSetActive()
+{
+ UpdatePage();
+ return CPropertyPage::OnSetActive();
+}
+
+void CSettingsPage::OnOverrideIntervals()
+{
+ UpdateBrother();
+ if(m_OverrideIntervals)
+ m_IntervalGoodCtl.SetFocus();
+}
+
+void CSettingsPage::OnOverrideRetries()
+{
+ UpdateBrother();
+ if(m_OverrideRetries)
+ m_RetriesCtl.SetFocus();
+}
+
+void CSettingsPage::OnOverrideTimeout()
+{
+ UpdateBrother();
+ if(m_OverrideTimeout)
+ m_TimeOutCtl.SetFocus();
+}
+
+void CSettingsPage::UpdateBrother()
+{
+ if(!m_dad->m_Brother){
+ TRACE0("No brother on update\n");
+ return;
+ }
+ if(::IsWindow(m_hWnd))
+ UpdateData();
+CBrother toCompare;
+ toCompare = *m_dad->m_Brother;
+ m_dad->m_Brother->m_IntervalBad=m_IntervalBad;
+ m_dad->m_Brother->m_IntervalGood=m_IntervalGood;
+ if(m_OverrideIntervals)
+ m_dad->m_Brother->flags|=CBrother::flagsOverrideIntervals;
+ else
+ m_dad->m_Brother->flags&=~CBrother::flagsOverrideIntervals;
+ m_dad->m_Brother->m_Retries=m_Retries;
+ if(m_OverrideRetries)
+ m_dad->m_Brother->flags|=CBrother::flagsOverrideRetries;
+ else
+ m_dad->m_Brother->flags&=~CBrother::flagsOverrideRetries;
+ m_dad->m_Brother->m_TimeOut=m_TimeOut;
+ if(m_OverrideTimeout)
+ m_dad->m_Brother->flags|=CBrother::flagsOverrideTimeout;
+ else
+ m_dad->m_Brother->flags&=~CBrother::flagsOverrideTimeout;
+ m_dad->m_Brother->ParentalAdjust();
+ if(toCompare!=(*m_dad->m_Brother)){
+ CDocument *pDoc = m_dad->m_Daddy->GetDocument();
+ ASSERT(pDoc);
+ pDoc->SetModifiedFlag();
+ }
+ if(::IsWindow(m_hWnd)){
+ UpdateData(FALSE);
+ SetupControls();
+ }
+}
+
+BOOL CSettingsPage::OnKillActive()
+{
+ UpdateBrother();
+ return CPropertyPage::OnKillActive();
+}