Added theme metrics analysis
Working on metrics editor
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
// ColorListBox.cpp : implementation file
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
// CColorListBox class -
|
||||
// A CListBox-derived class with optional colored items.
|
||||
//
|
||||
// Version: 1.0 01/10/1998 Copyright © Patrice Godard
|
||||
//
|
||||
// Version: 2.0 09/17/1999 Copyright © Paul M. Meidinger
|
||||
//
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "ColorListBox.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CColorListBox
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
CColorListBox::CColorListBox()
|
||||
//
|
||||
// Return Value: None.
|
||||
//
|
||||
// Parameters : None.
|
||||
//
|
||||
// Remarks : Standard constructor.
|
||||
//
|
||||
{
|
||||
} // CColorListBox
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
CColorListBox::~CColorListBox()
|
||||
//
|
||||
// Return Value: None.
|
||||
//
|
||||
// Parameters : None.
|
||||
//
|
||||
// Remarks : Destructor.
|
||||
//
|
||||
{
|
||||
} // ~CColorListBox()
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CColorListBox, CListBox)
|
||||
//{{AFX_MSG_MAP(CColorListBox)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CColorListBox message handlers
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
void CColorListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS)
|
||||
//
|
||||
// Return Value: None.
|
||||
//
|
||||
// Parameters : lpDIS - A long pointer to a DRAWITEMSTRUCT structure
|
||||
// that contains information about the type of drawing required.
|
||||
//
|
||||
// Remarks : Called by the framework when a visual aspect of
|
||||
// an owner-draw list box changes.
|
||||
//
|
||||
{
|
||||
if ((int)lpDIS->itemID < 0)
|
||||
return;
|
||||
|
||||
CDC* pDC = CDC::FromHandle(lpDIS->hDC);
|
||||
|
||||
COLORREF crText;
|
||||
CString sText;
|
||||
COLORREF crNorm = (COLORREF)lpDIS->itemData; // Color information is in item data.
|
||||
COLORREF crHilite = RGB(255-GetRValue(crNorm), 255-GetGValue(crNorm), 255-GetBValue(crNorm));
|
||||
|
||||
// If item has been selected, draw the highlight rectangle using the item's color.
|
||||
if ((lpDIS->itemState & ODS_SELECTED) &&
|
||||
(lpDIS->itemAction & (ODA_SELECT | ODA_DRAWENTIRE)))
|
||||
{
|
||||
CBrush brush(crNorm);
|
||||
pDC->FillRect(&lpDIS->rcItem, &brush);
|
||||
}
|
||||
|
||||
// If item has been deselected, draw the rectangle using the window color.
|
||||
if (!(lpDIS->itemState & ODS_SELECTED) && (lpDIS->itemAction & ODA_SELECT))
|
||||
{
|
||||
CBrush brush(::GetSysColor(COLOR_WINDOW));
|
||||
pDC->FillRect(&lpDIS->rcItem, &brush);
|
||||
}
|
||||
|
||||
// If item has focus, draw the focus rect.
|
||||
if ((lpDIS->itemAction & ODA_FOCUS) && (lpDIS->itemState & ODS_FOCUS))
|
||||
pDC->DrawFocusRect(&lpDIS->rcItem);
|
||||
|
||||
// If item does not have focus, redraw (erase) the focus rect.
|
||||
if ((lpDIS->itemAction & ODA_FOCUS) && !(lpDIS->itemState & ODS_FOCUS))
|
||||
pDC->DrawFocusRect(&lpDIS->rcItem);
|
||||
|
||||
|
||||
// Set the background mode to TRANSPARENT to draw the text.
|
||||
int nBkMode = pDC->SetBkMode(TRANSPARENT);
|
||||
|
||||
// If the item's color information is set, use the highlight color
|
||||
// gray text color, or normal color for the text.
|
||||
if (lpDIS->itemData)
|
||||
{
|
||||
if (lpDIS->itemState & ODS_SELECTED)
|
||||
crText = pDC->SetTextColor(crHilite);
|
||||
else if (lpDIS->itemState & ODS_DISABLED)
|
||||
crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
|
||||
else
|
||||
crText = pDC->SetTextColor(crNorm);
|
||||
}
|
||||
// Else the item's color information is not set, so use the
|
||||
// system colors for the text.
|
||||
else
|
||||
{
|
||||
if (lpDIS->itemState & ODS_SELECTED)
|
||||
crText = pDC->SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
|
||||
else if (lpDIS->itemState & ODS_DISABLED)
|
||||
crText = pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));
|
||||
else
|
||||
crText = pDC->SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
|
||||
}
|
||||
|
||||
|
||||
// Get and display item text.
|
||||
GetText(lpDIS->itemID, sText);
|
||||
CRect rect = lpDIS->rcItem;
|
||||
|
||||
// Setup the text format.
|
||||
UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;
|
||||
if (GetStyle() & LBS_USETABSTOPS)
|
||||
nFormat |= DT_EXPANDTABS;
|
||||
|
||||
// Calculate the rectangle size before drawing the text.
|
||||
pDC->DrawText(sText, -1, &rect, nFormat | DT_CALCRECT);
|
||||
pDC->DrawText(sText, -1, &rect, nFormat);
|
||||
|
||||
pDC->SetTextColor(crText);
|
||||
pDC->SetBkMode(nBkMode);
|
||||
} // DrawItem
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
void CColorListBox::MeasureItem(LPMEASUREITEMSTRUCT lpMIS)
|
||||
//
|
||||
// Return Value: None.
|
||||
//
|
||||
// Parameters : lpMIS - A long pointer to a
|
||||
// MEASUREITEMSTRUCT structure.
|
||||
//
|
||||
// Remarks : Called by the framework when a list box with
|
||||
// an owner-draw style is created.
|
||||
//
|
||||
{
|
||||
// ### Is the default list box item height the same as
|
||||
// the menu check height???
|
||||
lpMIS->itemHeight = ::GetSystemMetrics(SM_CYMENUCHECK);
|
||||
} // MeasureItem
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
int CColorListBox::AddString(LPCTSTR lpszItem)
|
||||
//
|
||||
// Return Value: The zero-based index to the string in the list box.
|
||||
// The return value is LB_ERR if an error occurs; the
|
||||
// return value is LB_ERRSPACE if insufficient space
|
||||
// is available to store the new string.
|
||||
//
|
||||
// Parameters : lpszItem - Points to the null-terminated
|
||||
// string that is to be added.
|
||||
//
|
||||
// Remarks : Call this member function to add a string to a list
|
||||
// box. Provided because CListBox::AddString is NOT
|
||||
// a virtual function.
|
||||
//
|
||||
{
|
||||
return ((CListBox*)this)->AddString(lpszItem);
|
||||
} // AddString
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
int CColorListBox::AddString(LPCTSTR lpszItem, COLORREF rgb)
|
||||
//
|
||||
// Return Value: The zero-based index to the string in the list box.
|
||||
// The return value is LB_ERR if an error occurs; the
|
||||
// return value is LB_ERRSPACE if insufficient space
|
||||
// is available to store the new string.
|
||||
//
|
||||
// Parameters : lpszItem - Points to the null-terminated
|
||||
// string that is to be added.
|
||||
// rgb - Specifies the color to be associated with the item.
|
||||
//
|
||||
// Remarks : Call this member function to add a string to a list
|
||||
// box with a custom color.
|
||||
//
|
||||
{
|
||||
int nItem = AddString(lpszItem);
|
||||
if (nItem >= 0)
|
||||
SetItemData(nItem, rgb);
|
||||
return nItem;
|
||||
} // AddString
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
int CColorListBox::InsertString(int nIndex, LPCTSTR lpszItem)
|
||||
//
|
||||
// Return Value: The zero-based index of the position at which the
|
||||
// string was inserted. The return value is LB_ERR if
|
||||
// an error occurs; the return value is LB_ERRSPACE if
|
||||
// insufficient space is available to store the new string.
|
||||
//
|
||||
// Parameters : nIndex - Specifies the zero-based index of the position
|
||||
// to insert the string. If this parameter is –1, the string
|
||||
// is added to the end of the list.
|
||||
// lpszItem - Points to the null-terminated string that
|
||||
// is to be inserted.
|
||||
//
|
||||
// Remarks : Inserts a string into the list box. Provided because
|
||||
// CListBox::InsertString is NOT a virtual function.
|
||||
//
|
||||
{
|
||||
return ((CListBox*)this)->InsertString(nIndex, lpszItem);
|
||||
} // InsertString
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
int CColorListBox::InsertString(int nIndex, LPCTSTR lpszItem, COLORREF rgb)
|
||||
//
|
||||
// Return Value: The zero-based index of the position at which the
|
||||
// string was inserted. The return value is LB_ERR if
|
||||
// an error occurs; the return value is LB_ERRSPACE if
|
||||
// insufficient space is available to store the new string.
|
||||
//
|
||||
// Parameters : nIndex - Specifies the zero-based index of the position
|
||||
// to insert the string. If this parameter is –1, the string
|
||||
// is added to the end of the list.
|
||||
// lpszItem - Points to the null-terminated string that
|
||||
// is to be inserted.
|
||||
// rgb - Specifies the color to be associated with the item.
|
||||
//
|
||||
// Remarks : Inserts a colored string into the list box.
|
||||
//
|
||||
{
|
||||
int nItem = ((CListBox*)this)->InsertString(nIndex,lpszItem);
|
||||
if (nItem >= 0)
|
||||
SetItemData(nItem, rgb);
|
||||
return nItem;
|
||||
} // InsertString
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
void CColorListBox::SetItemColor(int nIndex, COLORREF rgb)
|
||||
//
|
||||
// Return Value: None.
|
||||
//
|
||||
// Parameters : nIndex - Specifies the zero-based index of the item.
|
||||
// rgb - Specifies the color to be associated with the item.
|
||||
//
|
||||
// Remarks : Sets the 32-bit value associated with the specified
|
||||
// item in the list box.
|
||||
//
|
||||
{
|
||||
SetItemData(nIndex, rgb);
|
||||
RedrawWindow();
|
||||
} // SetItemColor
|
||||
@@ -0,0 +1,65 @@
|
||||
#if !defined(AFX_COLORLISTBOX_H__5529A6B1_584A_11D2_A41A_006097BD277B__INCLUDED_)
|
||||
#define AFX_COLORLISTBOX_H__5529A6B1_584A_11D2_A41A_006097BD277B__INCLUDED_
|
||||
|
||||
#if _MSC_VER >= 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER >= 1000
|
||||
|
||||
// ColorListBox.h : header file
|
||||
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
// CColorListBox class -
|
||||
// A CListBox-derived class with optional colored items.
|
||||
//
|
||||
// Version: 1.0 01/10/1998 Copyright © Patrice Godard
|
||||
//
|
||||
// Version: 2.0 09/17/1999 Copyright © Paul M. Meidinger
|
||||
//
|
||||
//-------------------------------------------------------------------
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CColorListBox window
|
||||
|
||||
class CColorListBox : public CListBox
|
||||
{
|
||||
// Construction
|
||||
public:
|
||||
CColorListBox();
|
||||
|
||||
// Attributes
|
||||
public:
|
||||
|
||||
// Operations
|
||||
public:
|
||||
int AddString(LPCTSTR lpszItem); // Adds a string to the list box
|
||||
int AddString(LPCTSTR lpszItem, COLORREF rgb); // Adds a colored string to the list box
|
||||
int InsertString(int nIndex, LPCTSTR lpszItem); // Inserts a string to the list box
|
||||
int InsertString(int nIndex, LPCTSTR lpszItem, COLORREF rgb); // Inserts a colored string to the list box
|
||||
void SetItemColor(int nIndex, COLORREF rgb); // Sets the color of an item in the list box
|
||||
// Overrides
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(CColorListBox)
|
||||
public:
|
||||
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
|
||||
virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
public:
|
||||
virtual ~CColorListBox();
|
||||
|
||||
// Generated message map functions
|
||||
protected:
|
||||
//{{AFX_MSG(CColorListBox)
|
||||
//}}AFX_MSG
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_COLORLISTBOX_H__5529A6B1_584A_11D2_A41A_006097BD277B__INCLUDED_)
|
||||
@@ -0,0 +1,46 @@
|
||||
// EditMetricsDlg.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "smpackage.h"
|
||||
#include "EditMetricsDlg.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// EditMetricsDlg dialog
|
||||
|
||||
|
||||
EditMetricsDlg::EditMetricsDlg(CWnd* pParent /*=NULL*/)
|
||||
: CDialog(EditMetricsDlg::IDD, pParent)
|
||||
{
|
||||
//{{AFX_DATA_INIT(EditMetricsDlg)
|
||||
// NOTE: the ClassWizard will add member initialization here
|
||||
//}}AFX_DATA_INIT
|
||||
}
|
||||
|
||||
|
||||
void EditMetricsDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(EditMetricsDlg)
|
||||
DDX_Control(pDX, IDC_LIST_NAME, m_listName);
|
||||
DDX_Control(pDX, IDC_LIST_CLASS, m_listClass);
|
||||
DDX_Control(pDX, IDC_EDIT_VALUE, m_editValue);
|
||||
DDX_Control(pDX, IDC_EDIT_DEFAULT, m_editDefault);
|
||||
//}}AFX_DATA_MAP
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(EditMetricsDlg, CDialog)
|
||||
//{{AFX_MSG_MAP(EditMetricsDlg)
|
||||
// NOTE: the ClassWizard will add message map macros here
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// EditMetricsDlg message handlers
|
||||
@@ -0,0 +1,52 @@
|
||||
#if !defined(AFX_EDITMETRICSDLG_H__39D944CD_BCE4_4C30_876E_0B5A0CE42931__INCLUDED_)
|
||||
#define AFX_EDITMETRICSDLG_H__39D944CD_BCE4_4C30_876E_0B5A0CE42931__INCLUDED_
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
// EditMetricsDlg.h : header file
|
||||
//
|
||||
|
||||
#include "ColorListBox.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// EditMetricsDlg dialog
|
||||
|
||||
class EditMetricsDlg : public CDialog
|
||||
{
|
||||
// Construction
|
||||
public:
|
||||
EditMetricsDlg(CWnd* pParent = NULL); // standard constructor
|
||||
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(EditMetricsDlg)
|
||||
enum { IDD = IDD_EDIT_METRICS };
|
||||
CColorListBox m_listName;
|
||||
CColorListBox m_listClass;
|
||||
CEdit m_editValue;
|
||||
CEdit m_editDefault;
|
||||
//}}AFX_DATA
|
||||
|
||||
CString m_sTheme;
|
||||
|
||||
// Overrides
|
||||
// ClassWizard generated virtual function overrides
|
||||
//{{AFX_VIRTUAL(EditMetricsDlg)
|
||||
protected:
|
||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
// Implementation
|
||||
protected:
|
||||
|
||||
// Generated message map functions
|
||||
//{{AFX_MSG(EditMetricsDlg)
|
||||
// NOTE: the ClassWizard will add member functions here
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // !defined(AFX_EDITMETRICSDLG_H__39D944CD_BCE4_4C30_876E_0B5A0CE42931__INCLUDED_)
|
||||
@@ -0,0 +1,275 @@
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
File: IniFile.h
|
||||
|
||||
Desc: Wrapper for reading and writing an .ini file.
|
||||
|
||||
Copyright (c) 2001-2002 by the persons listed below. All rights reserved.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "IniFile.h"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Construction/Destruction
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
//default constructor
|
||||
IniFile::IniFile()
|
||||
{
|
||||
}
|
||||
|
||||
//constructor, can specify pathname here instead of using SetPath later
|
||||
IniFile::IniFile(CString inipath)
|
||||
{
|
||||
path = inipath;
|
||||
}
|
||||
|
||||
//default destructor
|
||||
IniFile::~IniFile()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Public Functions
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
//sets path of ini file to read and write from
|
||||
void IniFile::SetPath(CString newpath)
|
||||
{
|
||||
path = newpath;
|
||||
}
|
||||
|
||||
//reads ini file specified using IniFile::SetPath()
|
||||
//returns true if successful, false otherwise
|
||||
BOOL IniFile::ReadFile()
|
||||
{
|
||||
CStdioFile file;
|
||||
if( !file.Open(path, CFile::modeRead) )
|
||||
{
|
||||
error = "Unable to open ini file.";
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
CString line;
|
||||
int curkey = -1, curval = -1;
|
||||
CString keyname, valuename, value;
|
||||
while( file.ReadString(line) )
|
||||
{
|
||||
if( line != "" )
|
||||
{
|
||||
if( line[0] == '[' && line[line.GetLength()-1] == ']' ) //if a section heading
|
||||
{
|
||||
keyname = line;
|
||||
keyname.TrimLeft('[');
|
||||
keyname.TrimRight(']');
|
||||
}
|
||||
else //if a value
|
||||
{
|
||||
int iIndexOfEqual = line.Find("=");
|
||||
if( iIndexOfEqual == -1 ) // this is a malformed line
|
||||
continue;
|
||||
valuename = line.Left( iIndexOfEqual );
|
||||
value = line.Right(line.GetLength()-valuename.GetLength()-1);
|
||||
SetValue(keyname,valuename,value);
|
||||
}
|
||||
}
|
||||
}
|
||||
file.Close();
|
||||
return 1;
|
||||
}
|
||||
|
||||
//writes data stored in class to ini file
|
||||
void IniFile::WriteFile()
|
||||
{
|
||||
CStdioFile file;
|
||||
if( !file.Open(path, CFile::modeCreate | CFile::modeWrite ) )
|
||||
{
|
||||
error = "Unable to open ini for writing.";
|
||||
return;
|
||||
}
|
||||
|
||||
// foreach key
|
||||
for( int keynum = 0; keynum <= names.GetUpperBound(); keynum++ )
|
||||
{
|
||||
CString sTemp;
|
||||
sTemp.Format( "[%s]\n", names[keynum] );
|
||||
file.WriteString( sTemp );
|
||||
|
||||
CMapStringToString &map = keys[keynum];
|
||||
|
||||
// for each value_name/value pair
|
||||
for( POSITION pos = map.GetStartPosition(); pos != NULL; )
|
||||
{
|
||||
CString value_name;
|
||||
CString value;
|
||||
map.GetNextAssoc( pos, value_name, value );
|
||||
|
||||
sTemp.Format( "%s=%s\n", value_name, value );
|
||||
file.WriteString( sTemp );
|
||||
}
|
||||
file.WriteString( "\n" );
|
||||
}
|
||||
|
||||
file.Close();
|
||||
}
|
||||
|
||||
//deletes all stored ini data
|
||||
void IniFile::Reset()
|
||||
{
|
||||
keys.SetSize(0);
|
||||
names.SetSize(0);
|
||||
}
|
||||
|
||||
//returns number of keys currently in the ini
|
||||
int IniFile::GetNumKeys()
|
||||
{
|
||||
return keys.GetSize();
|
||||
}
|
||||
|
||||
//returns a pointer to the key for direct modification
|
||||
CMapStringToString* IniFile::GetKeyPointer( CString keyname )
|
||||
{
|
||||
int keynum = FindKey(keyname);
|
||||
if (keynum == -1)
|
||||
return NULL;
|
||||
else
|
||||
return &keys[keynum];
|
||||
}
|
||||
|
||||
//returns number of values stored for specified key, or -1 if key not found
|
||||
int IniFile::GetNumValues(CString keyname)
|
||||
{
|
||||
int keynum = FindKey(keyname);
|
||||
if (keynum == -1)
|
||||
return -1;
|
||||
else
|
||||
return keys[keynum].GetCount();
|
||||
}
|
||||
|
||||
//gets value of [keyname] valuename =
|
||||
//overloaded to return CString, int, and double
|
||||
CString IniFile::GetValue(CString keyname, CString valuename)
|
||||
{
|
||||
int keynum = FindKey(keyname);//, valuenum = FindValue(keynum,valuename);
|
||||
if( keynum == -1 )
|
||||
{
|
||||
error = "Unable to locate specified key.";
|
||||
return "";
|
||||
}
|
||||
|
||||
CMapStringToString &map = keys[keynum];
|
||||
CString value;
|
||||
if( !map.Lookup(valuename, value) )
|
||||
{
|
||||
error = "Unable to locate specified value.";
|
||||
return "";
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
//gets value of [keyname] valuename =
|
||||
//overloaded to return CString, int, and double
|
||||
int IniFile::GetValueI(CString keyname, CString valuename)
|
||||
{
|
||||
return atoi( GetValue(keyname,valuename) );
|
||||
}
|
||||
|
||||
//gets value of [keyname] valuename =
|
||||
//overloaded to return CString, int, and double
|
||||
double IniFile::GetValueF(CString keyname, CString valuename)
|
||||
{
|
||||
return atof( GetValue(keyname, valuename) );
|
||||
}
|
||||
|
||||
//sets value of [keyname] valuename =.
|
||||
//specify the optional paramter as false (0) if you do not want it to create
|
||||
//the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
//overloaded to accept CString, int, and double
|
||||
BOOL IniFile::SetValue(CString keyname, CString valuename, CString value, BOOL create)
|
||||
{
|
||||
int keynum = FindKey(keyname);
|
||||
|
||||
if( keynum == -1 ) //if key doesn't exist
|
||||
{
|
||||
if( !create ) //and user does not want to create it,
|
||||
return FALSE; //stop entering this key
|
||||
names.SetSize(names.GetSize()+1);
|
||||
keys.SetSize(keys.GetSize()+1);
|
||||
keynum = names.GetSize()-1;
|
||||
names[keynum] = keyname;
|
||||
}
|
||||
|
||||
// insert value
|
||||
CMapStringToString &map = keys[keynum];
|
||||
CString oldvalue;
|
||||
if( !map.Lookup(valuename, oldvalue) && !create )
|
||||
return FALSE;
|
||||
map[valuename] = value;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
//sets value of [keyname] valuename =.
|
||||
//specify the optional paramter as false (0) if you do not want it to create
|
||||
//the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
//overloaded to accept CString, int, and double
|
||||
BOOL IniFile::SetValueI(CString keyname, CString valuename, int value, BOOL create)
|
||||
{
|
||||
CString temp;
|
||||
temp.Format("%d",value);
|
||||
return SetValue(keyname, valuename, temp, create);
|
||||
}
|
||||
|
||||
//sets value of [keyname] valuename =.
|
||||
//specify the optional paramter as false (0) if you do not want it to create
|
||||
//the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
//overloaded to accept CString, int, and double
|
||||
BOOL IniFile::SetValueF(CString keyname, CString valuename, double value, BOOL create)
|
||||
{
|
||||
CString temp;
|
||||
temp.Format("%e",value);
|
||||
return SetValue(keyname, valuename, temp, create);
|
||||
}
|
||||
|
||||
//deletes specified value
|
||||
//returns true if value existed and deleted, false otherwise
|
||||
BOOL IniFile::DeleteValue(CString keyname, CString valuename)
|
||||
{
|
||||
int keynum = FindKey(keyname);
|
||||
if( keynum == -1 )
|
||||
return FALSE;
|
||||
|
||||
CMapStringToString &map = keys[keynum];
|
||||
return map.RemoveKey( valuename );
|
||||
}
|
||||
|
||||
//deletes specified key and all values contained within
|
||||
//returns true if key existed and deleted, false otherwise
|
||||
BOOL IniFile::DeleteKey(CString keyname)
|
||||
{
|
||||
int keynum = FindKey(keyname);
|
||||
if (keynum == -1)
|
||||
return 0;
|
||||
keys.RemoveAt(keynum);
|
||||
names.RemoveAt(keynum);
|
||||
return 1;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
// Private Functions
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
//returns index of specified key, or -1 if not found
|
||||
int IniFile::FindKey(CString keyname)
|
||||
{
|
||||
int keynum = 0;
|
||||
while ( keynum < keys.GetSize() && names[keynum] != keyname)
|
||||
keynum++;
|
||||
if (keynum == keys.GetSize())
|
||||
return -1;
|
||||
return keynum;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
/*
|
||||
-----------------------------------------------------------------------------
|
||||
File: IniFile.h
|
||||
|
||||
Desc: Wrapper for reading and writing an .ini file.
|
||||
|
||||
Copyright (c) 2001-2002 by the persons listed below. All rights reserved.
|
||||
-----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _INIFILE_H_
|
||||
#define _INIFILE_H_
|
||||
|
||||
#include <afxtempl.h>
|
||||
//#include <iostream.h>
|
||||
|
||||
|
||||
class IniFile
|
||||
{
|
||||
//all private variables
|
||||
public:
|
||||
|
||||
//stores pathname of ini file to read/write
|
||||
CString path;
|
||||
|
||||
//all keys are of this time
|
||||
typedef CMapStringToString key;
|
||||
|
||||
//list of keys in ini
|
||||
CArray<key, key> keys;
|
||||
|
||||
//corresponding list of keynames
|
||||
CArray<CString, CString> names;
|
||||
|
||||
|
||||
|
||||
//all private functions
|
||||
private:
|
||||
|
||||
//returns index of specified key, or -1 if not found
|
||||
int FindKey(CString keyname);
|
||||
|
||||
|
||||
//public variables
|
||||
public:
|
||||
|
||||
//will contain error info if one occurs
|
||||
//ended up not using much, just in ReadFile and GetValue
|
||||
CString error;
|
||||
|
||||
|
||||
//public functions
|
||||
public:
|
||||
//default constructor
|
||||
IniFile();
|
||||
|
||||
//constructor, can specify pathname here instead of using SetPath later
|
||||
IniFile(CString inipath);
|
||||
|
||||
//default destructor
|
||||
virtual ~IniFile();
|
||||
|
||||
//sets path of ini file to read and write from
|
||||
void SetPath(CString newpath);
|
||||
|
||||
//reads ini file specified using IniFile::SetPath()
|
||||
//returns true if successful, false otherwise
|
||||
BOOL ReadFile();
|
||||
|
||||
//writes data stored in class to ini file
|
||||
void WriteFile();
|
||||
|
||||
//deletes all stored ini data
|
||||
void Reset();
|
||||
|
||||
//returns number of keys currently in the ini
|
||||
int GetNumKeys();
|
||||
|
||||
//returns a pointer to the key for direct modification
|
||||
CMapStringToString* GetKeyPointer( CString keyname );
|
||||
|
||||
//returns number of values stored for specified key
|
||||
int GetNumValues( CString keyname );
|
||||
|
||||
//gets value of [keyname] valuename =
|
||||
//overloaded to return CString, int, and double,
|
||||
//returns "", or 0 if key/value not found. Sets error member to show problem
|
||||
CString GetValue(CString keyname, CString valuename);
|
||||
int GetValueI(CString keyname, CString valuename);
|
||||
double GetValueF(CString keyname, CString valuename);
|
||||
|
||||
//sets value of [keyname] valuename =.
|
||||
//specify the optional paramter as false (0) if you do not want it to create
|
||||
//the key if it doesn't exist. Returns true if data entered, false otherwise
|
||||
//overloaded to accept CString, int, and double
|
||||
BOOL SetValue(CString key, CString valuename, CString value, BOOL create = 1);
|
||||
BOOL SetValueI(CString key, CString valuename, int value, BOOL create = 1);
|
||||
BOOL SetValueF(CString key, CString valuename, double value, BOOL create = 1);
|
||||
|
||||
//deletes specified value
|
||||
//returns true if value existed and deleted, false otherwise
|
||||
BOOL DeleteValue(CString keyname, CString valuename);
|
||||
|
||||
//deletes specified key and all values contained within
|
||||
//returns true if key existed and deleted, false otherwise
|
||||
BOOL DeleteKey(CString keyname);
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
@@ -5,6 +5,9 @@
|
||||
#include "smpackage.h"
|
||||
#include "onvertThemeDlg.h"
|
||||
#include "smpackageUtil.h"
|
||||
#include "EditMetricsDlg.h"
|
||||
#include "EditMetricsDlg.h"
|
||||
#include "IniFile.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
@@ -29,6 +32,8 @@ void ConvertThemeDlg::DoDataExchange(CDataExchange* pDX)
|
||||
{
|
||||
CDialog::DoDataExchange(pDX);
|
||||
//{{AFX_DATA_MAP(ConvertThemeDlg)
|
||||
DDX_Control(pDX, IDC_BUTTON_ANALYZE_METRICS, m_buttonAnalyzeMetrics);
|
||||
DDX_Control(pDX, IDC_BUTTON_EDIT_METRICS, m_buttonEditMetrics);
|
||||
DDX_Control(pDX, IDC_BUTTON_ANALYZE, m_buttonAnalyze);
|
||||
DDX_Control(pDX, IDC_BUTTON_CONVERT, m_buttonConvert);
|
||||
DDX_Control(pDX, IDC_LIST_THEMES, m_listThemes);
|
||||
@@ -41,6 +46,8 @@ BEGIN_MESSAGE_MAP(ConvertThemeDlg, CDialog)
|
||||
ON_BN_CLICKED(IDC_BUTTON_CONVERT, OnButtonConvert)
|
||||
ON_LBN_SELCHANGE(IDC_LIST_THEMES, OnSelchangeListThemes)
|
||||
ON_BN_CLICKED(IDC_BUTTON_ANALYZE, OnButtonAnalyze)
|
||||
ON_BN_CLICKED(IDC_BUTTON_EDIT_METRICS, OnButtonEditMetrics)
|
||||
ON_BN_CLICKED(IDC_BUTTON_ANALYZE_METRICS, OnButtonAnalyzeMetrics)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
@@ -192,6 +199,8 @@ void ConvertThemeDlg::OnSelchangeListThemes()
|
||||
BOOL bSomethingSelected = m_listThemes.GetCurSel() != LB_ERR;
|
||||
m_buttonConvert.EnableWindow( bSomethingSelected );
|
||||
m_buttonAnalyze.EnableWindow( bSomethingSelected );
|
||||
m_buttonEditMetrics.EnableWindow( bSomethingSelected );
|
||||
m_buttonAnalyzeMetrics.EnableWindow( bSomethingSelected );
|
||||
}
|
||||
|
||||
bool FilesAreIdentical( CString sPath1, CString sPath2 )
|
||||
@@ -225,6 +234,28 @@ CString StripExtension( CString sPath )
|
||||
return sDir + sFName;
|
||||
}
|
||||
|
||||
void LaunchNotepad( CString sPathToOpen )
|
||||
{
|
||||
PROCESS_INFORMATION pi;
|
||||
STARTUPINFO si;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
|
||||
char szCommand[MAX_PATH] = "notepad.exe ";
|
||||
strcat( szCommand, sPathToOpen );
|
||||
CreateProcess(
|
||||
NULL, // pointer to name of executable module
|
||||
szCommand, // pointer to command line string
|
||||
NULL, // process security attributes
|
||||
NULL, // thread security attributes
|
||||
false, // handle inheritance flag
|
||||
0, // creation flags
|
||||
NULL, // pointer to new environment block
|
||||
NULL, // pointer to current directory name
|
||||
&si, // pointer to STARTUPINFO
|
||||
&pi // pointer to PROCESS_INFORMATION
|
||||
);
|
||||
}
|
||||
|
||||
void ConvertThemeDlg::OnButtonAnalyze()
|
||||
{
|
||||
// TODO: Add your control notification handler code here
|
||||
@@ -232,9 +263,9 @@ void ConvertThemeDlg::OnButtonAnalyze()
|
||||
|
||||
CString sBaseDir = "Themes\\default\\";
|
||||
int iSel = m_listThemes.GetCurSel();
|
||||
CString sThemeDir;
|
||||
m_listThemes.GetText( iSel, sThemeDir );
|
||||
sThemeDir = "Themes\\"+sThemeDir+"\\";
|
||||
CString sThemeName;
|
||||
m_listThemes.GetText( iSel, sThemeName );
|
||||
CString sThemeDir = "Themes\\"+sThemeName+"\\";
|
||||
|
||||
CStringArray asBaseFilePaths;
|
||||
GetDirListing( sBaseDir+"BGAnimations\\*.*", asBaseFilePaths, false, true );
|
||||
@@ -250,15 +281,14 @@ void ConvertThemeDlg::OnButtonAnalyze()
|
||||
GetDirListing( sThemeDir+"Numbers\\*.*", asThemeFilePaths, false, true );
|
||||
GetDirListing( sThemeDir+"Sounds\\*.*", asThemeFilePaths, false, true );
|
||||
|
||||
FILE* fp = fopen( "theme_report.txt", "w" );
|
||||
ASSERT( fp );
|
||||
CStringArray asRedundantPaths;
|
||||
CStringArray asWarningPaths;
|
||||
CStringArray asRedundant;
|
||||
CStringArray asWarning;
|
||||
for( i=0; i<asThemeFilePaths.GetSize(); i++ )
|
||||
{
|
||||
CString sThemeElement = asThemeFilePaths[i];
|
||||
sThemeElement.Replace( sThemeDir, "" );
|
||||
sThemeElement = StripExtension( sThemeElement );
|
||||
bool bFoundMatch = false;
|
||||
|
||||
for( int j=0; j<asBaseFilePaths.GetSize(); j++ )
|
||||
{
|
||||
@@ -269,48 +299,135 @@ void ConvertThemeDlg::OnButtonAnalyze()
|
||||
if( sThemeElement.CompareNoCase(sBaseElement)==0 ) // file names match
|
||||
{
|
||||
if( FilesAreIdentical( asThemeFilePaths[i], asBaseFilePaths[j] ) )
|
||||
{
|
||||
asRedundantPaths.Add( asThemeFilePaths[i] );
|
||||
break;
|
||||
}
|
||||
else // files are not identical
|
||||
{
|
||||
break; // skip to next file in asThemeFilePaths
|
||||
}
|
||||
asRedundant.Add( asThemeFilePaths[i] );
|
||||
break; // skip to next file in asThemeFilePaths
|
||||
}
|
||||
}
|
||||
if( j == asBaseFilePaths.GetSize() )
|
||||
asWarningPaths.Add( asThemeFilePaths[i] );
|
||||
if( !bFoundMatch )
|
||||
asWarning.Add( asThemeFilePaths[i] );
|
||||
}
|
||||
|
||||
SortCStringArray( asRedundant );
|
||||
SortCStringArray( asWarning );
|
||||
|
||||
FILE* fp = fopen( "elements_report.txt", "w" );
|
||||
ASSERT( fp );
|
||||
fprintf( fp, "Theme elements report for '"+sThemeName+"'.\n\n" );
|
||||
fprintf( fp, "The following elements are REDUNDANT.\n"
|
||||
" (These elements are identical to the elements in the base theme.\n"
|
||||
" They are unnecessary and should be deleted.)\n" );
|
||||
for( i=0; i<asRedundantPaths.GetSize(); i++ )
|
||||
fprintf( fp, asRedundantPaths[i] + "\n" );
|
||||
for( i=0; i<asRedundant.GetSize(); i++ )
|
||||
fprintf( fp, asRedundant[i] + "\n" );
|
||||
fprintf( fp, "\n" );
|
||||
fprintf( fp, "The following elements are possibly MISNAMED.\n"
|
||||
" (These files do not have a corresponding element in\n"
|
||||
" the base theme. This likely means that there is an error in the file name.)\n" );
|
||||
for( i=0; i<asWarningPaths.GetSize(); i++ )
|
||||
fprintf( fp, asWarningPaths[i] + "\n" );
|
||||
for( i=0; i<asWarning.GetSize(); i++ )
|
||||
fprintf( fp, asWarning[i] + "\n" );
|
||||
fclose( fp );
|
||||
|
||||
// launch notepad
|
||||
PROCESS_INFORMATION pi;
|
||||
STARTUPINFO si;
|
||||
ZeroMemory( &si, sizeof(si) );
|
||||
|
||||
CreateProcess(
|
||||
NULL, // pointer to name of executable module
|
||||
"notepad.exe theme_report.txt", // pointer to command line string
|
||||
NULL, // process security attributes
|
||||
NULL, // thread security attributes
|
||||
false, // handle inheritance flag
|
||||
0, // creation flags
|
||||
NULL, // pointer to new environment block
|
||||
NULL, // pointer to current directory name
|
||||
&si, // pointer to STARTUPINFO
|
||||
&pi // pointer to PROCESS_INFORMATION
|
||||
);
|
||||
LaunchNotepad( "elements_report.txt" );
|
||||
}
|
||||
|
||||
void ConvertThemeDlg::OnButtonEditMetrics()
|
||||
{
|
||||
// TODO: Add your control notification handler code here
|
||||
EditMetricsDlg dlg;
|
||||
int iSel = m_listThemes.GetCurSel();
|
||||
CString sThemeName;
|
||||
m_listThemes.GetText( iSel, sThemeName );
|
||||
dlg.m_sTheme = sThemeName;
|
||||
int nResponse = dlg.DoModal();
|
||||
|
||||
}
|
||||
|
||||
void ConvertThemeDlg::OnButtonAnalyzeMetrics()
|
||||
{
|
||||
// TODO: Add your control notification handler code here
|
||||
int i;
|
||||
|
||||
int iSel = m_listThemes.GetCurSel();
|
||||
CString sThemeName;
|
||||
m_listThemes.GetText( iSel, sThemeName );
|
||||
|
||||
IniFile iniBase;
|
||||
iniBase.SetPath( "Themes\\default\\metrics.ini" );
|
||||
iniBase.ReadFile();
|
||||
|
||||
IniFile iniTheme;
|
||||
iniTheme.SetPath( "Themes\\"+sThemeName+"\\metrics.ini" );
|
||||
iniTheme.ReadFile();
|
||||
|
||||
CMapStringToString mapBaseClassPlusNameToValue;
|
||||
for( i=0; i<iniBase.names.GetSize(); i++ )
|
||||
{
|
||||
CString sKey = iniBase.names[i];
|
||||
IniFile::key& Key = iniBase.keys[i];
|
||||
for( POSITION pos=Key.GetStartPosition(); pos!=NULL; )
|
||||
{
|
||||
CString sName, sValue;
|
||||
Key.GetNextAssoc( pos, sName, sValue );
|
||||
mapBaseClassPlusNameToValue[sKey+"-"+sName] = sValue;
|
||||
}
|
||||
}
|
||||
|
||||
CMapStringToString mapThemeClassPlusNameToValue;
|
||||
for( i=0; i<iniTheme.names.GetSize(); i++ )
|
||||
{
|
||||
CString sKey = iniTheme.names[i];
|
||||
IniFile::key& Key = iniTheme.keys[i];
|
||||
for( POSITION pos=Key.GetStartPosition(); pos!=NULL; )
|
||||
{
|
||||
CString sName, sValue;
|
||||
Key.GetNextAssoc( pos, sName, sValue );
|
||||
mapThemeClassPlusNameToValue[sKey+"-"+sName] = sValue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CStringArray asRedundant;
|
||||
CStringArray asWarning;
|
||||
for( POSITION pos1=mapThemeClassPlusNameToValue.GetStartPosition(); pos1!=NULL; )
|
||||
{
|
||||
CString sThemeKey, sThemeValue;
|
||||
mapThemeClassPlusNameToValue.GetNextAssoc( pos1, sThemeKey, sThemeValue );
|
||||
bool bFoundMatch = false;
|
||||
|
||||
for( POSITION pos2=mapBaseClassPlusNameToValue.GetStartPosition(); pos2!=NULL; )
|
||||
{
|
||||
CString sBaseKey, sBaseValue;
|
||||
mapBaseClassPlusNameToValue.GetNextAssoc( pos2, sBaseKey, sBaseValue );
|
||||
|
||||
if( sThemeKey == sBaseKey ) // match
|
||||
{
|
||||
bFoundMatch = true;
|
||||
if( sThemeValue == sBaseValue )
|
||||
asRedundant.Add( sThemeKey );
|
||||
break; // skip to next file in asThemeFilePaths
|
||||
}
|
||||
}
|
||||
if( !bFoundMatch )
|
||||
asWarning.Add( sThemeKey );
|
||||
}
|
||||
|
||||
SortCStringArray( asRedundant );
|
||||
SortCStringArray( asWarning );
|
||||
|
||||
FILE* fp = fopen( "metrics_report.txt", "w" );
|
||||
ASSERT( fp );
|
||||
fprintf( fp, "Theme metrics report for '"+sThemeName+"'.\n\n" );
|
||||
fprintf( fp, "The following metrics are REDUNDANT.\n"
|
||||
" (These metrics are identical to the metrics in the base theme.\n"
|
||||
" They are unnecessary and should be deleted.)\n" );
|
||||
for( i=0; i<asRedundant.GetSize(); i++ )
|
||||
fprintf( fp, asRedundant[i] + "\n" );
|
||||
fprintf( fp, "\n" );
|
||||
fprintf( fp, "The following elements are possibly MISNAMED.\n"
|
||||
" (These metrics do not have a corresponding metric in\n"
|
||||
" the base theme. This likely means that there is an error in the metric name.)\n" );
|
||||
for( i=0; i<asWarning.GetSize(); i++ )
|
||||
fprintf( fp, asWarning[i] + "\n" );
|
||||
fclose( fp );
|
||||
|
||||
LaunchNotepad( "metrics_report.txt" );
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ public:
|
||||
// Dialog Data
|
||||
//{{AFX_DATA(ConvertThemeDlg)
|
||||
enum { IDD = IDD_CONVERT_THEME };
|
||||
CButton m_buttonAnalyzeMetrics;
|
||||
CButton m_buttonEditMetrics;
|
||||
CButton m_buttonAnalyze;
|
||||
CButton m_buttonConvert;
|
||||
CListBox m_listThemes;
|
||||
@@ -41,6 +43,8 @@ protected:
|
||||
afx_msg void OnButtonConvert();
|
||||
afx_msg void OnSelchangeListThemes();
|
||||
afx_msg void OnButtonAnalyze();
|
||||
afx_msg void OnButtonEditMetrics();
|
||||
afx_msg void OnButtonAnalyzeMetrics();
|
||||
//}}AFX_MSG
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#define MENU 140
|
||||
#define IDD_CONVERT_THEME 142
|
||||
#define CONVERTTHEME 144
|
||||
#define IDD_EDIT_METRICS 145
|
||||
#define EDIT_METRICS 146
|
||||
#define IDC_LIST_SONGS 1000
|
||||
#define IDC_LIST 1000
|
||||
#define IDC_BUTTON_PLAY 1001
|
||||
@@ -38,16 +40,21 @@
|
||||
#define IDC_ANALYZE_ELEMENTS 1023
|
||||
#define IDC_EDIT_INSTALLATIONS 1024
|
||||
#define IDC_BUTTON_CONVERT 1024
|
||||
#define IDC_EDIT_METRICS 1025
|
||||
#define IDC_BUTTON_ANALYZE 1025
|
||||
#define IDC_BUTTON_EDIT_METRICS 1026
|
||||
#define IDC_LIST_CLASS 1026
|
||||
#define IDC_LIST_NAME 1027
|
||||
#define IDC_BUTTON_ANALYZE_METRICS 1027
|
||||
#define IDC_EDIT_VALUE 1028
|
||||
#define IDC_EDIT_DEFAULT 1029
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 145
|
||||
#define _APS_NEXT_RESOURCE_VALUE 147
|
||||
#define _APS_NEXT_COMMAND_VALUE 32771
|
||||
#define _APS_NEXT_CONTROL_VALUE 1026
|
||||
#define _APS_NEXT_CONTROL_VALUE 1029
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -7,24 +7,26 @@ LastTemplate=CDialog
|
||||
NewFileInclude1=#include "stdafx.h"
|
||||
NewFileInclude2=#include "smpackage.h"
|
||||
|
||||
ClassCount=8
|
||||
ClassCount=9
|
||||
Class1=CSmpackageApp
|
||||
Class2=CSmpackageDlg
|
||||
|
||||
ResourceCount=7
|
||||
ResourceCount=8
|
||||
Resource1=IDR_MAINFRAME
|
||||
Resource2=IDD_MENU
|
||||
Resource2=IDD_EDIT_INSTALLATIONS
|
||||
Class3=CSMPackageInstallDlg
|
||||
Class4=CSmpackageExportDlg
|
||||
Resource3=IDD_EDIT_INSTALLATIONS
|
||||
Resource3=IDD_INSTALL
|
||||
Class5=EnterName
|
||||
Resource4=IDD_DIALOG_NAME
|
||||
Resource4=IDD_CONVERT_THEME
|
||||
Class6=EditInsallations
|
||||
Resource5=IDD_EXPORTER
|
||||
Resource5=IDD_DIALOG_NAME
|
||||
Class7=MainMenuDlg
|
||||
Resource6=IDD_INSTALL
|
||||
Resource6=IDD_MENU
|
||||
Class8=ConvertThemeDlg
|
||||
Resource7=IDD_CONVERT_THEME
|
||||
Resource7=IDD_EXPORTER
|
||||
Class9=EditMetricsDlg
|
||||
Resource8=IDD_EDIT_METRICS
|
||||
|
||||
[CLS:CSmpackageApp]
|
||||
Type=0
|
||||
@@ -139,7 +141,7 @@ LastObject=EditInsallations
|
||||
[DLG:IDD_MENU]
|
||||
Type=1
|
||||
Class=MainMenuDlg
|
||||
ControlCount=13
|
||||
ControlCount=11
|
||||
Control1=IDOK,button,1342242817
|
||||
Control2=IDC_STATIC,static,1342177294
|
||||
Control3=IDC_EXPORT_PACKAGES,button,1342242816
|
||||
@@ -150,9 +152,7 @@ Control7=IDC_ANALYZE_ELEMENTS,button,1342242816
|
||||
Control8=IDC_EDIT_INSTALLATIONS,button,1342242816
|
||||
Control9=IDC_STATIC,static,1342308352
|
||||
Control10=IDC_STATIC,button,1342177287
|
||||
Control11=IDC_EDIT_METRICS,button,1342242816
|
||||
Control12=IDC_STATIC,static,1342308352
|
||||
Control13=IDC_STATIC,static,1342308352
|
||||
Control11=IDC_STATIC,static,1342308352
|
||||
|
||||
[CLS:MainMenuDlg]
|
||||
Type=0
|
||||
@@ -166,7 +166,7 @@ LastObject=IDC_CONVERT_THEME
|
||||
[DLG:IDD_CONVERT_THEME]
|
||||
Type=1
|
||||
Class=ConvertThemeDlg
|
||||
ControlCount=10
|
||||
ControlCount=14
|
||||
Control1=IDOK,button,1342242817
|
||||
Control2=IDC_STATIC,static,1342177294
|
||||
Control3=IDC_LIST_THEMES,listbox,1352728835
|
||||
@@ -174,9 +174,13 @@ Control4=IDC_BUTTON_CONVERT,button,1476460544
|
||||
Control5=IDC_STATIC,static,1342308352
|
||||
Control6=IDC_STATIC,static,1342308352
|
||||
Control7=IDC_STATIC,button,1342177287
|
||||
Control8=IDC_STATIC,button,1342177287
|
||||
Control9=IDC_STATIC,static,1342308352
|
||||
Control10=IDC_BUTTON_ANALYZE,button,1476460544
|
||||
Control8=IDC_STATIC,static,1342308352
|
||||
Control9=IDC_BUTTON_ANALYZE,button,1476460544
|
||||
Control10=IDC_STATIC,button,1342177287
|
||||
Control11=IDC_STATIC,static,1342308352
|
||||
Control12=IDC_BUTTON_EDIT_METRICS,button,1476460544
|
||||
Control13=IDC_STATIC,static,1342308352
|
||||
Control14=IDC_BUTTON_ANALYZE_METRICS,button,1476460544
|
||||
|
||||
[CLS:ConvertThemeDlg]
|
||||
Type=0
|
||||
@@ -184,6 +188,29 @@ HeaderFile=onvertThemeDlg.h
|
||||
ImplementationFile=onvertThemeDlg.cpp
|
||||
BaseClass=CDialog
|
||||
Filter=D
|
||||
LastObject=ConvertThemeDlg
|
||||
LastObject=IDC_LIST_THEMES
|
||||
VirtualFilter=dWC
|
||||
|
||||
[DLG:IDD_EDIT_METRICS]
|
||||
Type=1
|
||||
Class=EditMetricsDlg
|
||||
ControlCount=10
|
||||
Control1=IDOK,button,1342242817
|
||||
Control2=IDC_STATIC,static,1342177294
|
||||
Control3=IDC_LIST_CLASS,listbox,1352728835
|
||||
Control4=IDC_STATIC,static,1342308352
|
||||
Control5=IDC_LIST_NAME,listbox,1352728835
|
||||
Control6=IDC_STATIC,static,1342308352
|
||||
Control7=IDC_EDIT_VALUE,edit,1350631552
|
||||
Control8=IDC_STATIC,static,1342308352
|
||||
Control9=IDC_EDIT_DEFAULT,edit,1350633600
|
||||
Control10=IDC_STATIC,static,1342308352
|
||||
|
||||
[CLS:EditMetricsDlg]
|
||||
Type=0
|
||||
HeaderFile=EditMetricsDlg.h
|
||||
ImplementationFile=EditMetricsDlg.cpp
|
||||
BaseClass=CDialog
|
||||
Filter=D
|
||||
VirtualFilter=dWC
|
||||
|
||||
|
||||
@@ -88,6 +88,18 @@ LINK32=link.exe
|
||||
# Name "smpackage - Win32 Debug"
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ColorListBox.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\ColorListBox.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\converttheme.bmp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\EditInsallations.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -96,6 +108,18 @@ SOURCE=.\EditInsallations.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\editmetrics.bmp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\EditMetricsDlg.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\EditMetricsDlg.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\EnterName.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -104,6 +128,14 @@ SOURCE=.\EnterName.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\IniFile.cpp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\IniFile.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\install.bmp
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
@@ -153,51 +153,76 @@ BEGIN
|
||||
IDC_STATIC,18,144,196,17
|
||||
END
|
||||
|
||||
IDD_MENU DIALOG DISCARDABLE 0, 0, 332, 263
|
||||
IDD_MENU DIALOG DISCARDABLE 0, 0, 332, 234
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "StepMania Tools Main Menu"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Close",IDOK,275,242,50,14
|
||||
DEFPUSHBUTTON "Close",IDOK,275,213,50,14
|
||||
CONTROL 140,IDC_STATIC,"Static",SS_BITMAP,0,0,332,38
|
||||
PUSHBUTTON "Export Packages",IDC_EXPORT_PACKAGES,20,120,70,15
|
||||
LTEXT "Choose this option to create .smzip files that you can share with other StepMania and DWI users. A .smzip package can contain songs, courses, themes, background animations, and more.",
|
||||
IDC_STATIC,105,115,215,25
|
||||
GROUPBOX ".smzip Packages",IDC_STATIC,5,100,320,50
|
||||
GROUPBOX "Themes",IDC_STATIC,5,155,320,82
|
||||
PUSHBUTTON "Analyze Elements",IDC_ANALYZE_ELEMENTS,20,174,70,15
|
||||
GROUPBOX "Themes",IDC_STATIC,5,155,320,53
|
||||
PUSHBUTTON "Theme Tools",IDC_ANALYZE_ELEMENTS,20,176,70,15
|
||||
PUSHBUTTON "Edit Installations",IDC_EDIT_INSTALLATIONS,20,65,70,15
|
||||
LTEXT "Choose this option to edit the list of locations where you have StepMania or DWI installed. When you double-click on a .smzip file, you can choose to install the package to any of these locations.",
|
||||
IDC_STATIC,105,60,215,25
|
||||
GROUPBOX "Installations",IDC_STATIC,5,45,320,50
|
||||
PUSHBUTTON "Edit Metrics",IDC_EDIT_METRICS,19,208,70,15
|
||||
LTEXT "This is a user-friendly interface for editing the metrics of a theme. It will warn you of misnamed and redundant metrics.",
|
||||
IDC_STATIC,102,206,215,25
|
||||
LTEXT "This function will catch mistakes in theme element naming. Also, it gives you the option to convert a StepMania 3.0 theme to the StepMania 4.0 naming scheme.",
|
||||
IDC_STATIC,103,168,215,25
|
||||
LTEXT "Using this feature, you can:\n - Catch redundant and misnamed theme elements\n - Convert a SM 3.0 theme for use in SM 4.0\n - Edit theme metrics using a user-friendly interface",
|
||||
IDC_STATIC,103,168,215,35
|
||||
END
|
||||
|
||||
IDD_CONVERT_THEME DIALOG DISCARDABLE 0, 0, 332, 234
|
||||
IDD_CONVERT_THEME DIALOG DISCARDABLE 0, 0, 332, 282
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Theme Elements"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Close",IDOK,275,213,50,14
|
||||
DEFPUSHBUTTON "Close",IDOK,275,261,50,14
|
||||
CONTROL 144,IDC_STATIC,"Static",SS_BITMAP,0,0,332,38
|
||||
LISTBOX IDC_LIST_THEMES,7,46,110,181,LBS_SORT |
|
||||
LISTBOX IDC_LIST_THEMES,7,48,88,207,LBS_SORT |
|
||||
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||
PUSHBUTTON "Convert from 3.0 to 4.0",IDC_BUTTON_CONVERT,174,59,95,
|
||||
PUSHBUTTON "Convert from 3.0 to 4.0",IDC_BUTTON_CONVERT,170,55,95,
|
||||
15,WS_DISABLED
|
||||
LTEXT "This will convert a StepMania 3.0 theme to the StepMania 4.0 theme format. After converting a theme, it will no longer be compatible with StepMania 3.0. Be sure to make a backup if this is important to you.",
|
||||
IDC_STATIC,129,82,189,34
|
||||
LTEXT "This will convert the element names in a SM 3.0 theme to the SM 4.0 theme naming scheme. After converting a theme, it will no longer be compatible with StepMania 3.0. Be sure to make a backup if this is important to you.",
|
||||
IDC_STATIC,110,75,210,33
|
||||
LTEXT "This tool will not convert any theme metrics. You'll need to convert these by hand.",
|
||||
IDC_STATIC,129,123,189,19
|
||||
GROUPBOX "Convert",IDC_STATIC,123,46,202,102
|
||||
GROUPBOX "Analyze",IDC_STATIC,123,153,202,54
|
||||
IDC_STATIC,110,113,210,18
|
||||
GROUPBOX "Elements",IDC_STATIC,105,45,220,122
|
||||
LTEXT "Check for redundant or possibly midnamed theme elements.",
|
||||
IDC_STATIC,130,185,186,18
|
||||
PUSHBUTTON "Analyze Elements",IDC_BUTTON_ANALYZE,173,164,95,15,
|
||||
IDC_STATIC,110,155,210,10
|
||||
PUSHBUTTON "Analyze Elements",IDC_BUTTON_ANALYZE,165,135,95,15,
|
||||
WS_DISABLED
|
||||
GROUPBOX "Metrics",IDC_STATIC,105,172,220,83
|
||||
LTEXT "Edit theme metrics with a user-friendly interface.",
|
||||
IDC_STATIC,110,202,210,10
|
||||
PUSHBUTTON "Edit Metrics",IDC_BUTTON_EDIT_METRICS,165,182,95,15,
|
||||
WS_DISABLED
|
||||
LTEXT "Check for redundant or possibly midnamed theme metrics.",
|
||||
IDC_STATIC,109,242,210,10
|
||||
PUSHBUTTON "Analyze Metrics",IDC_BUTTON_ANALYZE_METRICS,165,222,95,
|
||||
15,WS_DISABLED
|
||||
END
|
||||
|
||||
IDD_EDIT_METRICS DIALOG DISCARDABLE 0, 0, 332, 234
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Edit Theme Metrics"
|
||||
FONT 8, "MS Sans Serif"
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "Close",IDOK,275,213,50,14
|
||||
CONTROL 146,IDC_STATIC,"Static",SS_BITMAP,0,0,332,38
|
||||
LISTBOX IDC_LIST_CLASS,7,57,94,170,LBS_SORT |
|
||||
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Class",IDC_STATIC,7,47,88,9
|
||||
LISTBOX IDC_LIST_NAME,106,57,107,170,LBS_SORT |
|
||||
LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "Name",IDC_STATIC,106,47,88,9
|
||||
EDITTEXT IDC_EDIT_VALUE,217,58,108,46,ES_AUTOHSCROLL
|
||||
LTEXT "Value",IDC_STATIC,218,47,88,9
|
||||
EDITTEXT IDC_EDIT_DEFAULT,217,119,108,48,ES_AUTOHSCROLL |
|
||||
ES_READONLY
|
||||
LTEXT "Default Value",IDC_STATIC,218,108,88,9
|
||||
END
|
||||
|
||||
|
||||
@@ -289,10 +314,18 @@ BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 325
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 256
|
||||
BOTTOMMARGIN, 227
|
||||
END
|
||||
|
||||
IDD_CONVERT_THEME, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 325
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 275
|
||||
END
|
||||
|
||||
IDD_EDIT_METRICS, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 325
|
||||
@@ -312,6 +345,7 @@ INSTALL BITMAP DISCARDABLE "install.bmp"
|
||||
MANAGE BITMAP DISCARDABLE "manage.bmp"
|
||||
MENU BITMAP DISCARDABLE "menu.bmp"
|
||||
CONVERTTHEME BITMAP DISCARDABLE "converttheme.bmp"
|
||||
EDIT_METRICS BITMAP DISCARDABLE "editmetrics.bmp"
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
Reference in New Issue
Block a user