AyaNova CE Archive added as recovered from storage during attempt to upgrade a customer from v1.7 to v8!
This commit is contained in:
@@ -0,0 +1,230 @@
|
||||
// gzRightsButton.cpp : implementation file
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "sp.h"
|
||||
#include "gzRightsButton.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CgzRightsButton
|
||||
|
||||
CgzRightsButton::CgzRightsButton()
|
||||
{
|
||||
m_nState=0;
|
||||
m_bCanReadOnly=true;//by default
|
||||
m_bModified=false;
|
||||
m_nInitialState=-1;
|
||||
|
||||
//get the current default font
|
||||
::GetObject((HFONT)GetStockObject(DEFAULT_GUI_FONT),sizeof(m_lf),&m_lf);
|
||||
//make it funky
|
||||
m_lf.lfWeight = FW_BOLD ;
|
||||
m_font.DeleteObject();
|
||||
BOOL bCreated = m_font.CreateFontIndirect(&m_lf);
|
||||
|
||||
ASSERT(bCreated);
|
||||
}
|
||||
|
||||
CgzRightsButton::~CgzRightsButton()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
BEGIN_MESSAGE_MAP(CgzRightsButton, CButton)
|
||||
//{{AFX_MSG_MAP(CgzRightsButton)
|
||||
ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
|
||||
ON_CONTROL_REFLECT(BN_DOUBLECLICKED, OnDoubleclicked)
|
||||
//}}AFX_MSG_MAP
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// CgzRightsButton message handlers
|
||||
|
||||
void CgzRightsButton::OnClicked()
|
||||
{
|
||||
//toggle state
|
||||
if(m_nState==0)//no access
|
||||
{
|
||||
m_nState++;
|
||||
Set(m_nState,false);
|
||||
return;
|
||||
}
|
||||
if(m_nState==2)//read only
|
||||
{
|
||||
m_nState=0;
|
||||
Set(m_nState,false);
|
||||
return;
|
||||
}
|
||||
|
||||
if(m_bCanReadOnly)
|
||||
{
|
||||
m_nState=2;
|
||||
Set(m_nState,false);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_nState=0;
|
||||
Set(m_nState,false);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
//***************************************
|
||||
void CgzRightsButton::Set(CString state, bool initialize)
|
||||
{
|
||||
int x=atoi(state);
|
||||
Set(x,initialize);
|
||||
|
||||
}
|
||||
//**************************************
|
||||
void CgzRightsButton::Set(int state, bool initialize)
|
||||
{
|
||||
ASSERT(state <3 && state > -1);
|
||||
//ASSERT(state!=2 && m_bCanReadOnly==false);
|
||||
m_nState = state;
|
||||
//the control is being initialized
|
||||
//so flag as unmodified
|
||||
//and capture the initial state;
|
||||
if(initialize)
|
||||
{
|
||||
m_bModified=false;
|
||||
m_nInitialState=state;
|
||||
}
|
||||
else
|
||||
{
|
||||
//not initializing, so user click
|
||||
//brought us here
|
||||
//check to see if user clicked back
|
||||
//to original value in which case
|
||||
//it's not modified
|
||||
if(m_nInitialState==m_nState)//no longer modified
|
||||
m_bModified=false;
|
||||
else
|
||||
m_bModified=true;
|
||||
}
|
||||
|
||||
|
||||
//force a redraw
|
||||
Invalidate();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
//*****************************************
|
||||
void CgzRightsButton::Get(CString *str)
|
||||
{
|
||||
int x=Get();
|
||||
str->Format("%d",x);
|
||||
}
|
||||
|
||||
|
||||
//***************************************
|
||||
int CgzRightsButton::Get()
|
||||
{
|
||||
return m_nState;
|
||||
}
|
||||
|
||||
void CgzRightsButton::DoesReadOnly(bool ro)
|
||||
{
|
||||
m_bCanReadOnly=ro;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void CgzRightsButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
|
||||
{
|
||||
// TODO: Add your code to draw the specified item
|
||||
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
|
||||
CRect rect = lpDrawItemStruct->rcItem;
|
||||
UINT state = lpDrawItemStruct->itemState;
|
||||
pDC->SelectObject(&m_font);
|
||||
CString strText;
|
||||
|
||||
switch(m_nState)
|
||||
{
|
||||
case 0:
|
||||
strText="None";
|
||||
pDC->SetTextColor(RGB(255,0,0));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
strText="Full";
|
||||
pDC->SetTextColor(RGB(0,150,0));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
strText="View";
|
||||
pDC->SetTextColor(RGB(200,100,0));
|
||||
break;
|
||||
}
|
||||
|
||||
// draw the control edges (DrawFrameControl is handy!)
|
||||
if (state & ODS_SELECTED)
|
||||
pDC->DrawFrameControl(rect, DFC_BUTTON, DFCS_BUTTONPUSH );//| DFCS_PUSHED
|
||||
else
|
||||
pDC->DrawFrameControl(rect, DFC_BUTTON, DFCS_BUTTONPUSH);
|
||||
|
||||
//DFCS_BUTTONPUSH| DFCS_PUSHED
|
||||
|
||||
|
||||
// Deflate the drawing rect by the size of the button's edges
|
||||
rect.DeflateRect( CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));
|
||||
|
||||
//pDC->FillSolidRect(rect, RGB(0, 0, 0));
|
||||
// Draw the text
|
||||
if (!strText.IsEmpty())
|
||||
{
|
||||
CSize Extent = pDC->GetTextExtent(strText);
|
||||
CPoint pt( rect.CenterPoint().x - Extent.cx/2,
|
||||
rect.CenterPoint().y - Extent.cy/2 );
|
||||
|
||||
if (state & ODS_SELECTED)
|
||||
pt.Offset(1,1);
|
||||
|
||||
int nMode = pDC->SetBkMode(TRANSPARENT);
|
||||
|
||||
|
||||
if (state & ODS_DISABLED)
|
||||
pDC->DrawState(pt, Extent, strText, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
|
||||
else
|
||||
pDC->TextOut(pt.x, pt.y, strText);
|
||||
|
||||
pDC->SetBkMode(nMode);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void CgzRightsButton::PreSubclassWindow()
|
||||
{
|
||||
CButton::PreSubclassWindow();
|
||||
ModifyStyle(0, BS_OWNERDRAW);
|
||||
|
||||
}
|
||||
|
||||
bool CgzRightsButton::IsChanged()
|
||||
{
|
||||
return m_bModified;
|
||||
}
|
||||
|
||||
void CgzRightsButton::OnDoubleclicked()
|
||||
{
|
||||
|
||||
//this should make it easier to quickly click multiple changes
|
||||
OnClicked();
|
||||
}
|
||||
Reference in New Issue
Block a user