/**
/* Copyright (c) 2003by Marco Welti
/*
/* This document is bound by the QT Public License
/* (http://www.trolltech.com/licenses/qpl.html).
/* See License.txt for more information.
/*
/*
/*
/* ALL RIGHTS RESERVED.
/*
/* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
/* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
/* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
/* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
/* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
/* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
/* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
/* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
/* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/*
/***********************************************************************/
// BeSweetPreferencesPanel.cpp : implementation file
//
#include "stdafx.h"
#include "esbdsaddin.h"
#include "besweetpreferencespanel.h"
#include <Utilities/StringTokenizer.h>
#include <list>
#include <sstream>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// BeSweetPreferencesPanel dialog
const char BESWEET_REG_KEY[] = "software\\Ciderware\\BeSweet\\vsaddin";
const char ENABLE_REG_VALUE_KEY[] = "enabled";
const char MODE_REG_VALUE_KEY[] = "outputmode";
BeSweetPreferencesPanel::BeSweetPreferencesPanel(CWnd* pParent /*=NULL*/)
: CDialog(BeSweetPreferencesPanel::IDD, pParent)
{
//{{AFX_DATA_INIT(BeSweetPreferencesPanel)
//}}AFX_DATA_INIT
if(CRegKey().Open(HKEY_CURRENT_USER, BESWEET_REG_KEY) != ERROR_SUCCESS ){
createProperties();
}
loadProperties();
}
void BeSweetPreferencesPanel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(BeSweetPreferencesPanel)
DDX_Control(pDX, IDC_WORKSPACE, mWorkspaceCtrl);
DDX_Check(pDX, IDC_ENABLE, mProperties.isEnabled);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(BeSweetPreferencesPanel, CDialog)
//{{AFX_MSG_MAP(BeSweetPreferencesPanel)
ON_BN_CLICKED(IDCANCEL, onCancel)
ON_BN_CLICKED(IDOK, onOk)
ON_BN_CLICKED(IDC_RELOAD, onReload)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// BeSweetPreferencesPanel message handlers
/////////////////////////////////////////////////////////////////////////////
// BeSweetPreferencesPanel dialog
bool BeSweetPreferencesPanel::enabled() const
{
return mProperties.isEnabled;
}
void BeSweetPreferencesPanel::enabled(bool b)
{
mProperties.isEnabled = b;
}
const std::string& BeSweetPreferencesPanel::getWorkspace() const
{
return mProperties.workspace;
}
void BeSweetPreferencesPanel::setWorkspace(const std::string &wspace)
{
mProperties.workspace = wspace;
}
const std::string& BeSweetPreferencesPanel::getOptions() const
{
return mProperties.options;
}
void BeSweetPreferencesPanel::setOptions(const std::string &options)
{
mProperties.options = options;
}
BOOL BeSweetPreferencesPanel::OnInitDialog()
{
loadProperties();
CDialog::OnInitDialog();
renderWorkspace();
if(mProperties.workspace.empty() || mProperties.options.empty()) {
GetDlgItem(IDC_RELOAD)->EnableWindow(FALSE);
}
mDoReload = false;
CheckRadioButton(IDC_MODE_SILENT, IDC_MODE_VERBOSE, mProperties.mode + IDC_MODE_SILENT);
return TRUE;
}
void BeSweetPreferencesPanel::renderWorkspace()
{
if(m_hWnd) {
mWorkspaceCtrl.SetRedraw(false);
mWorkspaceCtrl.DeleteAllItems();
if(!mProperties.workspace.empty()) {
HTREEITEM root = mWorkspaceCtrl.InsertItem(mProperties.workspace.c_str());
list<string> options = StringListTokenizer(mProperties.options, ";").tokens();
for(list<string>::iterator option = options.begin(); option != options.end(); ++option) {
mWorkspaceCtrl.InsertItem(option->c_str(), root);
}
mWorkspaceCtrl.Expand(root, TVE_EXPAND);
} else {
mWorkspaceCtrl.InsertItem("no workspace loaded");
}
mWorkspaceCtrl.SetRedraw(true);
}
}
void BeSweetPreferencesPanel::onCancel()
{
mProperties = mOldProperties;
CDialog::OnCancel();
}
void BeSweetPreferencesPanel::onOk()
{
UpdateData(true);
mProperties.mode = GetCheckedRadioButton(IDC_MODE_SILENT, IDC_MODE_VERBOSE)-IDC_MODE_SILENT;
saveProperties();
CDialog::OnOK();
}
void BeSweetPreferencesPanel::onReload()
{
mDoReload = true;
}
void BeSweetPreferencesPanel::loadProperties()
{
CRegKey root;
root.Open(HKEY_CURRENT_USER, BESWEET_REG_KEY);
DWORD dw;
root.QueryValue(dw, ENABLE_REG_VALUE_KEY);
mProperties.isEnabled = dw;
root.QueryValue(dw, MODE_REG_VALUE_KEY);
mProperties.mode = dw;
mOldProperties = mProperties;
}
void BeSweetPreferencesPanel::saveProperties()
{
CRegKey root;
root.Open(HKEY_CURRENT_USER, BESWEET_REG_KEY);
//stringstream ss;
//ss << "Dump properties" << " enable is " << mProperties.isEnabled << endl;
//AfxMessageBox(ss.str().c_str());
root.SetValue(mProperties.isEnabled, ENABLE_REG_VALUE_KEY);
root.SetValue(mProperties.mode, MODE_REG_VALUE_KEY);
mOldProperties = mProperties;
}
void BeSweetPreferencesPanel::createProperties()
{
CRegKey root;
if(root.Create(HKEY_CURRENT_USER, BESWEET_REG_KEY) != ERROR_SUCCESS) {
string text = "could not create registry key " + string(BESWEET_REG_KEY) + " in current-user";
::MessageBox(NULL, text.c_str(), "Be Sweet", MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST);
throw runtime_error(text);
}
root.SetValue((DWORD)1, ENABLE_REG_VALUE_KEY);
root.SetValue((DWORD)1, MODE_REG_VALUE_KEY);
}