357 lines
12 KiB
C
357 lines
12 KiB
C
|
/**********************************************************************
|
||
|
* FontView.h - Definition for the CFontView, our implementation for
|
||
|
* the IShellView in our browser.
|
||
|
*
|
||
|
**********************************************************************/
|
||
|
|
||
|
#if !defined(__FONTVIEW_H__)
|
||
|
#define __FONTVIEW_H__
|
||
|
|
||
|
#ifndef __EXTRICON_H__
|
||
|
#include "extricon.h"
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Defining the macro TOOLTIP_FONTSAMPLE activates code to display a
|
||
|
// font sample in a tooltip window whenever the mouse cursor pauses over
|
||
|
// an item in the font folder. This is currently an experimental feature
|
||
|
// so I want to allow conditional compilation for now. If it goes into
|
||
|
// the product, the conditional compilation directives may be removed.
|
||
|
// [brianau - 5/17/97].
|
||
|
//
|
||
|
#define TOOLTIP_FONTSAMPLE 1
|
||
|
|
||
|
// Forward declarations.
|
||
|
class CFontClass;
|
||
|
class CFontList;
|
||
|
class CFontView;
|
||
|
class CFontManager;
|
||
|
|
||
|
VOID InstallDataObject( LPDATAOBJECT pdobj, DWORD dwEffect, HWND hWnd, CFontView * poView = NULL);
|
||
|
|
||
|
// ********************************************************************
|
||
|
|
||
|
|
||
|
class CFontData : public IDataObject
|
||
|
{
|
||
|
public:
|
||
|
// ctor, dtor, and init.
|
||
|
//
|
||
|
CFontData();
|
||
|
~CFontData();
|
||
|
BOOL bInit( CFontList * poList );
|
||
|
CFontList *poDetachList(void);
|
||
|
CFontList *poCloneList(void);
|
||
|
|
||
|
// *** IUnknown methods ***
|
||
|
|
||
|
STDMETHODIMP QueryInterface( REFIID riid, LPVOID * ppvObj );
|
||
|
STDMETHODIMP_(ULONG) AddRef( void );
|
||
|
STDMETHODIMP_(ULONG) Release( void );
|
||
|
|
||
|
// **** IDataObject ****
|
||
|
//
|
||
|
STDMETHODIMP GetData( FORMATETC *pformatetcIn, STGMEDIUM *pmedium );
|
||
|
STDMETHODIMP GetDataHere( FORMATETC *pformatetc, STGMEDIUM *pmedium );
|
||
|
STDMETHODIMP QueryGetData( FORMATETC *pformatetc );
|
||
|
|
||
|
STDMETHODIMP GetCanonicalFormatEtc( FORMATETC *pformatectIn,
|
||
|
FORMATETC *pformatetcOut );
|
||
|
|
||
|
STDMETHODIMP SetData( FORMATETC *pformatetc,
|
||
|
STGMEDIUM *pmedium,
|
||
|
BOOL fRelease );
|
||
|
|
||
|
STDMETHODIMP EnumFormatEtc( DWORD dwDirection,
|
||
|
IEnumFORMATETC **ppenumFormatEtc );
|
||
|
|
||
|
STDMETHODIMP DAdvise( FORMATETC *pformatetc,
|
||
|
DWORD advf,
|
||
|
IAdviseSink *pAdvSink,
|
||
|
DWORD *pdwConnection);
|
||
|
|
||
|
STDMETHODIMP DUnadvise( DWORD dwConnection);
|
||
|
|
||
|
STDMETHODIMP EnumDAdvise( IEnumSTATDATA **ppenumAdvise );
|
||
|
|
||
|
// Additional public interfaces.
|
||
|
//
|
||
|
BOOL bAFR(); // AddFontResource() for each of these
|
||
|
BOOL bRFR(); // RemoveFontResource for each object.
|
||
|
|
||
|
static CLIPFORMAT s_CFPerformedDropEffect; // Performed Drop Effect CF atom.
|
||
|
static CLIPFORMAT s_CFPreferredDropEffect;
|
||
|
static CLIPFORMAT s_CFLogicalPerformedDropEffect;
|
||
|
|
||
|
//
|
||
|
// Get the performed data transfer effect from the Data Object.
|
||
|
//
|
||
|
DWORD GetPerformedDropEffect(void)
|
||
|
{ return m_dwPerformedDropEffect; }
|
||
|
void SetPerformedDropEffect(DWORD dwEffect)
|
||
|
{ m_dwPerformedDropEffect = dwEffect; }
|
||
|
|
||
|
DWORD GetLogicalPerformedDropEffect(void)
|
||
|
{ return m_dwLogicalPerformedDropEffect; }
|
||
|
void SetLogicalPerformedDropEffect(DWORD dwEffect)
|
||
|
{ m_dwLogicalPerformedDropEffect = dwEffect; }
|
||
|
|
||
|
DWORD GetPreferredDropEffect(void)
|
||
|
{ return m_dwPreferredDropEffect; }
|
||
|
void SetPreferredDropEffect(DWORD dwEffect)
|
||
|
{ m_dwPreferredDropEffect = dwEffect; }
|
||
|
|
||
|
private:
|
||
|
int m_cRef;
|
||
|
CFontList * m_poList;
|
||
|
|
||
|
DWORD m_dwPerformedDropEffect; // DROPEFFECT_XXXX.
|
||
|
DWORD m_dwPreferredDropEffect; // DROPEFFECT_XXXX.
|
||
|
DWORD m_dwLogicalPerformedDropEffect;
|
||
|
|
||
|
HRESULT ReleaseStgMedium(LPSTGMEDIUM pmedium);
|
||
|
};
|
||
|
|
||
|
|
||
|
// ********************************************************************
|
||
|
class CFontView : public IShellView, public IDropTarget, public IPersistFolder
|
||
|
{
|
||
|
public:
|
||
|
CFontView(void);
|
||
|
~CFontView( );
|
||
|
|
||
|
int Compare( CFontClass * pFont1, CFontClass * pFont2 );
|
||
|
void vShapeView( );
|
||
|
|
||
|
// *** IUnknown methods ***
|
||
|
|
||
|
STDMETHODIMP QueryInterface( REFIID riid, LPVOID * ppvObj );
|
||
|
STDMETHODIMP_(ULONG) AddRef( void );
|
||
|
STDMETHODIMP_(ULONG) Release( void );
|
||
|
|
||
|
// *** IOleWindow methods ***
|
||
|
|
||
|
STDMETHODIMP GetWindow( HWND * lphwnd );
|
||
|
STDMETHODIMP ContextSensitiveHelp( BOOL fEnterMode );
|
||
|
|
||
|
// *** IShellView methods ***
|
||
|
|
||
|
STDMETHODIMP TranslateAccelerator( LPMSG msg );
|
||
|
STDMETHODIMP EnableModeless( BOOL fEnable );
|
||
|
STDMETHODIMP UIActivate( UINT uState );
|
||
|
STDMETHODIMP Refresh( void );
|
||
|
|
||
|
STDMETHODIMP CreateViewWindow( IShellView * lpPrevView,
|
||
|
LPCFOLDERSETTINGS lpfs,
|
||
|
IShellBrowser * psb,
|
||
|
RECT * prcView,
|
||
|
HWND * phwnd);
|
||
|
|
||
|
STDMETHODIMP DestroyViewWindow( void );
|
||
|
STDMETHODIMP GetCurrentInfo( LPFOLDERSETTINGS lpfs );
|
||
|
STDMETHODIMP AddPropertySheetPages( DWORD dwReserved,
|
||
|
LPFNADDPROPSHEETPAGE lpfn,
|
||
|
LPARAM lparam);
|
||
|
|
||
|
STDMETHODIMP SaveViewState( void );
|
||
|
STDMETHODIMP SelectItem( LPCITEMIDLIST lpvID, UINT uFlags );
|
||
|
STDMETHODIMP GetItemObject( UINT uItem, REFIID riid, LPVOID *ppv );
|
||
|
|
||
|
|
||
|
// **** IDropTarget ****
|
||
|
//
|
||
|
STDMETHODIMP DragEnter( IDataObject __RPC_FAR *pDataObj,
|
||
|
DWORD grfKeyState, POINTL pt,
|
||
|
DWORD __RPC_FAR *pdwEffect );
|
||
|
|
||
|
STDMETHODIMP DragOver( DWORD grfKeyState,
|
||
|
POINTL pt,
|
||
|
DWORD __RPC_FAR *pdwEffect );
|
||
|
|
||
|
STDMETHODIMP DragLeave( void );
|
||
|
|
||
|
STDMETHODIMP Drop( IDataObject __RPC_FAR *pDataObj,
|
||
|
DWORD grfKeyState,
|
||
|
POINTL pt,
|
||
|
DWORD __RPC_FAR *pdwEffect );
|
||
|
|
||
|
// *** IPersist methods ***
|
||
|
|
||
|
STDMETHODIMP GetClassID( LPCLSID lpClassID );
|
||
|
|
||
|
// *** IPersistFolder methods ***
|
||
|
|
||
|
STDMETHODIMP Initialize( LPCITEMIDLIST pidl );
|
||
|
|
||
|
public:
|
||
|
void StatusPush( UINT nStatus );
|
||
|
void StatusPush( LPTSTR lpsz );
|
||
|
void StatusPop( );
|
||
|
void StatusClear( );
|
||
|
//
|
||
|
// Exposing this is a violation of the design of this object.
|
||
|
// However, it is needed so that we can provide a parent to the installation
|
||
|
// progress dialog.
|
||
|
//
|
||
|
HWND GetViewWindow(void)
|
||
|
{ return m_hwndView; }
|
||
|
DWORD GetDateReading(void)
|
||
|
{ return m_dwDateFormat; }
|
||
|
|
||
|
IDataObject *m_pdtobjHdrop; // Used to support drag-drop from Win3.1 app.
|
||
|
|
||
|
private:
|
||
|
enum CLICKMODE
|
||
|
{
|
||
|
CLICKMODE_SINGLE = 1,
|
||
|
CLICKMODE_DOUBLE = 2,
|
||
|
};
|
||
|
|
||
|
int RegisterWindowClass( );
|
||
|
STDMETHODIMP GetSavedViewState( );
|
||
|
void SortObjects( );
|
||
|
void FillObjects( );
|
||
|
int AddObject( CFontClass * poFont );
|
||
|
LRESULT BeginDragDrop( NM_LISTVIEW FAR *lpn );
|
||
|
int OnActivate( UINT state );
|
||
|
int OnDeactivate( );
|
||
|
int MergeToolbar( );
|
||
|
static INT_PTR CALLBACK FontViewDlgProc( HWND, UINT, WPARAM, LPARAM );
|
||
|
static LRESULT CALLBACK FontViewWndProc( HWND, UINT, WPARAM, LPARAM );
|
||
|
static INT_PTR CALLBACK OptionsDlgProc( HWND, UINT, WPARAM, LPARAM) ;
|
||
|
int OnMenuSelect( HWND hWnd, UINT nID, UINT nFlags, HMENU hMenu );
|
||
|
int OnCommand( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
|
||
|
int OnNotify( LPNMHDR lpn );
|
||
|
VOID OnLVN_ItemActivate(LPNMITEMACTIVATE pnma);
|
||
|
void OnDropFiles( HDROP hDrop, DWORD dwEffect = DROPEFFECT_MOVE );
|
||
|
void OnCmdCutCopy( UINT nID );
|
||
|
void OnCmdDelete( );
|
||
|
void OnCmdPaste( );
|
||
|
void OnCmdProperties( );
|
||
|
void OnPointSize( int nPlus );
|
||
|
void OnHelpTopics( HWND hWnd );
|
||
|
INT ItemImageIndex(CFontClass *poFont);
|
||
|
CLICKMODE SetListviewClickMode(VOID);
|
||
|
void UpdateUnderlines(void);
|
||
|
void LV_OnGetInfoTip(LPNMLVGETINFOTIP lpnm);
|
||
|
|
||
|
#ifdef TOOLTIP_FONTSAMPLE
|
||
|
VOID LV_OnHoverNotify(LPNMLISTVIEW pnmlv);
|
||
|
BOOL CreateToolTipWindow(VOID);
|
||
|
VOID UpdateFontSample(INT iItem);
|
||
|
#endif //TOOLTIP_FONTSAMPLE
|
||
|
|
||
|
//
|
||
|
// Functions to support Attributes column in details view and
|
||
|
// alternate coloring of compressed files.
|
||
|
//
|
||
|
int OnShellChangeNotify(WPARAM wParam, LPARAM lParam);
|
||
|
int OnCustomDrawNotify(LPNMHDR lpn);
|
||
|
void UpdateFontViewObject(CFontClass *poFont);
|
||
|
int CompareByFileAttributes(CFontClass *poFont1, CFontClass *poFont2);
|
||
|
LPTSTR BuildAttributeString(DWORD dwAttributes, LPTSTR pszString, UINT nChars);
|
||
|
|
||
|
//
|
||
|
// Functions to support drag-drop from Win3.1 app.
|
||
|
//
|
||
|
void OldDAD_DropTargetLeaveAndReleaseData(void);
|
||
|
LRESULT OldDAD_HandleMessages(UINT message, WPARAM wParam, const DROPSTRUCT *lpds);
|
||
|
|
||
|
|
||
|
#ifdef USE_OWNERDRAW
|
||
|
void SetDimensions( );
|
||
|
BOOL OnMeasureItem( LPMEASUREITEMSTRUCT lpmi );
|
||
|
BOOL OnDrawItem( LPDRAWITEMSTRUCT lpdi );
|
||
|
#endif
|
||
|
|
||
|
void UpdateMenuItems( HMENU hMenu );
|
||
|
void UpdateToolbar( );
|
||
|
LRESULT ProcessMessage( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
|
||
|
BOOL OpenCurrent( );
|
||
|
BOOL PrintCurrent( );
|
||
|
BOOL ViewValue( CFontClass * poFont );
|
||
|
BOOL PrintValue( CFontClass *poFont );
|
||
|
|
||
|
void vLoadCombo( );
|
||
|
void SetViewMode( UINT uMode );
|
||
|
void UpdatePanColumn( );
|
||
|
void vToggleSelection( BOOL bSelectAll );
|
||
|
int iCurrentSelection( );
|
||
|
|
||
|
HRESULT GetUIObjectFromItem( REFIID riid, LPVOID FAR *ppobj, UINT nItem );
|
||
|
HRESULT GetFontList( CFontList **ppoList, UINT nItem );
|
||
|
void ReleaseFontObjects(void);
|
||
|
void UpdateSelectedCount();
|
||
|
|
||
|
|
||
|
private:
|
||
|
int m_cRef;
|
||
|
// int m_iCurrentSelection;
|
||
|
BOOL m_bFamilyOnly;
|
||
|
CFontClass * m_poPanose;
|
||
|
HWND m_hwndView;
|
||
|
HWND m_hwndList;
|
||
|
HWND m_hwndText;
|
||
|
HWND m_hwndCombo;
|
||
|
HWND m_hwndParent;
|
||
|
HWND m_hwndNextClip; // Next window in the viewer chain
|
||
|
|
||
|
DWORD m_dwDateFormat;
|
||
|
|
||
|
#ifdef TOOLTIP_FONTSAMPLE
|
||
|
HWND m_hwndToolTip; // Tooltip window handle.
|
||
|
BOOL m_bShowPreviewToolTip;// User preference setting.
|
||
|
LPTSTR m_pszSampleText; // Sample string used for character fonts.
|
||
|
LPTSTR m_pszSampleSymbols; // Sample string used for symbol fonts.
|
||
|
INT m_iTTLastHit; // Last item with active tooltip.
|
||
|
HFONT m_hfontSample; // Font for displaying sample in tooltip window.
|
||
|
#endif // TOOLTIP_FONTSAMPLE
|
||
|
|
||
|
|
||
|
HIMAGELIST m_hImageList;
|
||
|
HIMAGELIST m_hImageListSmall;
|
||
|
int m_iFirstBitmap;
|
||
|
HMENU m_hmenuCur;
|
||
|
IShellBrowser* m_psb;
|
||
|
|
||
|
UINT m_uState; // Deactivated, active-focus, active-nofocus
|
||
|
UINT m_idViewMode;
|
||
|
UINT m_ViewModeReturn;
|
||
|
UINT m_fFolderFlags;
|
||
|
UINT m_nComboWid;
|
||
|
int m_iSortColumn;
|
||
|
int m_iSortLast;
|
||
|
BOOL m_bSortAscending; // TRUE = ascending, FALSE = descending.
|
||
|
CLICKMODE m_iViewClickMode; // CLICKMODE_SINGLE or CLICKMODE_DOUBLE.
|
||
|
|
||
|
DWORD m_dwEffect; // Drag/drop effect.
|
||
|
DWORD m_dwOldDADEffect; // Drag/drop effect for Win3.1-style drops.
|
||
|
DWORD m_grfKeyState;
|
||
|
BOOL m_bDragSource;
|
||
|
int m_iHidden;
|
||
|
HANDLE m_hAccel;
|
||
|
BOOL m_bResizing; // Resizing the view window ?
|
||
|
BOOL m_bUIActivated; // UI Activated through UIActivate( )
|
||
|
// This flag is used to prevent processing
|
||
|
// NM_SETFOCUS before UIActivate( ) has
|
||
|
// been called.
|
||
|
ULONG m_uSHChangeNotifyID; // Registered shell change notification ID.
|
||
|
CFontIconHandler m_IconHandler;
|
||
|
CFontManager *m_poFontManager;
|
||
|
|
||
|
#ifdef WINNT
|
||
|
BOOL m_bShowCompColor; // T = user want's alternate color for compressed items.
|
||
|
#endif // WINNT
|
||
|
BOOL m_bShowHiddenFonts;
|
||
|
|
||
|
#ifdef USE_OWNERDRAW
|
||
|
// DrawItem measurements for the listview.
|
||
|
//
|
||
|
UINT m_nItemHeight;
|
||
|
#endif
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // __FONTVIEW_H__
|