|
|
// logon.h
//
#if !defined(LOGON__Logon_h__INCLUDED)
#define LOGON__Logon_h__INCLUDED
#pragma once
//#define ANIMATE_FLAG
// Forward declarations
class LogonAccount; #ifdef GADGET_ENABLE_GDIPLUS
enum EFadeDirection; #endif
#define MAX_FLAG_FRAMES 1
#define FLAG_ANIMATION_COUNT 1
class LogonFrame: public HWNDElement, public IElementListener { public: static HRESULT Create(OUT Element** ppElement); // Required for ClassInfo (always fails)
static HRESULT Create(HWND hParent, BOOL fDblBuffer, UINT nCreate, OUT Element** ppElement);
// Generic events
virtual void OnEvent(Event* pEvent);
// System events
virtual void OnInput(InputEvent* pEvent); virtual void OnPropertyChanged(PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew);
virtual Element* GetAdjacent(Element* peFrom, int iNavDir, NavReference const* pnr, bool bKeyable);
// Frame Callbacks
HRESULT OnLogUserOn(LogonAccount* pla); HRESULT OnPower(); HRESULT OnUndock(); HRESULT OnTreeReady(Parser* pParser);
// Listener impl
virtual void OnListenerAttach(Element* peFrom) { peFrom; } virtual void OnListenerDetach(Element* peFrom) { peFrom; } virtual bool OnListenedPropertyChanging(Element* peFrom, PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew) { peFrom; ppi; iIndex; pvOld; pvNew; return true; } virtual void OnListenedPropertyChanged(Element* peFrom, PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew); virtual void OnListenedInput(Element* peFrom, InputEvent* pInput) { peFrom; pInput; } virtual void OnListenedEvent(Element* peFrom, Event* pEvent) { peFrom; pEvent; }
// Operations
static int PointToPixel(int nPoint) { return MulDiv(nPoint, _nDPI, 72); } HINSTANCE GetHInstance() { return _pParser->GetHInstance(); } void HideAccountPanel() { _peRightPanel->SetLayoutPos(LP_None); _peLeftPanel->RemoveLocalValue(WidthProp);} void ShowAccountPanel() { _peRightPanel->SetLayoutPos(BLP_Left); _peLeftPanel->SetWidth(380);} void HideLogoArea() { _peLogoArea->SetLayoutPos(LP_None); } void ShowLogoArea() { _peLogoArea->SetLayoutPos(BLP_Client); } void HideWelcomeArea() { _peMsgArea->SetLayoutPos(LP_None); } void ShowWelcomeArea() { _peMsgArea->SetLayoutPos(BLP_Client); } void HidePowerButton() { _pbPower->SetVisible(false); } void ShowPowerButton() { _pbPower->SetVisible(true); } void SetPowerButtonLabel(LPCWSTR psz) { Element* pe = _pbPower->FindDescendent(StrToID(L"label")); if (pe) pe->SetContentString(psz); } void InsertUndockButton() { _pbUndock->SetLayoutPos(BLP_Top); } void RemoveUndockButton() { _pbUndock->SetLayoutPos(LP_None); } void HideUndockButton() { _pbUndock->SetVisible(false); } void ShowUndockButton() { _pbUndock->SetVisible(true); } void SetUndockButtonLabel(LPCWSTR psz) { Element* pe = _pbUndock->FindDescendent(StrToID(L"label")); if (pe) pe->SetContentString(psz); } void SetStatus(LPCWSTR psz) { if (psz){ _peHelp->SetContentString(psz);}} void SetTitle(UINT uRCID); void SetTitle(LPCWSTR pszTitle); void SetButtonLabels(); HRESULT AddAccount(LPCWSTR pszPicture, BOOL fPicRes, LPCWSTR pszName, LPCWSTR pszUsername, LPCWSTR pszHint, BOOL fLoggedOn, OUT LogonAccount **ppla); NativeHWNDHost* GetNativeHost() {return _pnhh;} void SetNativeHost(NativeHWNDHost *pnhh) {_pnhh = pnhh;} void UpdateUserStatus(BOOL fRefreshAll = false); LogonAccount* FindNamedUser(LPCWSTR pszUsername); void SelectUser(LPCWSTR pszUsername); void ResetUserList(); void Resize(); void SetAnimations(BOOL fAnimations); void ResetTheme();
BOOL UserListAvailable() {return _fListAvailable;} void SetUserListAvailable(BOOL fListAvailable) {_fListAvailable = fListAvailable;} // ClassInfo accessors (static and virtual instance-based)
static IClassInfo* Class; virtual IClassInfo* GetClassInfo() { return Class; } static HRESULT Register();
// state management
void SetState(UINT uNewState) {_nAppState = uNewState;} UINT GetState() {return _nAppState;} BOOL IsPreStatusLock() {return _fPreStatusLock;} void EnterPreStatusMode(BOOL fLock); void EnterLogonMode(BOOL fUnLock); void EnterPostStatusMode(); void EnterHideMode(); void EnterDoneMode(); LRESULT InteractiveLogonRequest(LPCWSTR pszUsername, LPCWSTR pszPassword); void NextFlagAnimate(DWORD dwFrame);
#ifdef GADGET_ENABLE_GDIPLUS
// Animations / Effects
HRESULT FxStartup(); #endif
LogonFrame() { } virtual ~LogonFrame(); HRESULT Initialize(HWND hParent, BOOL fDblBuffer, UINT nCreate);
#ifdef GADGET_ENABLE_GDIPLUS
// Animations / Effects
HRESULT FxFadeAccounts(EFadeDirection dir, float flCommonDelay = 0.0f); HRESULT FxLogUserOn(LogonAccount * pla); static void CALLBACK OnLoginCenterStage(GMA_ACTIONINFO * pmai); #endif
// References to key descendents
Selector* _peAccountList; ScrollViewer* _peViewer; Element* _peRightPanel; Element* _peLeftPanel; Button* _pbPower; Button* _pbUndock; Element* _peHelp; Element* _peOptions; Element* _peMsgArea; Element* _peLogoArea; private: LogonAccount* InternalFindNamedUser(LPCWSTR pszUsername);
static int _nDPI; Parser* _pParser;
BOOL _fListAvailable; BOOL _fPreStatusLock; HWND _hwndNotification; UINT _nStatusID; UINT _nAppState; NativeHWNDHost *_pnhh; Value* _pvHotList; Value* _pvList; HDC _hdcAnimation; HBITMAP _hbmpFlags; DWORD _dwFlagFrame; UINT _nColorDepth; };
class LogonAccountList: public Selector { public: static HRESULT Create(OUT Element** ppElement); // Required for ClassInfo
// System events
virtual void OnPropertyChanged(PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew);
// ClassInfo accessors (static and virtual instance-based)
static IClassInfo* Class; virtual IClassInfo* GetClassInfo() { return Class; } static HRESULT Register();
LogonAccountList() { } virtual ~LogonAccountList() { } HRESULT Initialize() { return Selector::Initialize(); }
#ifdef GADGET_ENABLE_GDIPLUS
// Animations / Effects
HRESULT FxMouseWithin(EFadeDirection dir); #endif
};
// LogonState property enum
#define LS_Pending 0
#define LS_Granted 1
#define LS_Denied 2
#define LAS_Initialized 0
#define LAS_PreStatus 1
#define LAS_Logon 2
#define LAS_PostStatus 3
#define LAS_Hide 4
#define LAS_Done 5
#define LASS_Email 0
#define LASS_LoggedOn 1
class LogonAccount: public Button { public: static HRESULT Create(OUT Element** ppElement); // Required for ClassInfo
// Generic events
virtual void OnEvent(Event* pEvent);
// System events
virtual void OnInput(InputEvent* pEvent); virtual void OnPropertyChanged(PropertyInfo* ppi, int iIndex, Value* pvOld, Value* pvNew);
// Account Callbacks
void OnAuthenticatedUser(); BOOL OnAuthenticateUser(LPCWSTR pszInPassword = NULL); void OnHintSelect(); void OnStatusSelect(UINT nLine); HRESULT OnTreeReady(LPCWSTR pszPicture, BOOL fPicRes, LPCWSTR pszName, LPCWSTR pszUsername, LPCWSTR pszHint, BOOL fLoggedOn, HINSTANCE hInst);
// Operations
static void InitPasswordPanel(Element* pePwdPanel, Edit* pePwdEdit, Button* pbPwdInfo, Element* peKbdIcon) { _pePwdPanel = pePwdPanel; _pePwdEdit = pePwdEdit; _pbPwdInfo = pbPwdInfo; _peKbdIcon = peKbdIcon;} HRESULT InsertPasswordPanel(); HRESULT RemovePasswordPanel(); void InsertStatus(UINT nLine) { _pbStatus[nLine]->SetLayoutPos(BLP_Top); } void RemoveStatus(UINT nLine) { _pbStatus[nLine]->SetLayoutPos(LP_None); } void HideStatus(UINT nLine) { _pbStatus[nLine]->SetVisible(false); } void ShowStatus(UINT nLine) { _pbStatus[nLine]->SetVisible(true); } void SetStatus(UINT nLine, LPCWSTR psz); void DisableStatus(UINT nLine) { _pbStatus[nLine]->SetEnabled(false); } void ShowPasswordIncorrectMessage(); void UpdateNotifications(BOOL fUpdateEverything); void AppRunningTip(); void UnreadMailTip(); BOOL IsPasswordBlank();
#ifdef GADGET_ENABLE_GDIPLUS
void ShowEdit(); void HideEdit(); #endif
// Cached atoms for quicker identification
static ATOM idPwdGo; static ATOM idPwdInfo;
// Property definitions
static PropertyInfo* LogonStateProp;
// Quick property accessors
int GetLogonState() DUIQuickGetter(int, GetInt(), LogonState, Specified) HRESULT SetLogonState(int v) DUIQuickSetter(CreateInt(v), LogonState) void SetRunningApps(DWORD dwRunningApps) {_dwRunningApps = dwRunningApps;} void SetUnreadMail(DWORD dwUnreadMail) {_dwUnreadMail = dwUnreadMail;} LPCWSTR GetUsername() {return _pvUsername->GetString();} static LogonAccount* GetCandidate() { return _peCandidate; } static void ClearCandidate() { _peCandidate = NULL; } static void SetKeyboardIcon(HICON hIcon); // ClassInfo accessors (static and virtual instance-based)
static IClassInfo* Class; virtual IClassInfo* GetClassInfo() { return Class; } static HRESULT Register();
#ifdef GADGET_ENABLE_GDIPLUS
// Animations / Effects
HRESULT FxLogUserOn(); #endif
LogonAccount() { } virtual ~LogonAccount(); HRESULT Initialize();
#ifdef GADGET_ENABLE_GDIPLUS
// Animations / Effects
HRESULT FxMouseWithin(EFadeDirection dir); #endif
// References to key descendents
Button* _pbStatus[2];
static Element* _pePwdPanel; static Edit* _pePwdEdit; static Button* _pbPwdInfo; static Element* _peKbdIcon; static LogonAccount* _peCandidate; Value* _pvUsername; Value* _pvHint; BOOL _fPwdNeeded; BOOL _fLoggedOn; BOOL _fHasPwdPanel; DWORD _dwUnreadMail; DWORD _dwRunningApps; };
void CALLBACK LogonParseError(LPCWSTR pszError, LPCWSTR pszToken, int dLine);
#endif // LOGON__Logon_h__INCLUDED
|