mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
439 lines
16 KiB
C++
439 lines
16 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
|
|
// Defines a toolbar button
|
|
// Created August 19, 1996 by Scott Putterman
|
|
|
|
|
|
#ifndef _TLBUTTON_H
|
|
#define _TLBUTTON_H
|
|
|
|
#include "winproto.h"
|
|
|
|
#include "tooltip.h"
|
|
|
|
|
|
#define SHOW_ALL_CHARACTERS -1
|
|
|
|
#define TB_DYNAMIC_TOOLTIP 0x1 //Client fills in tooltip
|
|
#define TB_HAS_TIMED_MENU 0x2 //Popup menu shows up on left mouse down after a small period of time
|
|
#define TB_HAS_IMMEDIATE_MENU 0x4 //Popup menu shows up on left mouse down immediately
|
|
#define TB_HAS_DRAGABLE_MENU 0x8 //Popup menu uses a CDropMenu instead of an HMENU. In order for this
|
|
//feature to work, must call SetDropTarget before dragging occurs. And
|
|
//the drop target must be derived from CToolbarButtonDropTarget
|
|
#define TB_DYNAMIC_STATUS 0x10 //Client fills in status message
|
|
|
|
#define TB_HAS_DROPDOWN_TOOLBAR 0x20 // A CDropDownToolbar shows up on left mouse down (used for Composer only)
|
|
|
|
#define NSBUTTONMENUOPEN (WM_USER + 1) // Sent when a button menu is opened and needs to be filled in
|
|
#define NSBUTTONDRAGGING (WM_USER + 2) // Sent when a button is being dragged
|
|
#define NSDRAGMENUOPEN (WM_USER + 3) // Sent when a CDrop menu is being opened and needs to be filled in
|
|
#define NSDRAGGINGONBUTTON (WM_USER + 4) // Sent when something is being dragged ontop of a button
|
|
|
|
#define TB_FILLINTOOLTIP (WM_USER + 8) // Sent when a string for a tooltip needs to be filled in
|
|
#define TB_FILLINSTATUS (WM_USER + 9) // Sent when a string for the status bar needs to be filled in
|
|
#define TB_SIZECHANGED (WM_USER + 30) // Sent when the button changes size
|
|
|
|
typedef struct {
|
|
HWND button;
|
|
} BUTTONITEM;
|
|
|
|
typedef BUTTONITEM * LPBUTTONITEM;
|
|
|
|
#define NETSCAPE_BOOKMARK_BUTTON_FORMAT "Netscape Bookmark Button Format"
|
|
|
|
typedef struct {
|
|
BOOKMARKITEM bookmark;
|
|
BUTTONITEM buttonInfo;
|
|
} BOOKMARKBUTTONITEM;
|
|
|
|
typedef BOOKMARKBUTTONITEM * LPBOOKMARKBUTTONITEM;
|
|
|
|
#define NETSCAPE_COMMAND_BUTTON_FORMAT "Netscape Command Button Format"
|
|
|
|
typedef struct {
|
|
UINT nCommand;
|
|
BUTTONITEM buttonInfo;
|
|
} COMMANDBUTTONITEM;
|
|
|
|
typedef COMMANDBUTTONITEM * LPCOMMANDBUTTONITEM;
|
|
|
|
class CToolbarButton;
|
|
|
|
class CButtonEditWnd : public CEdit
|
|
{
|
|
protected:
|
|
CToolbarButton *m_pOwner;
|
|
public:
|
|
CButtonEditWnd() { m_pOwner = NULL; }
|
|
~CButtonEditWnd();
|
|
|
|
void SetToolbarButtonOwner(CToolbarButton *pOwner);
|
|
virtual BOOL PreTranslateMessage ( MSG * msg );
|
|
|
|
protected:
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CButtonEditWnd)
|
|
afx_msg void OnDestroy();
|
|
afx_msg void OnKillFocus( CWnd* pNewWnd );
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
class CToolbarButtonCmdUI : public CCmdUI
|
|
{
|
|
public: // re-implementations only
|
|
virtual void Enable(BOOL bOn);
|
|
virtual void SetCheck( int nCheck = 1 );
|
|
|
|
|
|
};
|
|
|
|
class CDropMenu;
|
|
class CToolbarButton;
|
|
|
|
#define CToolbarButtonDropTargetBase COleDropTarget
|
|
|
|
class CToolbarButtonDropTarget : public CToolbarButtonDropTargetBase
|
|
{
|
|
protected:
|
|
CToolbarButton *m_pButton;
|
|
|
|
public:
|
|
CToolbarButtonDropTarget(){m_pButton = NULL;}
|
|
void SetButton(CToolbarButton *pButton) { m_pButton = pButton;}
|
|
|
|
protected:
|
|
virtual DROPEFFECT OnDragEnter(CWnd * pWnd,
|
|
COleDataObject * pDataObject, DWORD dwKeyState, CPoint point);
|
|
virtual DROPEFFECT OnDragOver(CWnd * pWnd,
|
|
COleDataObject * pDataObject, DWORD dwKeyState, CPoint point );
|
|
virtual BOOL OnDrop(CWnd * pWnd, COleDataObject * pDataObject,
|
|
DROPEFFECT dropEffect, CPoint point);
|
|
virtual DROPEFFECT ProcessDragEnter(CWnd *pWnd, COleDataObject *pDataObject,
|
|
DWORD dwKeyState, CPoint point) = 0;
|
|
virtual DROPEFFECT ProcessDragOver(CWnd *pWnd, COleDataObject *pDataObject,
|
|
DWORD dwKeyState, CPoint point) = 0;
|
|
virtual BOOL ProcessDrop(CWnd *pWnd, COleDataObject *pDataObject,
|
|
DROPEFFECT dropEffect, CPoint point) = 0;
|
|
|
|
|
|
private:
|
|
|
|
};
|
|
|
|
class CToolbarButton: public CWnd {
|
|
|
|
public:
|
|
// States for button effects
|
|
enum BTN_STATE {eNORMAL, eDISABLED, eBUTTON_UP, eBUTTON_DOWN, eBUTTON_CHECKED};
|
|
|
|
protected:
|
|
BOOL m_bIsResourceID; // does this use a resource or a file
|
|
UINT m_nBitmapID; // the resource of the bitmap
|
|
UINT m_nBitmapIndex; // the index of the bitmap we wish to show
|
|
LPTSTR m_pBitmapFile; // the file in which the bitmap is stored
|
|
LPTSTR m_pButtonText; // the text displayed in Novice mode
|
|
LPTSTR m_pToolTipText; // the text displayed in the tooltip
|
|
LPTSTR m_pStatusText; // the text displayed in the status bar
|
|
int m_nToolbarStyle; // whether or not we are in Novice mode
|
|
CSize m_noviceButtonSize; // the size of the button in Novice mode
|
|
CSize m_advancedButtonSize; // the size of the button in Advanced mode
|
|
CSize m_bitmapSize; // The size of each bitmap in the resource
|
|
int m_nMaxTextChars; // The maximum number of characters of the text shown on button
|
|
int m_nMinTextChars; // The minimum number of characters shown on button
|
|
DWORD m_dwButtonStyle; // the style of the button
|
|
BTN_STATE m_eState; // Current button state
|
|
BOOL m_bEnabled; // Is the button enabled
|
|
BOOL m_bNeedsUpdate; // Does the button need to be disabled/enabled
|
|
CToolbarButtonCmdUI m_state;
|
|
CMenu m_menu; // The menu if the button has one
|
|
CDropMenu* m_pDropMenu; // The drop menu if TB_HAS_DRAGABLE_MENU is set
|
|
UINT m_nCommand; // command associated with this button
|
|
UINT m_hMenuTimer; // The timer we use for starting menu if the button has one
|
|
BOOL m_bMenuShowing; // The menu is showing;
|
|
BOOL m_bButtonDown; // for every button up there must be a button down if an action
|
|
// is to be taken
|
|
UINT m_hFocusTimer; // Timer to see if the button still has focus
|
|
BOOL m_bHaveFocus; // Do we have focus
|
|
HBITMAP m_hBmpImg; // The loaded bitmap
|
|
BOOL m_bBitmapFromParent;// Does the parent own the bitmap or do we have to free it.
|
|
IconType m_nIconType; // The icon type (BITMAP, LOCAL_FILE, ARBITRARY URL)
|
|
int m_nChecked; // Is this button checked
|
|
CNSToolTip2 m_ToolTip;
|
|
BOOL m_bEraseBackground;
|
|
CToolbarButtonDropTarget *m_pDropTarget; //if we are a drop target
|
|
BOOL m_bDraggingOnButton;
|
|
BOOL m_bPicturesOnly; // This button only shows pictures
|
|
BOOL m_bDoOnButtonDown; // Command is executed on button down instead of usual button up
|
|
CButtonEditWnd* m_pTextEdit; // If the text can be edited in place we will need this edit window
|
|
BOOL atMinimalSize; // TRUE if the button is at its minimal size
|
|
BOOL atMaximalSize; // TRUE if the button is at its maximal size
|
|
BOOL m_bDepressed; // Is the button depressed and locked.
|
|
BOOL hasCustomTextColor; // TRUE if the button has a special text color.
|
|
BOOL hasCustomBGColor; // TRUE if the button has a special background color.
|
|
COLORREF customTextColor; // Custom Text Color
|
|
COLORREF customBGColor; // Custom BG Color
|
|
|
|
public:
|
|
|
|
CToolbarButton();
|
|
~CToolbarButton();
|
|
|
|
int Create(CWnd *pParent, int nToolbarStyle, CSize noviceButtonSize, CSize advancedButtonSize,
|
|
LPCTSTR pButtonText, LPCTSTR pToolTipText,
|
|
LPCTSTR pStatusText, UINT nBitmapID, UINT nBitmapIndex,
|
|
CSize m_bitmapSize, BOOL bNeedsUpdate, UINT nCommand, int nMaxTextChars, int nMinTextChars = 0,
|
|
DWORD dwButtonStyle = 0);
|
|
|
|
int Create(CWnd *pParent, int nToolbarStyle, CSize noviceButtonSize, CSize advancedButtonSize,
|
|
LPCTSTR pButtonText, LPCTSTR pToolTipText,
|
|
LPCTSTR pStatusText, LPCTSTR pBitmapFile,
|
|
CSize m_bitmapSize, BOOL bNeedsUpdate, UINT nCommand, int nMaxTextChars, int nMinTextChars = 0,
|
|
DWORD dwButtonStyle = 0);
|
|
|
|
void SetStyle(DWORD dwButtonStyle);
|
|
void SetText(LPCTSTR pButtonText);
|
|
const char *GetToolTipText(void) { return m_pToolTipText; }
|
|
void SetToolTipText(LPCSTR pToolTipText);
|
|
|
|
void SetStatusText(LPCSTR pStatusText);
|
|
|
|
void SetBitmap(HBITMAP hBmpImg, BOOL bParentOwns);
|
|
void ReplaceBitmap(UINT nBitmapID, UINT nBitmapIndex);
|
|
void ReplaceBitmap(LPCTSTR pBitmapFile);
|
|
void ReplaceBitmap(HBITMAP hBmpImg, UINT nBitmapIndex, BOOL bParentOwns);
|
|
void ReplaceBitmapIndex(UINT nBitmapIndex);
|
|
|
|
virtual void DrawCustomIcon(HDC hDC, int x, int y) {};
|
|
virtual void DrawLocalIcon(HDC hDC, int x, int y) {};
|
|
virtual CSize GetButtonSize(void);
|
|
virtual CSize GetRequiredButtonSize(void);
|
|
virtual CSize GetButtonSizeFromChars(CString s, int c);
|
|
virtual CSize GetMaximalButtonSize(void);
|
|
virtual CSize GetMinimalButtonSize(void);
|
|
|
|
BOOL AtMinimalSize(void);
|
|
BOOL AtMaximalSize(void);
|
|
|
|
virtual void CheckForMinimalSize(void);
|
|
virtual void CheckForMaximalSize(void);
|
|
|
|
BOOL IsResourceID(void) { return m_bIsResourceID; }
|
|
UINT GetBitmapID(void) { return m_nBitmapID; }
|
|
UINT GetBitmapIndex(void) { return m_nBitmapIndex; }
|
|
LPCTSTR GetBitmapFile(void) { return m_pBitmapFile; }
|
|
CSize GetBitmapSize(void) { return m_bitmapSize; }
|
|
int GetMaxTextCharacters(void) { return m_nMaxTextChars; }
|
|
int GetMinTextCharacters(void) { return m_nMinTextChars; }
|
|
|
|
BOOL NeedsUpdate(void) { return m_bNeedsUpdate; }
|
|
|
|
void Enable(BOOL bEnabled) { m_bEnabled = bEnabled; }
|
|
BOOL IsEnabled(void) { return m_bEnabled; }
|
|
|
|
void SetCheck(int nCheck);
|
|
int GetCheck(void);
|
|
|
|
void SetPicturesOnly(int bPicturesOnly);
|
|
void SetButtonMode(int nToolbarStyle);
|
|
void SetState(BTN_STATE eState) { m_eState = eState; }
|
|
void SetMenuShowing(BOOL bMenuShowing) {m_bMenuShowing = bMenuShowing; }
|
|
|
|
void SetBitmapSize(CSize sizeImage);
|
|
void SetButtonSize(CSize buttonSize);
|
|
|
|
void SetDropTarget(CToolbarButtonDropTarget *pDropTarget);
|
|
CMenu & GetButtonMenu(void) { return m_menu; }
|
|
UINT GetButtonCommand(void) { return m_nCommand; }
|
|
void SetButtonCommand(UINT nCommand);
|
|
|
|
virtual void OnAction(void) { }
|
|
virtual void FillInOleDataSource(COleDataSource *pDataSource) {}
|
|
|
|
void FillInButtonData(LPBUTTONITEM button);
|
|
|
|
BOOL OnCommand(UINT wParam,LONG lParam);
|
|
virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );
|
|
|
|
virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler);
|
|
|
|
//called when a button is being dragged
|
|
void ButtonDragged(void);
|
|
|
|
void SetDoOnButtonDown(BOOL bDoOnButtonDown) {m_bDoOnButtonDown = bDoOnButtonDown;}
|
|
BOOL IsDoOnButtonDown() {return m_bDoOnButtonDown;}
|
|
|
|
void AddTextEdit(void);
|
|
void RemoveTextEdit(void);
|
|
void SetTextEditText(char *pText);
|
|
char *GetTextEditText(void);
|
|
virtual void EditTextChanged(char *pText);
|
|
|
|
void SetCustomColors(COLORREF textColor, COLORREF bgColor) { hasCustomBGColor = hasCustomTextColor = TRUE; customTextColor = textColor; customBGColor = bgColor; }
|
|
virtual void UpdateIconInfo() {}
|
|
|
|
protected:
|
|
virtual void DrawPicturesAndTextMode(HDC hDC, CRect rect);
|
|
virtual void DrawPicturesMode(HDC hDC, CRect rect);
|
|
virtual void DrawTextMode(HDC hDC, CRect rect);
|
|
virtual void DrawBitmapOnTop(HDC hDC, CRect rect);
|
|
virtual void DrawBitmapOnSide(HDC hDC, CRect rect);
|
|
virtual void DrawTextOnly(HDC hDC, CRect rect);
|
|
virtual void DrawButtonBitmap(HDC hDC, CRect rcImg);
|
|
virtual void DrawButtonText(HDC hDC, CRect rcTxt, CSize sizeTxt, CString strTxt);
|
|
virtual CSize GetBitmapOnTopSize(CString s, int c);
|
|
virtual CSize GetBitmapOnSideSize(CString s, int c);
|
|
virtual CSize GetBitmapOnlySize(void);
|
|
virtual CSize GetTextOnlySize(CString s, int c);
|
|
virtual void DrawUpButton(HDC hDC, CRect & rect);
|
|
virtual void DrawDownButton(HDC hDC, CRect & rect);
|
|
virtual void DrawCheckedButton(HDC hDC, CRect & rect);
|
|
virtual void RemoveButtonFocus(void);
|
|
virtual BOOL CreateRightMouseMenu(void);
|
|
virtual void DisplayAndTrackMenu(void);
|
|
virtual CWnd* GetMenuParent(void);
|
|
virtual void GetTextRect(CRect &rect);
|
|
virtual void GetPicturesAndTextModeTextRect(CRect &rect);
|
|
virtual void GetPicturesModeTextRect(CRect &rect);
|
|
virtual void GetTextModeTextRect(CRect &rect);
|
|
virtual void GetBitmapOnTopTextRect(CRect &rect);
|
|
virtual void GetTextOnlyTextRect(CRect &rect);
|
|
virtual void GetBitmapOnSideTextRect(CRect &rect);
|
|
|
|
virtual CPoint RequestMenuPlacement()
|
|
{
|
|
CPoint point(0, GetRequiredButtonSize().cy);
|
|
ClientToScreen(&point);
|
|
return point;
|
|
}
|
|
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CToolbarButton)
|
|
afx_msg void OnPaint();
|
|
virtual afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
afx_msg UINT OnGetDlgCode( );
|
|
afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
|
|
afx_msg void OnShowWindow( BOOL bShow, UINT nStatus );
|
|
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
|
|
afx_msg void OnCaptureChanged( CWnd* pWnd );
|
|
afx_msg LRESULT OnToolTipNeedText(WPARAM, LPARAM);
|
|
virtual afx_msg void OnTimer( UINT nIDEvent );
|
|
afx_msg LRESULT OnDragMenuOpen(WPARAM, LPARAM);
|
|
afx_msg LRESULT OnDraggingOnButton(WPARAM, LPARAM);
|
|
afx_msg void OnPaletteChanged( CWnd* pFocusWnd );
|
|
afx_msg void OnSysColorChange();
|
|
afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor );
|
|
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
};
|
|
|
|
|
|
// This class represents a toolbar button that can be dragged via drag and drop
|
|
class CDragableToolbarButton: public CToolbarButton {
|
|
|
|
private:
|
|
BOOL m_bDragging; //Are we being dragged
|
|
CPoint m_draggingPoint; //The original point when we started dragging
|
|
|
|
public:
|
|
CDragableToolbarButton();
|
|
|
|
virtual void FillInOleDataSource(COleDataSource *pDataSource) = 0;
|
|
|
|
protected:
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CDragableToolbarButton)
|
|
virtual afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnTimer( UINT nIDEvent );
|
|
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
};
|
|
|
|
// This class represents a toolbar button that cannot be dragged via drag and drop
|
|
class CStationaryToolbarButton: public CToolbarButton {
|
|
|
|
public:
|
|
CStationaryToolbarButton() {}
|
|
|
|
int Create(CWnd *pParent, int nToolbarStyle, CSize noviceButtonSize, CSize advancedButtonSize,
|
|
LPCTSTR pButtonText, LPCTSTR pToolTipText,
|
|
LPCTSTR pStatusText, UINT nBitmapID, UINT nBitmapIndex,
|
|
CSize m_bitmapSize, BOOL bNeedsUpdate, UINT nCommand, int nMaxTextChars,
|
|
DWORD dwButtonStyle = 0, int nMinTextChars = 0);
|
|
|
|
int Create(CWnd *pParent, int nToolbarStyle, CSize noviceButtonSize, CSize advancedButtonSize,
|
|
LPCTSTR pButtonText, LPCTSTR pToolTipText,
|
|
LPCTSTR pStatusText, LPCTSTR pBitmapFile,
|
|
CSize m_bitmapSize, BOOL bNeedsUpdate, UINT nCommand, int nMaxTextChars,
|
|
DWORD dwButtonStyle = 0, int nMinTextChars = 0);
|
|
|
|
protected:
|
|
// Generated message map functions
|
|
//{{AFX_MSG(CStationaryToolbarButton)
|
|
virtual afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
|
virtual afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
};
|
|
|
|
|
|
|
|
class CCommandToolbarButton: public CStationaryToolbarButton {
|
|
|
|
private:
|
|
CWnd *m_pActionOwner;
|
|
|
|
public:
|
|
CCommandToolbarButton();
|
|
|
|
int Create(CWnd *pParent, int nToolbarStyle, CSize noviceButtonSize, CSize advancedButtonSize,
|
|
LPCTSTR pButtonText, LPCTSTR pToolTipText,
|
|
LPCTSTR pStatusText, UINT nBitmapID, UINT nBitmapIndex,
|
|
CSize m_bitmapSize, UINT nCommand, int nMaxTextChars, DWORD dwButtonStyle = 0, int nMinTextChars = 0);
|
|
|
|
int Create(CWnd *pParent, int nToolbarStyle, CSize noviceButtonSize, CSize advancedButtonSize,
|
|
LPCTSTR pButtonText, LPCTSTR pToolTipText,
|
|
LPCTSTR pStatusText, LPCTSTR pBitmapFile,
|
|
CSize m_bitmapSize, UINT nCommand, int nMaxTextChars, DWORD dwButtonStyle = 0, int nMinTextChars = 0);
|
|
|
|
virtual void OnAction(void);
|
|
|
|
virtual void FillInOleDataSource(COleDataSource *pDataSource);
|
|
//Actions will be sent to this owner. If this function is not used then the
|
|
//message will go to the owner frame.
|
|
virtual void SetActionMessageOwner(CWnd *pActionOwner);
|
|
};
|
|
|
|
void WFE_ParseButtonString(UINT nID, CString &statusStr, CString &toolTipStr, CString &textStr);
|
|
#endif
|