pjs/cmd/winfe/toolbar2.h

259 строки
8.0 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.
*/
// Creates a class that will represent the new toolbar which can hold
// the new buttons for the customizable toolbar.
#ifndef _TOOLBAR2_H
#define _TOOLBAR2_H
#include <afxwin.h>
#include <afxext.h>
#include <afxpriv.h>
#include <afxole.h>
#include <afxdisp.h>
#include <afxodlgs.h>
#ifdef _WIN32
#include <afxcmn.h>
#endif
#include "tlbutton.h"
#include "csttlbr2.h"
#define TOOLBAR_WIDTH_CHANGED (WM_USER + 31)
#define TOOLBAR_BUTTON_ADD (WM_USER + 40)
#define TOOLBAR_BUTTON_REMOVE (WM_USER + 41)
#define TOOLBAR_BUTTON_DELETED (WM_USER + 42)
class CToolbarDropSource : public COleDropSource {
public:
CToolbarDropSource() {}
SCODE GiveFeedback( DROPEFFECT dropEffect);
};
class CCustToolbar;
class CNSToolbar2 : public CWnd {
//DECLARE_DYNCREATE(CNSToolbar2)
protected:
BOOL m_bEraseBackground;
int m_nMaxButtons; // The maximum number of buttons this toolbar can hold
BOOL m_nToolbarStyle; // whether we are in novice or advanced mode
int m_nPicturesAndTextHeight; // Our height when we are in novice mode
int m_nPicturesHeight;
int m_nTextHeight; // Our height when we are in advanced mode
CToolbarButton** m_pButtonArray; // The array of toolbar buttons
int m_nNumButtons; // The number of buttons we currently hold
int m_nHeight; // Our current height
int m_nWidth; // Our current required width given all of the buttons
BOOL m_bDragging; // Are we currently dragging a button
int m_nDraggingButton; // Index of button we are dragging
CPoint m_draggingPoint; // Point we started dragging from
CCustToolbar* m_pCustToolbar; // A pointer to the customizable toolbar it belongs to
int m_nMaxButtonWidth; // The width of the widest button
int m_nMaxButtonHeight;// The height of the tallest button
HBITMAP m_hBitmap; // Bitmap to be used for toolbar (doesn't have to have one);
CPtrArray m_pHiddenButtons; // Buttons we are keeping track of but aren't currently showing;
BOOL m_bButtonsSameWidth;// Are all the buttons the width of the largest one or
// their own individual widths
UINT m_nBitmapID; // The toolbar's bitmap
public:
CNSToolbar2(){}
CNSToolbar2(int nMaxButtons, int nToolbarStyle, int nPicturesAndTextHeight, int nPicturesHeight, int nTextHeight);
~CNSToolbar2();
int Create(CWnd *pParent);
virtual void AddButtonAtIndex(CToolbarButton *pButton, int index = -1, BOOL bNotify = TRUE);
virtual int AddButtonAtPoint(CToolbarButton *pButton, CPoint point, BOOL bAddButton = TRUE);
virtual void AddButton(CToolbarButton* pButton, int index = -1) { AddButtonAtIndex(pButton, index); }
void AddHiddenButton(CToolbarButton *pButton);
CToolbarButton* RemoveButton(int nIndex, BOOL bNotify = TRUE);
CToolbarButton* RemoveButton(CToolbarButton *pButton);
CToolbarButton* RemoveButtonByCommand(UINT nCommand);
void DecrementButtonCount() { m_nNumButtons--; }
virtual BOOL ShouldClipChildren() { return TRUE; }
void HideButtonByCommand(UINT nCommand);
void ShowButtonByCommand(UINT nCommand, int nPos);
void RemoveAllButtons(void);
CToolbarButton *ReplaceButton(UINT nCommand, CToolbarButton *pNewButton);
void ReplaceButton(UINT nOldCommand, UINT nNewCommand);
CToolbarButton* GetNthButton(int nIndex);
CToolbarButton* GetButton(UINT nID); //Added by cmanske
int GetNumButtons(void);
void SetBitmap(UINT nBitmapID);
void SetBitmap(char *pBitmapFile);
HBITMAP GetBitmap(void);
// Sets each buttons bitmap to be nWidth by nHeight;
void SetBitmapSize(int nWidth, int nHeight);
void SetToolbarStyle(int nToolbarStyle);
BOOL GetToolbarStyle(void) {return m_nToolbarStyle;}
void LayoutButtons(void);
virtual void LayoutButtons(int nStartIndex);
virtual void WidthChanged(int width) {}; // used by personal toolbar.
BOOL GetButtonRect(UINT nID, RECT *pRect);
void SetCustomizableToolbar(CCustToolbar* pCustToolbar);
CCustToolbar *GetCustomizableToolbar(void);
virtual int GetHeight(void);
int GetWidth(void);
void SetButtonsSameWidth(BOOL bButtonsSameWidth);
BOOL GetButtonsSameWidth(void) { return m_bButtonsSameWidth; }
void ReplaceButtonBitmapIndex(UINT nID, UINT nIndex);
BOOL OnCommand( WPARAM wParam, LPARAM lParam );
virtual BOOL OnNotify( WPARAM wParam, LPARAM lParam, LRESULT* pResult );
void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
void UpdateURLBars(char* url);
// Set a button to do its command on button down instead of button up
BOOL SetDoOnButtonDownByCommand(UINT nCommand, BOOL bDoOnButtonDown);
// Generated message map functions
//{{AFX_MSG(CNSToolbar2)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LRESULT OnButtonDrag(WPARAM, LPARAM);
afx_msg void OnShowWindow( BOOL bShow, UINT nStatus );
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnPaint(void);
afx_msg LRESULT OnToolbarButtonSizeChanged(WPARAM, LPARAM);
afx_msg void OnPaletteChanged( CWnd* pFocusWnd );
afx_msg void OnSysColorChange( );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
protected:
int FindButton(CPoint point);
int FindButton(CWnd *pButton);
int FindButton(UINT nCommand);
void MoveButton(int nIndex);
BOOL CheckMaxButtonSizeChanged(CToolbarButton *pButton, BOOL bAdd);
void ChangeButtonSizes(void);
BOOL FindLargestButton(void);
//Given an index, this says where a button starts and where it ends
void GetButtonXPosition(int nSelection,int & nStart,int & nEnd);
int FindButtonFromBoundary(int boundary, BOOL bIsBefore);
};
class CCommandToolbarDropTarget : public COleDropTarget
{
public:
CCommandToolbarDropTarget() {}
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);
private:
};
class CCommandToolbar : public CNSToolbar2 {
//private:
CCommandToolbarDropTarget m_DropTarget;
public:
CCommandToolbar(int nMaxButtons, int nToolbarStyle, int nPicturesAndTextHeight, int nPicturesHeight,
int nTextHeight);
int Create(CWnd *pParent);
virtual int GetHeight(void);
// Generated message map functions
//{{AFX_MSG(CCommandToolbar)
afx_msg int OnCreate ( LPCREATESTRUCT );
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
class CToolbarControlBar : public CControlBar {
protected:
CNSToolbar2 *m_pToolbar;
BOOL m_bEraseBackground;
public:
CToolbarControlBar();
~CToolbarControlBar();
//Creation
int Create(CFrameWnd *pParent, DWORD dwStyle, UINT nID );
//Positioning/Resizing
virtual CSize CalcDynamicLayout(int nLength, DWORD dwMode );
virtual void OnUpdateCmdUI( CFrameWnd* pTarget, BOOL bDisableIfNoHndler );
void SetToolbar(CNSToolbar2 *pToolbar) { m_pToolbar = pToolbar; }
CNSToolbar2* GetToolbar(void) { return m_pToolbar; }
// Generated message map functions
//{{AFX_MSG(CToolbarControlBar)
afx_msg void OnShowWindow( BOOL bShow, UINT nStatus );
afx_msg BOOL OnEraseBkgnd( CDC* pDC );
afx_msg void OnSize( UINT nType, int cx, int cy );
afx_msg void OnPaint(void);
#ifndef WIN32
afx_msg LRESULT OnSizeParent(WPARAM wParam, LPARAM lParam);
#endif
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif