base
This commit is contained in:
@@ -0,0 +1,248 @@
|
||||
// Options.cpp: Implementierungsdatei
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "afxmt.h"
|
||||
#include "ConsoleApp.h"
|
||||
|
||||
#include "Options.h"
|
||||
#include "MarkupSTL.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
bool COptions::m_bInitialized = false;
|
||||
CString COptions::m_sConfigFile = "";
|
||||
CCriticalSection COptions::m_csSync;
|
||||
CMarkupSTL COptions::m_markup;
|
||||
|
||||
COptions::OPTIONCACHE_STRUCT COptions::m_aoc[OPTIONS_NUM];
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Dialogfeld COptions
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TCHAR szName[35];
|
||||
int type;
|
||||
} OPTION_STRUCT;
|
||||
|
||||
static OPTION_STRUCT g_aopt[OPTIONS_NUM] = {
|
||||
_T("Windows Position"), 0, _T("Splitter Size"), 0,
|
||||
_T("Remote Tree Size"), 1, _T("Local Tree Size"), 1,
|
||||
_T("Show Remote Tree"), 1, _T("Show Local Tree"), 1,
|
||||
_T("Remote List Style"), 1, _T("Local List Style"), 1,
|
||||
_T("Show Remote Status"), 1, _T("Show Local Status"), 1,
|
||||
_T("Remote Column Widths"), 0, _T("Local Column Widths"), 0,
|
||||
_T("Remote Column Sort"), 1, _T("Local Column Sort"), 1,
|
||||
_T("Show Top Toolbar"), 1, _T("Show Mid Toolbar"), 1,
|
||||
_T("User ID"), 0, _T("Password"), 0,
|
||||
_T("Auto Connect"), 1, _T("Save Password"), 1,
|
||||
_T("File Exists Action"), 1,
|
||||
_T("After Execution"), 1,
|
||||
_T("Search Sub Url"), 1, _T("Url Tag Type"), 1,
|
||||
_T("Url Start Tag"), 0, _T("Url End Tag"), 0,
|
||||
_T("Proxy Host"), 0, _T("Proxy Port"), 0,
|
||||
_T("Use IE Proxy"), 1, _T("Write Policy"), 1
|
||||
};
|
||||
|
||||
|
||||
void COptions::SetOption(int nOptionID,int nValue)
|
||||
{
|
||||
ASSERT(g_aopt[(OPTION_TYPE)nOptionID].type == OT_NUMBER);
|
||||
|
||||
CSingleLock lock(&m_csSync, TRUE);
|
||||
|
||||
m_aoc[nOptionID].bCached = true;
|
||||
m_aoc[nOptionID].type = OT_NUMBER;
|
||||
m_aoc[nOptionID].nValue = nValue;
|
||||
|
||||
m_markup.ResetPos();
|
||||
if (!m_markup.FindChildElem(_T("Settings")))
|
||||
m_markup.AddChildElem(_T("Settings"));
|
||||
|
||||
CString sValue;
|
||||
sValue.Format(_T("%d"), nValue);
|
||||
|
||||
m_markup.IntoElem();
|
||||
BOOL bRet = m_markup.FindChildElem();
|
||||
while (bRet) {
|
||||
CString sName = m_markup.GetChildAttrib( _T("name"));
|
||||
|
||||
if (_tcscmp(sName, g_aopt[nOptionID].szName) == 0) {
|
||||
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
|
||||
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
|
||||
m_markup.SetChildData(sValue);
|
||||
break;
|
||||
}
|
||||
|
||||
bRet = m_markup.FindChildElem();
|
||||
}
|
||||
|
||||
if (!bRet) {
|
||||
m_markup.InsertChildElem(_T("Item"), sValue);
|
||||
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
|
||||
m_markup.SetChildAttrib(_T("type"), _T("numeric"));
|
||||
}
|
||||
|
||||
m_markup.Save(m_sConfigFile);
|
||||
}
|
||||
|
||||
void COptions::SetOption(int nOptionID, CString sValue)
|
||||
{
|
||||
ASSERT((OPTION_TYPE)g_aopt[nOptionID].type == OT_STRING);
|
||||
|
||||
CSingleLock lock(&m_csSync, TRUE);
|
||||
|
||||
m_aoc[nOptionID].bCached = true;
|
||||
m_aoc[nOptionID].type = OT_STRING;
|
||||
m_aoc[nOptionID].sValue = sValue;
|
||||
|
||||
m_markup.ResetPos();
|
||||
if (!m_markup.FindChildElem(_T("Settings")))
|
||||
m_markup.AddChildElem(_T("Settings"));
|
||||
|
||||
m_markup.IntoElem();
|
||||
|
||||
CString sTag;
|
||||
sTag = m_markup.GetTagName();
|
||||
|
||||
BOOL bRet = m_markup.FindChildElem();
|
||||
while (bRet) {
|
||||
CString sName = m_markup.GetChildAttrib(_T("name"));
|
||||
if (_tcscmp(sName, g_aopt[nOptionID].szName) == 0) {
|
||||
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
|
||||
m_markup.SetChildAttrib(_T("type"), _T("string"));
|
||||
m_markup.SetChildData(sValue);
|
||||
break;
|
||||
}
|
||||
|
||||
bRet = m_markup.FindChildElem();
|
||||
}
|
||||
|
||||
if (!bRet) {
|
||||
m_markup.InsertChildElem(_T("Item"), sValue);
|
||||
m_markup.SetChildAttrib(_T("name"), g_aopt[nOptionID].szName);
|
||||
m_markup.SetChildAttrib(_T("type"), _T("string"));
|
||||
}
|
||||
|
||||
m_markup.Save(m_sConfigFile);
|
||||
}
|
||||
|
||||
int COptions::GetOptionVal(int nOptionID)
|
||||
{
|
||||
ASSERT((OPTION_TYPE)g_aopt[nOptionID].type == OT_NUMBER);
|
||||
|
||||
CSingleLock lock(&m_csSync, TRUE);
|
||||
|
||||
int nResult = m_aoc[nOptionID].nValue;
|
||||
if (!m_aoc[nOptionID].bCached) {
|
||||
switch (nOptionID) {
|
||||
case OPTION_SHOWTOPTOOLBAR:
|
||||
case OPTION_SHOWMIDTOOLBAR:
|
||||
nResult = 1;
|
||||
break;
|
||||
case OPTION_SHOWLOCALTREE:
|
||||
case OPTION_SHOWREMOTETREE:
|
||||
nResult = 1;
|
||||
break;
|
||||
case OPTION_SHOWLOCALSTATUS:
|
||||
case OPTION_SHOWREMOTESTATUS:
|
||||
nResult = 1;
|
||||
break;
|
||||
case OPTION_LOCALTREESIZE:
|
||||
case OPTION_REMOTETREESIZE:
|
||||
nResult = 300;
|
||||
break;
|
||||
case OPTION_LOCALLISTSTYLE:
|
||||
case OPTION_REMOTELISTSTYLE:
|
||||
nResult = 4;
|
||||
break;
|
||||
case OPTION_USEIEPROXY:
|
||||
case OPTION_SEARCHSUBURL:
|
||||
nResult = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return nResult;
|
||||
}
|
||||
|
||||
CString COptions::GetOption(int nOptionID)
|
||||
{
|
||||
ASSERT((OPTION_TYPE)g_aopt[nOptionID].type == OT_STRING);
|
||||
|
||||
CSingleLock lock(&m_csSync, TRUE);
|
||||
|
||||
CString sResult = m_aoc[nOptionID].sValue;
|
||||
if (!m_aoc[nOptionID].bCached) {
|
||||
// if (nOptionID == OPTION_URLDIVIDER)
|
||||
// sResult = _T("|");
|
||||
}
|
||||
|
||||
return sResult;
|
||||
}
|
||||
|
||||
bool COptions::Init(LPCTSTR pszConfigFile)
|
||||
{
|
||||
CSingleLock lock(&m_csSync, TRUE);
|
||||
|
||||
if (m_bInitialized)
|
||||
return true;
|
||||
|
||||
m_sConfigFile = pszConfigFile;
|
||||
|
||||
m_bInitialized = true;
|
||||
|
||||
for (int i = 0; i < OPTIONS_NUM; i++)
|
||||
m_aoc[i].bCached = false;
|
||||
|
||||
CFileStatus64 fs;
|
||||
if (!GetStatus64(m_sConfigFile, fs) || fs.m_size <= 45) {
|
||||
m_markup.AddElem(_T(APP_TITLE));
|
||||
m_markup.Save(m_sConfigFile);
|
||||
}
|
||||
else if (fs.m_attribute & FILE_ATTRIBUTE_DIRECTORY)
|
||||
return false;
|
||||
|
||||
if (!m_markup.Load(m_sConfigFile))
|
||||
return false;
|
||||
|
||||
if (!m_markup.FindElem(_T(APP_TITLE)))
|
||||
return false;
|
||||
|
||||
if (!m_markup.FindChildElem(_T("Settings")))
|
||||
m_markup.AddChildElem(_T("Settings"));
|
||||
|
||||
CString sTag;
|
||||
|
||||
m_markup.IntoElem();
|
||||
sTag = m_markup.GetTagName();
|
||||
while (m_markup.FindChildElem()) {
|
||||
CString sValue = m_markup.GetChildData();
|
||||
CString sName = m_markup.GetChildAttrib(_T("name"));
|
||||
CString sType = m_markup.GetChildAttrib(_T("type"));
|
||||
|
||||
for (int i = 0;i < OPTIONS_NUM; i++) {
|
||||
if (_tcscmp(sName, g_aopt[i].szName) == 0) {
|
||||
m_aoc[i].bCached = true;
|
||||
if (sType == "numeric") {
|
||||
m_aoc[i].type = OT_NUMBER;
|
||||
m_aoc[i].nValue = _ttoi(sValue);
|
||||
}
|
||||
else {
|
||||
if (sType != "string")
|
||||
::AfxTrace( _T("Unknown option type '%s' for item '%s', assuming string\n"), sType, sName);
|
||||
m_aoc[i].type = OT_STRING;
|
||||
m_aoc[i].sValue = sValue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user