text: /*++
  
     Copyright    (c)    1994-2000    Microsoft Corporation
  
     Module  Name :
          deffs.cpp
  
     Abstract:
          Default Ftp Site Dialog
  
     Author:
          Sergei Antonov (sergeia)
  
     Project:
          Internet Services Manager
  
     Revision History:
  
  --*/
  
  //
  // Include Files
  //
  #include "stdafx.h"
  #include "resource.h"
  #include "common.h"
  #include "inetmgrapp.h"
  #include "inetprop.h"
  #include "shts.h"
  #include "ftpsht.h"
  #include "deffs.h"
  
  #ifdef _DEBUG
  #define new DEBUG_NEW
  #undef THIS_FILE
  static char THIS_FILE[] = __FILE__;
  #endif
  
  /* static */
  void
  CDefFtpSitePage::ParseMaxNetworkUse(
        DWORD& dwMaxBandwidth, 
        DWORD& dwMaxBandwidthDisplay,
        BOOL& fLimitBandwidth
        )
  {
      //
      // Special case: If dwMaxBandwidth is 0(an invalid value), the 
      // value likely could not be inherited from the root (the user
      // is an operator and can't see the properties there).  Adjust
      // the value to a possibly misleading value.
      //
      if (dwMaxBandwidth == 0L)
      {
          TRACEEOLID("Adjusting invalid bandwidth throttling value -- "
                     "are you an operator?");
          dwMaxBandwidth = INFINITE_BANDWIDTH;
      }
  
      fLimitBandwidth = (dwMaxBandwidth != INFINITE_BANDWIDTH);
      dwMaxBandwidthDisplay = fLimitBandwidth ?
        (dwMaxBandwidth / KILOBYTE) : (DEF_BANDWIDTH / KILOBYTE);
  }
  
  IMPLEMENT_DYNCREATE(CDefFtpSitePage, CInetPropertyPage)
  
  CDefFtpSitePage::CDefFtpSitePage(
      IN CInetPropertySheet * pSheet
      )
      : CInetPropertyPage(CDefFtpSitePage::IDD, pSheet)
  {
  }
  
  CDefFtpSitePage::~CDefFtpSitePage()
  {
  }
  
  void
  CDefFtpSitePage::DoDataExchange(
      IN CDataExchange * pDX
      )
  {
      CInetPropertyPage::DoDataExchange(pDX);
  
      //{{AFX_DATA_MAP(CDefWebSitePage)
      DDX_Check(pDX, IDC_CHECK_LIMIT_NETWORK_USE, m_fLimitBandwidth);
      DDX_Control(pDX, IDC_CHECK_LIMIT_NETWORK_USE, m_LimitBandwidth);
      DDX_Control(pDX, IDC_MAX_BANDWIDTH, m_MaxBandwidth);
      DDX_TextBalloon(pDX, IDC_MAX_BANDWIDTH, m_dwMaxBandwidthDisplay);
      DDX_Control(pDX, IDC_MAX_BANDWIDTH_SPIN, m_MaxBandwidthSpin);
      //}}AFX_DATA_MAP
      if (!pDX->m_bSaveAndValidate || m_fLimitBandwidth)
      {
  		// This Needs to come before DDX_Text which will try to put text big number into small number
  		DDV_MinMaxBalloon(pDX, IDC_MAX_BANDWIDTH, BANDWIDTH_MIN, BANDWIDTH_MAX);
          DDX_TextBalloon(pDX, IDC_MAX_BANDWIDTH, m_dwMaxBandwidthDisplay);
      }
  }
  
  /* virtual */
  HRESULT
  CDefFtpSitePage::FetchLoadedValues()
  /*++
  
  Routine Description:
      
      Move configuration data from sheet to dialog controls
  
  Arguments:
  
      None
  
  Return Value:
  
      HRESULT
  
  --*/
  {
      CError err;
  
      BEGIN_META_INST_READ(CFtpSheet)
          FETCH_INST_DATA_FROM_SHEET(m_dwMaxBandwidth);
          ParseMaxNetworkUse(
              m_dwMaxBandwidth, 
              m_dwMaxBandwidthDisplay, 
              m_fLimitBandwidth
              );
      END_META_INST_READ(err)
  
      return err;
  }
  
  /* virtual */
  HRESULT
  CDefFtpSitePage::SaveInfo()
  /*++
  
  Routine Description:
  
      Save the information on this property page
  
  Arguments:
  
      None
  
  Return Value:
  
      Error return code
  
  --*/
  {
      ASSERT(IsDirty());
  
      TRACEEOLID("Saving Ftp default site page now...");
  
      CError err;
  
      BuildMaxNetworkUse(
          m_dwMaxBandwidth, 
          m_dwMaxBandwidthDisplay, 
          m_fLimitBandwidth
          );
      BeginWaitCursor();
  
      BEGIN_META_INST_WRITE(CFtpSheet)
          STORE_INST_DATA_ON_SHEET(m_dwMaxBandwidth);
      END_META_INST_WRITE(err)
  
      EndWaitCursor();
  
      return err;
  }
  
  BOOL
  CDefFtpSitePage::SetControlStates()
  {
      if (::IsWindow(m_LimitBandwidth.m_hWnd))
      {
          BOOL fLimitOn = m_LimitBandwidth.GetCheck() > 0
  //        && HasBwThrottling()
  //        && HasAdminAccess()
              ;
  
          m_MaxBandwidth.EnableWindow(fLimitOn);
          m_MaxBandwidthSpin.EnableWindow(fLimitOn);
          return fLimitOn;
      }
      return FALSE;
  }
  
  //
  // Message Map
  //
  BEGIN_MESSAGE_MAP(CDefFtpSitePage, CInetPropertyPage)
      //{{AFX_MSG_MAP(CW3PerfPage)
      ON_BN_CLICKED(IDC_CHECK_LIMIT_NETWORK_USE, OnCheckLimitNetworkUse)
      //}}AFX_MSG_MAP
      ON_EN_CHANGE(IDC_MAX_BANDWIDTH, OnItemChanged)
  END_MESSAGE_MAP()
  
  BOOL
  CDefFtpSitePage::OnInitDialog()
  {
     UDACCEL toAcc[3] = {{1, 1}, {3, 5}, {6, 10}};
  
     CInetPropertyPage::OnInitDialog();
     //
     // Disable some settings based on what's possible
     //
  #if 0
     m_LimitBandwidth.EnableWindow(
          !IsMasterInstance()
       && HasBwThrottling()
       && HasAdminAccess()
          );
  #endif
     SETUP_EDIT_SPIN(m_fLimitBandwidth, m_MaxBandwidth, m_MaxBandwidthSpin, 
        BANDWIDTH_MIN, BANDWIDTH_MAX, m_dwMaxBandwidthDisplay);
  
     SetControlStates();
  
     return TRUE;
  }
  
  void
  CDefFtpSitePage::OnItemChanged()
  {
      SetControlStates();
      SetModified(TRUE);
  }
  
  void
  CDefFtpSitePage::OnCheckLimitNetworkUse()
  {
      if (SetControlStates())
      {
          m_MaxBandwidth.SetSel(0, -1);
          m_MaxBandwidth.SetFocus();
      }
      OnItemChanged();
  }
  