// ************************************************************************************** // File: LeashView.h // By: Arthur David Leather // Created: 12/02/98 // Copyright @1998 Massachusetts Institute of Technology - All rights reserved. // Description: H file for LeashView.cpp. Contains variables and functions // for the Leash FormView // // History: // // MM/DD/YY Inits Description of Change // 12/02/98 ADL Original // ************************************************************************************** #if !defined(AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_) #define AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #define GOOD_TICKETS 1 // Don't change this value #define EXPIRED_TICKETS 2 // Don't change this value #define TICKETS_LOW 3 #define ONE_SECOND 1000 #define SMALL_ICONS 16 #define LARGE_ICONS 32 #define UPDATE_DISPLAY_TIME 60 //seconds #define ACTIVE_CLOCK 0 #define LOW_CLOCK 1 #define EXPIRED_CLOCK 2 #define ACTIVE_TICKET 3 #define LOW_TICKET 4 #define EXPIRED_TICKET 5 #define TICKET_NOT_INSTALLED 6 #define ACTIVE_PARENT_NODE 7 #define LOW_PARENT_NODE 8 #define EXPIRED_PARENT_NODE 9 #define NONE_PARENT_NODE 10 #define LOW_TRAY_ICON 11 #define EXPIRED_TRAY_ICON 12 #define ACTIVE_TRAY_ICON 13 #define NONE_TRAY_ICON 14 #define TKT_ADDRESS 15 #define TKT_SESSION 16 #define TKT_ENCRYPTION 17 #define IMAGE_COUNT 18 #define NODE_IS_EXPANDED 2 #define CX_BORDER 1 #define CY_BORDER 1 #ifdef NO_TICKETS #undef NO_TICKETS // XXX - this is evil but necessary thanks to silliness... #endif #define WM_TRAYICON (WM_USER+100) #define WM_WARNINGPOPUP (WM_USER+101) enum ticketTimeLeft{NO_TICKETS, ZERO_MINUTES_LEFT, FIVE_MINUTES_LEFT, TEN_MINUTES_LEFT, FIFTEEN_MINUTES_LEFT, TWENTY_MINUTES_LEFT, PLENTY_OF_TIME, NOT_INSTALLED}; // Don't change 'NO_TICKET's' value class CLeashDebugWindow; class ViewColumnInfo { public: const char * m_name; int m_enabled; int m_id; int m_columnWidth; }; enum eViewColumn { PRINCIPAL, TIME_ISSUED, RENEWABLE_UNTIL, VALID_UNTIL, ENCRYPTION_TYPE, TICKET_FLAGS, CACHE_NAME, NUM_VIEW_COLUMNS }; class CCacheDisplayData { public: CCacheDisplayData(const char *ccache_name) : m_next(NULL), m_ccacheName(strdup(ccache_name)), m_index(-1), m_focus(-1), m_expanded(0), m_selected(0), m_isRenewable(0), m_isDefault(0) { } ~CCacheDisplayData() { if (m_ccacheName) free(m_ccacheName); } CCacheDisplayData *m_next; char *m_ccacheName; int m_index; // item index in list view int m_focus; // sub-item with focus unsigned int m_expanded; // true when each individual ticket is displayed unsigned int m_selected; // true when this ccache is selected unsigned int m_isRenewable; // true when tgt is renewable unsigned int m_isDefault; // true when this is the default ccache }; struct ListItemInfo { ListItemInfo() : m_font(NULL), m_durationFont(NULL) {} HFONT m_durationFont; // For renewable/valid until; italic when expired HFONT m_font; // For all other items }; class CLeashView : public CListView { private: ////@#+Remove CLeashDebugWindow* m_pDebugWindow; CCacheDisplayData* m_ccacheDisplay; CImageList m_imageList; CWinApp* m_pApp; HTREEITEM m_hPrincipal; HTREEITEM m_hKerb5; HTREEITEM m_hk5tkt; TV_INSERTSTRUCT m_tvinsert; HMENU m_hMenu; BOOL m_startup; BOOL m_isMinimum; BOOL m_debugStartUp; BOOL m_alreadyPlayed; INT m_upperCaseRealm; INT m_destroyTicketsOnExit; INT m_debugWindow; INT m_largeIcons; INT m_lowTicketAlarm; INT m_hPrincipalState; INT m_hKerb5State; CString* m_pWarningMessage; BOOL m_bIconAdded; BOOL m_bIconDeleted; HFONT m_BaseFont; HFONT m_BoldFont; HFONT m_ItalicFont; HFONT m_BoldItalicFont; ListItemInfo* m_aListItemInfo; static ViewColumnInfo sm_viewColumns[NUM_VIEW_COLUMNS]; static INT m_autoRenewTickets; static INT m_ticketStatusKrb5; static INT m_autoRenewalAttempted; static INT m_warningOfTicketTimeLeftKrb5; static INT m_warningOfTicketTimeLeftLockKrb5; static INT m_updateDisplayCount; static INT m_alreadyPlayedDisplayCount; static time_t m_ticketTimeLeft; static BOOL m_lowTicketAlarmSound; static LONG m_timerMsgNotInProgress; void ToggleViewColumn(eViewColumn viewOption); VOID ResetTreeNodes(); VOID ApplicationInfoMissingMsg(); VOID GetScrollBarState(CSize sizeClient, CSize& needSb, CSize& sizeRange, CPoint& ptMove, BOOL bInsideClient); VOID UpdateBars(); VOID GetScrollBarSizes(CSize& sizeSb); BOOL GetTrueClientSize(CSize& size, CSize& sizeSb); HFONT GetSubItemFont(int iItem, int iSubItem); //void GetRowWidthHeight(CDC* pDC, LPCSTR theString, int& nRowWidth, // int& nRowHeight, int& nCharWidth); static VOID AlarmBeep(); static VOID CALLBACK EXPORT TimerProc(HWND hWnd, UINT nMsg, UINT_PTR nIDEvent, DWORD dwTime); static VOID UpdateTicketTime(TICKETINFO& ticketinfo); static INT GetLowTicketStatus(int); static time_t LeashTime(); static BOOL IsExpired(TicketList *ticket); static BOOL IsExpired(TICKETINFO *info); static VOID AddDisplayItem(CListCtrl &list, CCacheDisplayData *elem, int iItem, char *principal, time_t issued, time_t valid_until, time_t renew_until, char *encTypes, unsigned long flags, char *cache_name); void SetTrayIcon(int nim, int state=0); void SetTrayText(int nim, CString tip); BOOL UpdateDisplay(); static UINT InitTicket(void *); static UINT RenewTicket(void *); static UINT ImportTicket(void *); // Queue a warning popup message. // This is a workaround to the MFC deficiency that you cannot safely create // a modal dialog while processing messages within AfxPreTranslateMessage() // returns TRUE if message is queued successfully. BOOL PostWarningMessage(const CString& message); afx_msg LRESULT OnWarningPopup(WPARAM wParam, LPARAM lParam); BOOL IsExpanded(TICKETINFO *); protected: // create from serialization only DECLARE_DYNCREATE(CLeashView) // Attributes public: CLeashView(); //LeashDoc* GetDocument(); //{{AFX_DATA(CLeashView) enum { IDD = IDD_DIALOG1 }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Operations public: // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CLeashView) public: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); virtual VOID OnInitialUpdate(); virtual BOOL PreTranslateMessage(MSG* pMsg); protected: virtual VOID OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView); //}}AFX_VIRTUAL // Implementation public: virtual ~CLeashView(); #ifdef _DEBUG virtual VOID AssertValid() const; virtual VOID Dump(CDumpContext& dc) const; #endif // Generated message map functions protected: //{{AFX_MSG(CLeashView) afx_msg VOID OnItemexpandedTreeview(NMHDR* pNMHDR, LRESULT* pResult); afx_msg INT OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg VOID OnShowWindow(BOOL bShow, UINT nStatus); afx_msg VOID OnClose(void); afx_msg VOID OnInitTicket(); afx_msg VOID OnRenewTicket(); afx_msg VOID OnDestroyTicket(); afx_msg VOID OnMakeDefault(); afx_msg VOID OnChangePassword(); afx_msg VOID OnUpdateDisplay(); afx_msg VOID OnSynTime(); afx_msg VOID OnDebugMode(); afx_msg VOID OnLargeIcons(); afx_msg VOID OnTimeIssued(); afx_msg VOID OnValidUntil(); afx_msg VOID OnRenewableUntil(); afx_msg VOID OnShowTicketFlags(); afx_msg VOID OnEncryptionType(); afx_msg VOID OnCcacheName(); afx_msg VOID OnUppercaseRealm(); afx_msg VOID OnKillTixOnExit(); afx_msg VOID OnDestroy(); afx_msg VOID OnUpdateDestroyTicket(CCmdUI* pCmdUI); afx_msg VOID OnUpdateInitTicket(CCmdUI* pCmdUI); afx_msg VOID OnUpdateRenewTicket(CCmdUI* pCmdUI); afx_msg VOID OnUpdateTimeIssued(CCmdUI* pCmdUI); afx_msg VOID OnUpdateValidUntil(CCmdUI* pCmdUI); afx_msg VOID OnUpdateRenewableUntil(CCmdUI* pCmdUI); afx_msg VOID OnUpdateShowTicketFlags(CCmdUI* pCmdUI); afx_msg VOID OnUpdateEncryptionType(CCmdUI* pCmdUI); afx_msg VOID OnUpdateCcacheName(CCmdUI* pCmdUI); afx_msg VOID OnUpdateUppercaseRealm(CCmdUI* pCmdUI); afx_msg VOID OnUpdateKillTixOnExit(CCmdUI* pCmdUI); afx_msg VOID OnUpdateLowTicketAlarm(CCmdUI* pCmdUI); afx_msg VOID OnUpdateAutoRenew(CCmdUI* pCmdUI); afx_msg VOID OnUpdateMakeDefault(CCmdUI* pCmdUI); afx_msg VOID OnAppAbout(); afx_msg VOID OnUpdateDebugMode(CCmdUI* pCmdUI); afx_msg VOID OnUpdateCfgFiles(CCmdUI* pCmdUI); afx_msg VOID OnKrb5Properties(); afx_msg void OnLeashProperties(); afx_msg void OnLeashRestore(); afx_msg void OnLeashMinimize(); afx_msg void OnLowTicketAlarm(); afx_msg void OnUpdateKrb5Properties(CCmdUI* pCmdUI); afx_msg void OnKrbProperties(); afx_msg void OnUpdateProperties(CCmdUI* pCmdUI); afx_msg void OnHelpKerberos(); afx_msg void OnHelpLeash32(); afx_msg void OnHelpWhyuseleash32(); afx_msg void OnSysColorChange(); afx_msg void OnAutoRenew(); afx_msg LRESULT OnGoodbye(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnTrayIcon(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnObtainTGTWithParam(WPARAM wParam, LPARAM lParam); afx_msg void OnItemChanged(NMHDR* pNmHdr, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP() public: afx_msg void OnLvnItemchanging(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnLvnItemActivate(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnLvnKeydown(NMHDR *pNMHDR, LRESULT *pResult); afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult); }; /* #ifndef _DEBUG // debug version in CLeashView.cpp inline LeashDoc* CLeashView::GetDocument() { return (LeashDoc*)m_pDocument; } #endif */ ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. #endif // !defined(AFX_LeashVIEW_H__6F45AD99_561B_11D0_8FCF_00C04FC2A0C2__INCLUDED_)