mirror of
https://github.com/leozide/leocad
synced 2025-01-01 06:19:55 +01:00
321 lines
7.3 KiB
C++
321 lines
7.3 KiB
C++
#include "lc_global.h"
|
|
#include "resource.h"
|
|
#include "PropsPgs.h"
|
|
#include "defines.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
IMPLEMENT_DYNCREATE(CPropertiesGeneral, CPropertyPage)
|
|
IMPLEMENT_DYNCREATE(CPropertiesSummary, CPropertyPage)
|
|
IMPLEMENT_DYNCREATE(CPropertiesPieces, CPropertyPage)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropertiesGeneral property page
|
|
|
|
CPropertiesGeneral::CPropertiesGeneral() : CPropertyPage(CPropertiesGeneral::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CPropertiesGeneral)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CPropertiesGeneral::~CPropertiesGeneral()
|
|
{
|
|
}
|
|
|
|
void CPropertiesGeneral::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPropertiesGeneral)
|
|
// NOTE: the ClassWizard will add DDX and DDV calls here
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPropertiesGeneral, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CPropertiesGeneral)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CPropertiesGeneral::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
WIN32_FIND_DATA fd;
|
|
|
|
if (FindFirstFile(m_strFilename, &fd) != INVALID_HANDLE_VALUE)
|
|
{
|
|
char tf[] = "%A, %B %d, %Y %I:%M:%S %p";
|
|
SetDlgItemText(IDC_PROP_GEN_DOSNAME, m_strFilename.Right(m_strFilename.GetLength() - m_strFilename.ReverseFind('\\') - 1));
|
|
SetDlgItemText(IDC_PROP_GEN_LOCATION, m_strFilename.Left(m_strFilename.ReverseFind('\\') + 1));
|
|
|
|
CString str;
|
|
str.Format("%.1fKB (%d bytes)", (float)fd.nFileSizeLow/1024, fd.nFileSizeLow);
|
|
SetDlgItemText(IDC_PROP_GEN_SIZE, str);
|
|
CTime timeFile(fd.ftCreationTime);
|
|
str = timeFile.Format (tf);
|
|
SetDlgItemText(IDC_PROP_GEN_CREATED, str);
|
|
timeFile = fd.ftLastWriteTime;
|
|
str = timeFile.Format (tf);
|
|
SetDlgItemText(IDC_PROP_GEN_MODIFIED, str);
|
|
timeFile = fd.ftLastAccessTime;
|
|
str = timeFile.Format ("%A, %B %d, %Y");
|
|
SetDlgItemText(IDC_PROP_GEN_ACCESSED, str);
|
|
}
|
|
else
|
|
{
|
|
char* str = "(Unknown)";
|
|
SetDlgItemText(IDC_PROP_GEN_CREATED, str);
|
|
SetDlgItemText(IDC_PROP_GEN_MODIFIED, str);
|
|
SetDlgItemText(IDC_PROP_GEN_ACCESSED, str);
|
|
}
|
|
|
|
UpdateData (FALSE);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropertiesSummary property page
|
|
|
|
CPropertiesSummary::CPropertiesSummary() : CPropertyPage(CPropertiesSummary::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CPropertiesSummary)
|
|
m_strAuthor = _T("");
|
|
m_strComments = _T("");
|
|
m_strDescription = _T("");
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CPropertiesSummary::~CPropertiesSummary()
|
|
{
|
|
}
|
|
|
|
void CPropertiesSummary::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPropertiesSummary)
|
|
DDX_Text(pDX, IDC_PROP_SUM_AUTHOR, m_strAuthor);
|
|
DDV_MaxChars(pDX, m_strAuthor, 100);
|
|
DDX_Text(pDX, IDC_PROP_SUM_COMMENTS, m_strComments);
|
|
DDV_MaxChars(pDX, m_strComments, 255);
|
|
DDX_Text(pDX, IDC_PROP_SUM_DESCRIPTION, m_strDescription);
|
|
DDV_MaxChars(pDX, m_strDescription, 100);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPropertiesSummary, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CPropertiesSummary)
|
|
// NOTE: the ClassWizard will add message map macros here
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPropertiesPieces property page
|
|
|
|
CPropertiesPieces::CPropertiesPieces() : CPropertyPage(CPropertiesPieces::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CPropertiesPieces)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CPropertiesPieces::~CPropertiesPieces()
|
|
{
|
|
}
|
|
|
|
void CPropertiesPieces::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CPropertiesPieces)
|
|
DDX_Control(pDX, IDC_PROP_PIECES_LIST, m_List);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPropertiesPieces, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CPropertiesPieces)
|
|
ON_NOTIFY(LVN_COLUMNCLICK, IDC_PROP_PIECES_LIST, OnColumnclickPropPiecesList)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
BOOL CPropertiesPieces::OnInitDialog()
|
|
{
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
char tmp[64];
|
|
int i, j;
|
|
memset (&totalcount, 0, sizeof (totalcount));
|
|
for (i = 0; i < lines; i++)
|
|
for (j = 0; j < LC_MAXCOLORS; j++)
|
|
totalcount[j] += count[i*LC_MAXCOLORS+j];
|
|
|
|
int ID = 0;
|
|
m_List.InsertColumn(0, "Piece", LVCFMT_LEFT, 130, 0);
|
|
for (i = 0; i < LC_MAXCOLORS; i++)
|
|
if (totalcount[i])
|
|
{
|
|
col[i] = ID;
|
|
ID++;
|
|
|
|
CString str;
|
|
str.LoadString(IDS_COLOR01 + i);
|
|
m_List.InsertColumn(ID, (LPCSTR)str, LVCFMT_LEFT, 80, 0);
|
|
}
|
|
else
|
|
col[i] = -1;
|
|
ID++;
|
|
m_List.InsertColumn(ID, "Total", LVCFMT_LEFT, 60, 0);
|
|
|
|
for (i = 0; i < lines; i++)
|
|
{
|
|
int total = 0;
|
|
|
|
for (j = 0; j < LC_MAXCOLORS; j++)
|
|
total += count[i*LC_MAXCOLORS+j];
|
|
|
|
if (total == 0)
|
|
continue;
|
|
|
|
char name[65];
|
|
LV_ITEM lvi;
|
|
lvi.mask = LVIF_TEXT|LVIF_PARAM;
|
|
lvi.iItem = 0;
|
|
lvi.iSubItem = 0;
|
|
lvi.pszText = name;
|
|
lvi.lParam = i;
|
|
strcpy (name, names[i]);
|
|
int idx = m_List.InsertItem(&lvi);
|
|
|
|
for (j = 0; j < LC_MAXCOLORS; j++)
|
|
// if (totalcount[j])
|
|
if (count[i*LC_MAXCOLORS+j])
|
|
{
|
|
sprintf (tmp, "%d", count[i*LC_MAXCOLORS+j]);
|
|
lvi.iItem = idx;
|
|
lvi.pszText = tmp;
|
|
m_List.SetItemText(idx, col[j] + 1, tmp);
|
|
}
|
|
|
|
sprintf (tmp, "%d", total);
|
|
lvi.iItem = idx;
|
|
lvi.pszText = tmp;
|
|
m_List.SetItemText(idx, ID, tmp);
|
|
}
|
|
|
|
m_List.ModifyStyle(LVS_SORTASCENDING | LVS_SORTDESCENDING, 0L);
|
|
|
|
char name[65];
|
|
strcpy (name, "Total");
|
|
LV_ITEM lvi;
|
|
lvi.mask = LVIF_TEXT|LVIF_PARAM;
|
|
lvi.iItem = m_List.GetItemCount();
|
|
lvi.iSubItem = 0;
|
|
lvi.pszText = name;
|
|
lvi.lParam = -1;
|
|
int idx = m_List.InsertItem(&lvi), total = 0;
|
|
|
|
for (i = 0; i < LC_MAXCOLORS; i++)
|
|
if (totalcount[i])
|
|
{
|
|
sprintf (tmp, "%d", totalcount[i]);
|
|
lvi.iItem = idx;
|
|
lvi.pszText = tmp;
|
|
m_List.SetItemText(idx, col[i] + 1, tmp);
|
|
total += totalcount[i];
|
|
}
|
|
|
|
sprintf (tmp, "%d", total);
|
|
lvi.iItem = idx;
|
|
lvi.pszText = tmp;
|
|
m_List.SetItemText(idx, ID, tmp);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
typedef struct
|
|
{
|
|
CPropertiesPieces* page;
|
|
int color;
|
|
} COMPARE_DATA;
|
|
|
|
static int CALLBACK ListViewCompareProc(LPARAM lP1, LPARAM lP2, LPARAM lParamData)
|
|
{
|
|
int i, a, b;
|
|
COMPARE_DATA* data = (COMPARE_DATA*)lParamData;
|
|
|
|
if (data->color == -1)
|
|
{
|
|
// check if we're comparing the "total" row
|
|
if (lP1 == -1)
|
|
return 1;
|
|
else if (lP2 == -1)
|
|
return -1;
|
|
|
|
return strcmpi(data->page->names[lP1], data->page->names[lP2]);
|
|
}
|
|
|
|
// last column
|
|
if (data->color == LC_MAXCOLORS)
|
|
{
|
|
a = b = 0;
|
|
for (i = 0; i < LC_MAXCOLORS; i++)
|
|
{
|
|
a += data->page->count[lP1*LC_MAXCOLORS+i];
|
|
b += data->page->count[lP2*LC_MAXCOLORS+i];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (lP1 == -1)
|
|
a = data->page->totalcount[data->color];
|
|
else
|
|
a = data->page->count[lP1*LC_MAXCOLORS+data->color];
|
|
|
|
if (lP2 == -1)
|
|
b = data->page->totalcount[data->color];
|
|
else
|
|
b = data->page->count[lP2*LC_MAXCOLORS+data->color];
|
|
}
|
|
|
|
if (a == b)
|
|
return 0;
|
|
|
|
if (a < b)
|
|
return -1;
|
|
else
|
|
return 1;
|
|
}
|
|
|
|
void CPropertiesPieces::OnColumnclickPropPiecesList(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
int i;
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
COMPARE_DATA data;
|
|
|
|
data.page = this;
|
|
|
|
if (pNMListView->iSubItem == 0)
|
|
data.color = -1;
|
|
else
|
|
{
|
|
for (i = 0; i < LC_MAXCOLORS; i++)
|
|
if (col[i] == pNMListView->iSubItem-1)
|
|
break;
|
|
|
|
data.color = i;
|
|
}
|
|
|
|
m_List.SortItems((PFNLVCOMPARE)ListViewCompareProc, (LPARAM)&data);
|
|
|
|
*pResult = 0;
|
|
}
|