DragonNest/Third/XTToolkitPro/Samples/Utilities/StylerBrowser/PageSearch.cpp
2024-12-19 09:48:26 +08:00

261 lines
5.9 KiB
C++

// pagesearch.cpp : implementation file
//
#include "stdafx.h"
#include "styler.h"
#include "pagesearch.h"
#include "MainFrm.h"
#include "ComboBoxSearch.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CPageSearch::CEngineArray CPageSearch::m_arrEngines;
/////////////////////////////////////////////////////////////////////////////
// CPageSearch property page
IMPLEMENT_DYNCREATE(CPageSearch, COptionsPage)
CPageSearch::CPageSearch() : COptionsPage(CPageSearch::IDD)
{
//{{AFX_DATA_INIT(CPageSearch)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CPageSearch::~CPageSearch()
{
}
void CPageSearch::DoDataExchange(CDataExchange* pDX)
{
COptionsPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPageSearch)
DDX_Control(pDX, IDC_LIST_SEARCH, m_wndSearch);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPageSearch, COptionsPage)
//{{AFX_MSG_MAP(CPageSearch)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
ON_BN_CLICKED(IDC_BUTTON_REMOVE, OnButtonRemove)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_SEARCH, OnDblclkListSearch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPageSearch message handlers
void CPageSearch::Load()
{
CString strPath = GetModuleDir();
TCHAR chReturn[255];
CString strSearch;
int nIndex = 0;
strSearch.Format(_T("S%i"), nIndex);
while (GetPrivateProfileString(_T("QuickSearch"), strSearch, _T(""), chReturn, 254, strPath + _T("QuickSearch.ini")) > 0)
{
ENGINE engine;
engine.strSearch = chReturn;
strSearch.Format(_T("N%i"), nIndex);
if (GetPrivateProfileString(_T("QuickSearch"), strSearch, _T(""), chReturn, 254, strPath + _T("QuickSearch.ini")) > 0)
engine.strKeyword = chReturn;
strSearch.Format(_T("T%i"), nIndex);
if (GetPrivateProfileString(_T("QuickSearch"), strSearch, _T(""), chReturn, 254, strPath + _T("QuickSearch.ini")) > 0)
engine.strTitle = chReturn; else engine.strTitle = engine.strKeyword;
if (!engine.strSearch.IsEmpty() && !engine.strTitle.IsEmpty())
{
m_arrEngines.Add(engine);
}
strSearch.Format(_T("S%i"), ++nIndex);
}
}
void CPageSearch::Save()
{
CString strPath = GetModuleDir();
CString str;
if (PathFileExists(strPath + _T("QuickSearch.ini")))
DeleteFile(strPath + _T("QuickSearch.ini"));
for (int i = 0; i < m_arrEngines.GetSize(); i++)
{
ENGINE& engine = m_arrEngines[i];
str.Format(_T("S%i"), i);
WritePrivateProfileString(_T("QuickSearch"), str, engine.strSearch, strPath + _T("QuickSearch.ini"));
str.Format(_T("N%i"), i);
WritePrivateProfileString(_T("QuickSearch"), str, engine.strKeyword, strPath + _T("QuickSearch.ini"));
str.Format(_T("T%i"), i);
WritePrivateProfileString(_T("QuickSearch"), str, engine.strTitle, strPath + _T("QuickSearch.ini"));
}
}
BOOL CPageSearch::OnInitDialog()
{
COptionsPage::OnInitDialog();
m_wndSearch.SetExtendedStyle(m_wndSearch.GetExtendedStyle() | LVS_EX_FULLROWSELECT);
m_wndSearch.InsertColumn(0, _T("Title"), LVCFMT_LEFT, 184);
m_wndSearch.InsertColumn(1, _T("Keyword"), LVCFMT_LEFT, 150);
RefreshList();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CPageSearch::RefreshList()
{
m_wndSearch.DeleteAllItems();
for (int i = 0; i < m_arrEngines.GetSize(); i++)
{
ENGINE& engine = m_arrEngines[i];
int nIndex = m_wndSearch.InsertItem(i, engine.strTitle);
m_wndSearch.SetItemText(nIndex, 1, engine.strKeyword);
m_wndSearch.SetItemData(nIndex, i);
}
CComboBoxSearch* pCombo = (CComboBoxSearch*) GetMainFrame()->GetCommandBars()->FindControl(xtpControlComboBox, ID_GOTO_SEARCH, FALSE, FALSE);
ASSERT(pCombo);
UpdateComboBox(pCombo);
}
void CPageSearch::OnButtonAdd()
{
ENGINE engine;
CSearchDialog sd(engine);
if (sd.DoModal() == IDOK)
{
if (sd.m_engine.strTitle != "" && sd.m_engine.strSearch != "")
{
m_arrEngines.Add(sd.m_engine);
RefreshList();
}
}
}
void CPageSearch::OnButtonEdit()
{
int nItem = m_wndSearch.GetNextItem(-1, LVNI_SELECTED);
if (nItem != -1)
{
int dwData = (int)m_wndSearch.GetItemData(nItem);
if (dwData >= 0 && dwData < m_arrEngines.GetSize())
{
ENGINE engine = m_arrEngines[dwData];
CSearchDialog sd(engine);
if (sd.DoModal() == IDOK)
{
if (sd.m_engine.strTitle != "" && sd.m_engine.strSearch != "")
{
m_arrEngines[dwData] = sd.m_engine;
RefreshList();
}
}
}
}
}
void CPageSearch::OnButtonRemove()
{
int nItem = m_wndSearch.GetNextItem(-1, LVNI_SELECTED);
if (nItem != -1)
{
int dwData = (int)m_wndSearch.GetItemData(nItem);
if (dwData >= 0 && dwData < m_arrEngines.GetSize())
{
m_arrEngines.RemoveAt(dwData);
RefreshList();
}
}
}
void CPageSearch::OnDblclkListSearch(NMHDR* /*pNMHDR*/, LRESULT* pResult)
{
OnButtonEdit();
*pResult = 0;
}
void CPageSearch::UpdateComboBox(CComboBoxSearch *pCombo)
{
pCombo->ResetContent();
CString strText = pCombo->GetEditText();
for (int i = 0; i < m_arrEngines.GetSize(); i++)
{
ENGINE& engine = m_arrEngines[i];
pCombo->AddString(engine.strTitle);
}
pCombo->SetCurSel(pCombo->m_nCurrentEngine);
if (!strText.IsEmpty()) pCombo->SetEditText(strText);
}
// SearchDialog
CSearchDialog::CSearchDialog(CPageSearch::ENGINE& engine, CWnd* pParent /*=NULL*/)
: CDialog(CSearchDialog::IDD, pParent)
{
m_engine = engine;
}
void CSearchDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSearchDialog)
//}}AFX_DATA_MAP
DDX_Text(pDX, IDC_EDIT_TITLE, m_engine.strTitle);
DDX_Text(pDX, IDC_EDIT_SEARCH, m_engine.strSearch);
DDX_Text(pDX, IDC_EDIT_KEYWORD, m_engine.strKeyword);
}
void CSearchDialog::OnOK()
{
UpdateData();
if(m_engine.strSearch.Find(_T("%s")) < 0)
{
AfxMessageBox(IDS_NEEDKEYSTRING);
return;
}
CDialog::OnOK();
}
BEGIN_MESSAGE_MAP(CSearchDialog, CDialog)
//{{AFX_MSG_MAP(CSearchDialog)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()