📄 donutoptions.h
字号:
CDLControlOption::s_dwDLControlFlags |= DLCTL_NO_SCRIPTS;
if (m_nJava == 0)
CDLControlOption::s_dwDLControlFlags |= DLCTL_NO_JAVA;
if (m_nMozilla == 1)
_bMozilla = true;
else
_bMozilla = false;
if (m_nNaviLock == 1)
_bNaviLock = true;
else
_bNaviLock = false;
}
void _SetData()
{
m_nBGSounds = CDLControlOption::s_dwDLControlFlags & DLCTL_BGSOUNDS ? 1 : 0;
m_nVideos = CDLControlOption::s_dwDLControlFlags & DLCTL_VIDEOS ? 1 : 0;
m_nDLImages = CDLControlOption::s_dwDLControlFlags & DLCTL_DLIMAGES ? 1 : 0;
m_nRunActiveXCtls = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_RUNACTIVEXCTLS ? 0 : 1;
m_nDLActiveXCtls = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_DLACTIVEXCTLS ? 0 : 1;
m_nScripts = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_SCRIPTS ? 0 : 1;
m_nJava = CDLControlOption::s_dwDLControlFlags & DLCTL_NO_JAVA ? 0 : 1;
m_nMozilla = _bMozilla ? 1 : 0;
m_nNaviLock = _bNaviLock ? 1 : 0;
}
};
class CIgnoredURLsOption
{
public:
typedef std::list<CString> CStringList;
static CStringList* s_pIgnoredURLs;
static bool s_bValid;
static void GetProfile()
{
CIniSection pr;
pr.Open(_szIniFileName, _T("IgnoredURLs"));
s_pIgnoredURLs = new CStringList;
MtlGetProfileString(pr, std::back_inserter(*s_pIgnoredURLs), _T("url"));
DWORD dwValid;
LONG lRet = pr.QueryValue(dwValid, _T("IsValid"));
if (lRet == ERROR_SUCCESS)
s_bValid = (dwValid == 1);
pr.Close();
}
static void WriteProfile()
{
CIniSection pr;
MtlIniDeleteSection(_szIniFileName, _T("IgnoredURLs"));// clean up
pr.Open(_szIniFileName, _T("IgnoredURLs"));
MtlWriteProfileString(s_pIgnoredURLs->begin(), s_pIgnoredURLs->end(), pr, _T("url"));
pr.SetValue(s_bValid == true ? 1 : 0, _T("IsValid"));
pr.Close();
delete s_pIgnoredURLs;
}
static bool SearchString(const CString& strURL)
{
ATLASSERT(s_pIgnoredURLs != NULL);
if (!s_bValid)// allways can't found
return false;
return MtlSearchStringWildCard(s_pIgnoredURLs->begin(), s_pIgnoredURLs->end(), strURL);
}
static void Add(const CString& strURL)
{
if (!SearchString(strURL))
s_pIgnoredURLs->push_back(strURL);
}
};
__declspec(selectany) CIgnoredURLsOption::CStringList* CIgnoredURLsOption::s_pIgnoredURLs = NULL;
__declspec(selectany) bool CIgnoredURLsOption::s_bValid = true;
class CIgnoredURLsPropertyPage : public CPropertyPageImpl<CIgnoredURLsPropertyPage>,
public CWinDataExchange<CIgnoredURLsPropertyPage>
{
public:
// Declarations
enum { IDD = IDD_PROPPAGE_IGNOREDURLS };
// Data members
CIgnoredURLsOption::CStringList m_urls;
CString m_strAddressBar;
CListBox m_listbox;
CEdit m_edit;
int m_nValid;
// Constructor
CIgnoredURLsPropertyPage(const CString& strAddressBar)
: m_urls(*CIgnoredURLsOption::s_pIgnoredURLs), m_strAddressBar(strAddressBar)
{
m_urls.sort();
m_nValid = CIgnoredURLsOption::s_bValid ? 1 : 0;
}
// DDX map
BEGIN_DDX_MAP(CDLControlPropertyPage)
DDX_CHECK(IDC_IGNORED_URL_VALID, m_nValid)
END_DDX_MAP()
// Overrides
BOOL OnSetActive()
{
SetModified(TRUE);
return _DoDataExchange(FALSE);
}
BOOL OnKillActive()
{
return _DoDataExchange(TRUE);
}
BOOL OnApply()
{
if (_DoDataExchange(TRUE)) {
_GetData();
return TRUE;
}
else
return FALSE;
}
// overrides
BOOL _DoDataExchange(BOOL bSaveAndValidate)// get data from controls?
{
if (!bSaveAndValidate) {// set data of control
m_listbox.Attach(GetDlgItem(IDC_IGNORED_URL_LIST));
m_listbox.ResetContent();
std::for_each(m_urls.begin(), m_urls.end(), _AddToListBox(m_listbox));
m_edit.Attach(GetDlgItem(IDC_URL_EDIT));
m_edit.SetWindowText(m_strAddressBar);
}
return DoDataExchange(bSaveAndValidate);
}
// Message map and handlers
BEGIN_MSG_MAP(CIgnoredURLsPropertyPage)
COMMAND_ID_HANDLER_EX(IDC_ADD_BUTTON, OnAddCmd)
COMMAND_ID_HANDLER_EX(IDC_DELALL_BUTTON,OnDelAllCmd)
COMMAND_ID_HANDLER_EX(IDC_DEL_BUTTON, OnDelCmd)
COMMAND_HANDLER_EX(IDC_IGNORED_URL_LIST, LBN_SELCHANGE, OnSelChange)
CHAIN_MSG_MAP(CPropertyPageImpl<CIgnoredURLsPropertyPage>)
END_MSG_MAP()
void OnDelCmd(UINT /*wNotifyCode*/, int /*wID*/, HWND /*hWndCtl*/)
{
int nIndex = m_listbox.GetCurSel();
if (nIndex == LB_ERR)
return;
m_listbox.DeleteString(nIndex);
CIgnoredURLsOption::CStringList::iterator it = m_urls.begin();
std::advance(it, nIndex);
m_urls.erase(it);
}
void OnDelAllCmd(UINT /*wNotifyCode*/, int /*wID*/, HWND /*hWndCtl*/)
{
m_listbox.ResetContent();
m_urls.clear();
}
void OnAddCmd(UINT /*wNotifyCode*/, int /*wID*/, HWND /*hWndCtl*/)
{
TCHAR szEdit[MAX_PATH];
if (m_edit.GetWindowText(szEdit, MAX_PATH) == 0)
return;
CIgnoredURLsOption::CStringList::iterator it = std::find(m_urls.begin(), m_urls.end(), szEdit);
if (it == m_urls.end()) {
m_listbox.AddString(szEdit);
m_urls.push_back(szEdit);
}
else {
#ifdef __SGI_STL_INTERNAL_ITERATOR_BASE_H
int n = 0;
std::distance(m_urls.begin(), it, n);
m_listbox.SetCurSel(n);
#else
m_listbox.SetCurSel(std::distance(m_urls.begin(), it));
#endif
}
}
void OnSelChange(UINT code, int id, HWND hWnd)
{
int nIndex = m_listbox.GetCurSel();
CString strBox;
m_listbox.GetText(nIndex, strBox);
m_edit.SetWindowText(strBox);
}
// Implementation
private:
// function objects
struct _AddToListBox : public std::unary_function<const CString&, void>
{
CListBox& _box;
_AddToListBox(CListBox& box) : _box(box) { }
result_type operator()(argument_type src)
{
_box.AddString(src);
}
};
void _GetData()
{
// update ignored urls list
*CIgnoredURLsOption::s_pIgnoredURLs = m_urls;
CIgnoredURLsOption::s_bValid = m_nValid == 1 ? true : false;
}
};
#define DVS_AUTOREFRESH_15SEC 0x00000001L
#define DVS_AUTOREFRESH_30SEC 0x00000002L
#define DVS_AUTOREFRESH_1MIN 0x00000004L
#define DVS_AUTOREFRESH_2MIN 0x00000008L
#define DVS_AUTOREFRESH_5MIN 0x00000010L
#define DVS_EX_OPENNEWWIN 0x00000001L
template <class _DonutView>
class CDonutViewOption
{
public:
DWORD m_dwAutoRefreshStyle;
DWORD m_dwExStyle;
CString m_strURL;
_DonutView* __m_pDonutView;
UINT m_nIDEvent;
CDonutViewOption(_DonutView* __pDonutView)
: __m_pDonutView(__pDonutView), m_nIDEvent(0),
m_dwAutoRefreshStyle(0), m_dwExStyle(0)
{
m_nIDEvent = 0;
}
void Init()
{
_SetTimer();
}
void Uninit()
{
_KillTimer();
}
// Message map and handlers
BEGIN_MSG_MAP(CDonutViewOption)
COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_NONE, OnAutoRefreshNone)
COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_15SEC, OnAutoRefresh15sec)
COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_30SEC, OnAutoRefresh30sec)
COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_1MIN, OnAutoRefresh1min)
COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_2MIN, OnAutoRefresh2min)
COMMAND_ID_HANDLER_EX(ID_AUTOREFRESH_5MIN, OnAutoRefresh5min)
// COMMAND_ID_HANDLER_EX(ID_DOCHOSTUI_OPENNEWWIN, OnDocHostUIOpenNewWin)
MSG_WM_TIMER(OnTimer)
END_MSG_MAP()
void OnDocHostUIOpenNewWin(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
if (m_dwExStyle & DVS_EX_OPENNEWWIN) {
m_dwExStyle &= ~DVS_EX_OPENNEWWIN;
// __m_pDonutView->_DocHostUIOpenNewWin(false);
}
else {
m_dwExStyle |= DVS_EX_OPENNEWWIN;
// __m_pDonutView->_DocHostUIOpenNewWin(true);
}
}
void OnAutoRefreshNone(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
m_dwAutoRefreshStyle = 0;
_KillTimer();
}
void OnAutoRefresh15sec(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
m_dwAutoRefreshStyle = 0;
m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_15SEC;
_KillTimer();
_SetTimer();
}
void OnAutoRefresh30sec(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
m_dwAutoRefreshStyle = 0;
m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_30SEC;
_KillTimer();
_SetTimer();
}
void OnAutoRefresh1min(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
m_dwAutoRefreshStyle = 0;
m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_1MIN;
_KillTimer();
_SetTimer();
}
void OnAutoRefresh2min(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
m_dwAutoRefreshStyle = 0;
m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_2MIN;
_KillTimer();
_SetTimer();
}
void OnAutoRefresh5min(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/)
{
m_dwAutoRefreshStyle = 0;
m_dwAutoRefreshStyle |= DVS_AUTOREFRESH_5MIN;
_KillTimer();
_SetTimer();
}
void OnTimer(UINT wTimerID, TIMERPROC*)
{
ATLTRACE2(atlTraceUser, 4, _T("CChildFrame::OnTimer\n"));
if (wTimerID == m_nIDEvent)
::PostMessage(__m_pDonutView->GetParent(), WM_COMMAND, (WPARAM)ID_VIEW_REFRESH, 0);
// __m_pDonutView->m_spBrowser->Refresh();
else
SetMsgHandled(FALSE);
}
int _GetElapse()
{
if (m_dwAutoRefreshStyle == 0)
return -1;
else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_15SEC)
return 15*1000;
else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_30SEC)
return 30*1000;
else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_1MIN)
return 1*60*1000;
else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_2MIN)
return 2*60*1000;
else if (m_dwAutoRefreshStyle & DVS_AUTOREFRESH_5MIN)
return 5*60*1000;
return -1;
}
void _KillTimer()
{
if (m_nIDEvent != 0) {
MTLVERIFY(::KillTimer(__m_pDonutView->m_hWnd, m_nIDEvent));
m_nIDEvent = 0;
}
}
void _SetTimer()
{
int nElapse = _GetElapse();
if (nElapse != -1)
m_nIDEvent = ::SetTimer(__m_pDonutView->m_hWnd, 1, _GetElapse(), NULL);
}
void WriteProfile(const CString& strFileName, int nIndex)
{
CIniSection pr;
CString strSectionName = _T("Window");
strSectionName.Append(nIndex);
pr.Open(strFileName, strSectionName);
pr.SetValue(__m_pDonutView->GetLocationURL(), _T("Location_URL"));
pr.SetValue(__m_pDonutView->GetDLControlFlags(), _T("DL_Control_Flags"));
pr.SetValue(m_dwAutoRefreshStyle, _T("Auto_Refresh_Style"));
MtlWriteProfileChildFrameState(pr, __m_pDonutView->GetParent(), _T("child."));
// save extended style
pr.SetValue(m_dwExStyle, _T("Extended_Style"));
pr.Close();
}
void GetProfile(const CString& strFileName, int nIndex, bool bGetChildFrameState)
{
CIniSection pr;
CString strSectionName = _T("Window");
strSectionName.Append(nIndex);
pr.Open(strFileName, strSectionName);
DWORD dwDLControlFlags = DLCTL_DEFAULT;
if (pr.QueryValue(dwDLControlFlags, _T("DL_Control_Flags")) == ERROR_SUCCESS)
__m_pDonutView->PutDLControlFlags(dwDLControlFlags);
TCHAR sz[INTERNET_MAX_PATH_LENGTH];
DWORD dwBytes = INTERNET_MAX_PATH_LENGTH;
if (pr.QueryValue(sz, _T("Location_URL"), &dwBytes) == ERROR_SUCCESS) {
// avoid endless loop
CString strURL(sz);
bool bMaybeEndless = (strURL == _T("javascript:location.reload()"));
if (!bMaybeEndless)
__m_pDonutView->Navigate2(sz);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -