FLImaging 7.7.1.1
GUIPropertyGridCtrl.h
1#pragma once
9
10#include <vector>
11#include <unordered_map>
12#include "DefinitionsGUI.h"
13#include "GUIStyledCtrlBase.h"
14
15#define AFX_STRETCH_DELTA 2
16
18namespace FLImaging
19{
21 namespace GUI
22 {
23 class CGUIMainFrame;
24 class CGUIPaneProperties;
27 class CGUIPropertyGridPropertyDropdownList;
28 class CGUIPropertyGridPropertyViewGraphList;
29 class CGUIPropertyGridPropertyViewImageList;
30 class CGUIPropertyGridPropertyView3DList;
31 class CGUIPropertyGridPropertyBase;
32 class CGUIPropertyGridToolTipCtrl;
33 class CGUIPropertyGridPropertyCategory;
34 class CGUIPropertyGridPropertyRadioButtonGroup;
35 class CGUIPropertyGridPropertyRadioButton;
36 class CGUIPropertyGridPropertySliderDualHandle;
37 class CGUIScrollBarOwnerDrawn;
39
52 class FL_EXPORT CGUIPropertyGridCtrl : public CMFCPropertyGridCtrl, public CGUIStyledCtrlBase
53 {
54 friend class CGUIPropertyGridPropertySliderDualHandle;
55 friend class CGUIPropertyGridPropertySlider;
56 friend class CGUIPropertyGridPropertyDraggableSpin;
57 friend class CGUIDialogPropertyImageFigureDrawingAttribute;
58 friend class CGUIPropertyGridPropertyCategory;
59 friend class CGUIPropertyGridPropertyCheckBox;
60 friend class CGUIPropertyGridPropertySheet;
61 public:
74
87
98 virtual void AdjustLayout() override;
99
115
126 virtual void AdjustLayoutAsync();
127
139 void GetPropertyByVisibleOrder(std::vector<CMFCPropertyGridProperty*>& vctProps, CMFCPropertyGridProperty* pParent = nullptr) const;
140
152 virtual void SetParentPane(CGUIPaneProperties* pParentPane);
153
165 virtual CGUIPaneProperties* GetParentPane() const;
166
190 virtual const CResult SetLeftColumnWidth(int32_t i32LeftColumnWidth, ESizeMode eSizeMode = ESizeMode_Fixed);
191
215 virtual const CResult SetLeftColumnWidthRatio(float f32Ratio = 0.5f, ESizeMode eSizeMode = ESizeMode_Ratio);
216
226 virtual float GetLeftColumnWidthRatio() const;
227
248
259
269 virtual COLORREF GetCustomColorBackground() const;
270
280 virtual void SetCustomColorBackground(COLORREF color);
281
291 virtual COLORREF GetCustomColorGridLine() const;
292
302 virtual void SetCustomColorGridLine(COLORREF color);
303
313 virtual COLORREF GetCustomColorGroupText() const;
314
324 virtual void SetCustomColorGroupText(COLORREF color);
325
335 virtual COLORREF GetCustomColorGroupBackground() const;
336
346 virtual void SetCustomColorGroupBackground(COLORREF color);
347
357 virtual COLORREF GetCustomColorGroupSubItemBackground() const;
358
368 virtual void SetCustomColorGroupSubItemBackground(COLORREF color);
369
379 virtual COLORREF GetCustomColorGroupLine() const;
380
390 virtual void SetCustomColorGroupLine(COLORREF color);
391
403 virtual bool IsGridLineVisible() const;
404
414 virtual void ShowGridLine(bool bShow);
415
427 void SetDescriptionHeight(int32_t i32Height, bool bAdjustLayout = true);
428
429 virtual const CResult InsertItem(CGUIPropertyItemBase* pItem, const CGUIPropertyItemBase* pItemNewParent, EAppendPosition eAppendPosition, bool bAdjustLayout, bool bAutoLoad);
430 virtual const CResult InsertItem(CGUIPropertyItemBase* pItem, EInsertPosition eInsertPosition, const CGUIPropertyItemBase* pItemInsertPosition, bool bAdjustLayout, bool bAutoLoad);
431 virtual const CResult RemoveItem(CGUIPropertyItemBase* pItem, bool bDeletePropertyGridProperty, bool bAdjustLayout);
432
433 virtual const CResult PreDeleteProperty(CMFCPropertyGridProperty* pProperty);
434
435 virtual void HighlightPropertyWithBlink(CGUIPropertyItemBase* pItem, COLORREF clrHighlight = Foundation::FLLOGOCOLOR, uint32_t u32BlinkCount = 3, uint32_t u32IntervalMs = 200);
436
437 DeclareGetClassType();
438
439 public:
440 virtual CMFCPropertyGridProperty* HitTest(CPoint pt, CMFCPropertyGridProperty::ClickArea* pnArea = NULL, BOOL bPropsOnly = FALSE) const;
441 // bDelete == TRUE일 경우 DeleteProperty() 호출하고 종료
442 virtual BOOL RemoveProperty(CMFCPropertyGridProperty*& pProp, BOOL bDelete, BOOL bRedraw, BOOL bAdjustLayout);
443
444 void EnsureVisible(CMFCPropertyGridProperty* pProp, BOOL bExpandParents = FALSE);
445 virtual void SetAlphabeticMode(BOOL bSet = TRUE);
446
447 virtual void SetParentMainFrame(CGUIMainFrame* pMainFrame);
448 virtual CGUIMainFrame* GetParentMainFrame() const;
449
450 virtual const CGUIScrollBarOwnerDrawn* GetOwnerDrawScrollBar(EOrientation eOrientation = EOrientation_Vertical) const;
451 virtual int GetTotalItemsWithExtraRows(BOOL bIncludeHidden = TRUE) const;
452
453 void SetFontBold(HFONT hfont);
454 void SetFont(HFONT hfont);
455 virtual CFont* GetFontBold();
456
457 virtual void SetManagerPropertyItem(CGUIManagerPropertyItem* pMgr);
458 virtual const CGUIManagerPropertyItem* GetManagerPropertyItem() const;
459
460 protected:
461 virtual void AddPendingUpdateValue(const CMFCPropertyGridProperty* pPGP, const COleVariant& var);
462 virtual void AddPendingUpdateValueMin(const CGUIPropertyGridPropertySliderDualHandle* pPGP, const COleVariant& var);
463 virtual void AddPendingUpdateValueMax(const CGUIPropertyGridPropertySliderDualHandle* pPGP, const COleVariant& var);
464 virtual const CResult GetPendingUpdateValue(const CMFCPropertyGridProperty* pPGP, COleVariant& varRes) const;
465 virtual const CResult GetPendingUpdateValueMin(const CGUIPropertyGridPropertySliderDualHandle* pPGP, COleVariant& varRes) const;
466 virtual const CResult GetPendingUpdateValueMax(const CGUIPropertyGridPropertySliderDualHandle* pPGP, COleVariant& varRes) const;
467 virtual void AddPendingUpdateVisibility(const CMFCPropertyGridProperty* pPGP, bool bVisibility);
468 virtual const CResult GetPendingUpdateVisibility(const CMFCPropertyGridProperty* pPGP, bool& bVisibility) const;
469
470 virtual void OnDrawList(CDC* pDC) override;
471 virtual void DrawPropertyDefault(CDC* pDC, CGUIPropertyGridPropertyBase* pPgp) const;
472 virtual void DrawRadioButtonGroupBox(CDC* pDC, CGUIPropertyGridPropertyRadioButtonGroup* pPropRGB) const;
473 virtual int OnDrawProperty(CDC* pDC, CMFCPropertyGridProperty* pProp) const override;
474 virtual int OnDrawProperty(CDC* pDC, CGUIPropertyGridPropertyCategory* pPropCat) const;
475 static void OnDrawComboDropButton(CDC* pDC, CRect rect, BOOL bDisabled, BOOL bDropped, BOOL bHighlighted, CMFCToolBarComboBoxButton* pButton);
476 static void OnDrawButtonBorder(CDC* pDC, CMFCToolBarButton* pButton, CRect rect, CMFCVisualManager::AFX_BUTTON_STATE state);
477 virtual void OnReceiveBroadcast(const Base::CBroadcastMessage* pMessage) override;
478 virtual CList<CMFCPropertyGridProperty*, CMFCPropertyGridProperty*>* GetTopLevelProperties();
479 virtual BOOL EndEditItem(BOOL bUpdateData = TRUE) override;
480
481 virtual void UpdateColorByState(EGUIControlState eState);
482 virtual void SetScrollSizes();
483 virtual void ReposProperties();
484 virtual Base::TRect<int32_t> GetRowMargin() const;
485 virtual void SetContentPadding(const Base::TRect<int32_t>& trPadding);
486 virtual Base::TRect<int32_t> GetCategoryMargin() const;
487 virtual Base::TRect<int32_t> GetContentPadding() const;
488 virtual Base::TRect<int32_t> GetTextPadding(EControlTextType e) const;
489
490 private:
491 void RecursivelySetPropertySliderWidth(CMFCPropertyGridProperty* pParent = nullptr);
492
493 protected:
494 CMFCPropertyGridProperty* m_pPropLButtonDown;
495 Base::TPoint<int32_t> m_tpPrev;
496 CGUIPaneProperties* m_pParentPane;
497 CGUIMainFrame* m_pParentMainFrame;
498 CGUIPropertyGridPropertyBase* m_pPropertyPrevHit;
499 CGUIPropertyGridToolTipCtrl* m_pIPToolTip;
500 CGUIScrollBarOwnerDrawn* m_pOwnerDrawScrollBarVert;
501 CGUIScrollBarOwnerDrawn* m_pOwnerDrawScrollBarHorz;
502 std::unordered_map<CMFCPropertyGridProperty*, COleVariant>& m_mapPendingValue;
503 std::unordered_map<CGUIPropertyGridPropertySliderDualHandle*, COleVariant>& m_mapPendingValueMin;
504 std::unordered_map<CGUIPropertyGridPropertySliderDualHandle*, COleVariant>& m_mapPendingValueMax;
505 std::unordered_map<CMFCPropertyGridProperty*, bool>& m_mapPendingVisibility;
506
507 ESizeMode m_eLeftColWidthSizeMode;
508 float m_f32LeftColWidthRatio;
509 int32_t m_i32LeftColWidth;
510
511 CGUIPropertyGridPropertyBase* m_pPropHighlightBlink;
512 COLORREF m_clrHighlight;
513 COLORREF m_clrHighlightBackup;
514 uint32_t m_u32NeedToBlinkCnt;
515 uint32_t m_u32CurrBlinkCnt;
516
517 bool m_bPropertySliderDeprecatedExists;
518
519 CGUIStyledCtrlBase m_scbCategory; // default draw options for category item
520 CGUIStyledCtrlBase m_scbRadioBtnGroup; // default draw options for radio button group item
521 CGUIStyledCtrlBase m_scbPropBase; // default draw options for PGPBase
522
523 CGUIManagerPropertyItem* m_pMgrRef;
524
525 CBrush m_brBrush;
526
527 friend class CGUIManagerPane;
528 friend class CGUIPaneProperties;
529 friend class CGUIMenuItemProperty;
530 friend class CGUIPropertyGridPropertyDropdownList;
531 friend class CGUIPropertyGridPropertyViewListBase;
532 friend class CGUIPropertyGridPropertyBase;
533 friend class CGUIPropertyGridPropertyColor;
534 friend class CGUIPropertyItemRadioButton;
535 friend class CGUIPropertyItemSliderDualHandle;
536 friend class CGUIPropertyItemCheckBox;
537 friend class CGUIPropertyItemCategory;
538 friend class CGUIPropertyItemText;
539 friend class CGUIPropertyItemFont;
540 friend class CGUIPropertyItemBase;
541 friend class CGUIPropertyItemRadioButtonGroup;
542 friend class CGUIPropertyGridPropertyRadioButtonGroup;
543 friend class CGUIPropertyItemCheckBox3State;
544 friend class CGUIDialogProperty;
545 friend class CGUIDialogLicenseFeatures;
546 friend class CGUIManagerPropertyItem;
547
548 public:
549 DECLARE_MESSAGE_MAP()
550 afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
551 afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
552 afx_msg void OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt);
553 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
554 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
555 afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
556 afx_msg void OnSetFocus(CWnd* pOldWnd);
557 afx_msg void OnKillFocus(CWnd* pNewWnd);
558 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
559 afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
560 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
561 virtual void PreSubclassWindow();
562 virtual BOOL PreTranslateMessage(MSG* pMsg);
563 afx_msg void OnEnable(BOOL bEnable);
564 afx_msg void OnCancelMode();
565 afx_msg void OnDestroy();
566 LRESULT OnScrollBarPosChanged(WPARAM wParam, LPARAM lParam);
567 LRESULT OnSliderOwnerDrawnPosChanged(WPARAM wParam, LPARAM lParam);
568 LRESULT OnSliderOwnerDrawnRedraw(WPARAM wParam, LPARAM lParam);
569 afx_msg BOOL OnNeedTipText(UINT id, NMHDR* pNMH, LRESULT* pResult);
570 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
571 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
572 afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
573 afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
574 afx_msg void OnHeaderItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
575 afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
576 afx_msg void OnSize(UINT nType, int cx, int cy);
577 afx_msg void OnTimer(UINT_PTR nIDEvent);
578 afx_msg void OnNMSheetCellChanged(NMHDR* pNMHDR, LRESULT* pResult);
579
580 void TrackToolTip(CPoint pt);
581 virtual void Init() override;
582 virtual void OnDraw(CDC* pDC) override;
583 virtual void OnClickButton(CPoint point) override;
584};
585 }
586}
브로드캐스트 메시지 클래스
Definition BroadcastMessage.h:27
점을 표현하는 간략화된 클래스
Definition TPoint.h:37
직사각형을 표현하는 간략화된 클래스
Definition TRect.h:37
FLImaging 모듈의 수행 결과 객체
Definition ResultsDef.h:1676
CGUIPropertyItemBase 객체들을 관리하고 CGUIPropertyGridCtrl 과의 동기화를 수행하는 매니저 클래스입니다.
Definition GUIManagerPropertyItem.h:46
프로퍼티 창에 연결된 메뉴 아이템 클래스
Definition GUIMenuItemProperty.h:48
virtual void SetCustomColorGroupBackground(COLORREF color)
그룹 배경의 사용자 정의 색상을 설정합니다.
virtual CGUIPaneProperties * GetParentPane() const
부모 패널을 가져옵니다.
virtual void SetCustomColorGridLine(COLORREF color)
그리드 선의 사용자 정의 색상을 설정합니다.
virtual const CResult SetLeftColumnWidthRatio(float f32Ratio=0.5f, ESizeMode eSizeMode=ESizeMode_Ratio)
왼쪽 열 너비를 비율로 설정합니다.
virtual COLORREF GetCustomColorGridLine() const
그리드 선의 사용자 정의 색상을 가져옵니다.
virtual COLORREF GetCustomColorGroupSubItemBackground() const
그룹의 서브아이템 배경에 대한 사용자 정의 색상을 가져옵니다.
virtual bool IsGridLineVisible() const
그리드 선의 표시 여부를 확인합니다.
virtual COLORREF GetCustomColorGroupText() const
그룹 텍스트의 사용자 정의 색상을 가져옵니다.
virtual COLORREF GetCustomColorGroupLine() const
그룹을 묶는 라인의 사용자 정의 색상을 가져옵니다.
virtual void SetCustomColorGroupSubItemBackground(COLORREF color)
그룹의 서브아이템 배경에 대한 사용자 정의 색상을 설정합니다.
virtual void SetParentPane(CGUIPaneProperties *pParentPane)
부모 패널을 설정합니다.
virtual void OnReceiveBroadcast(const Base::CBroadcastMessage *pMessage) override
Callback 함수. BroadcastMessage를 수신받는 함수
virtual void AdjustLayoutAsync()
컨트롤의 레이아웃을 조정합니다.(비동기 함수) 프로퍼티 아이템을 새로 추가하거나 삭제, Show/Hide 하는 등 레이아웃 변경이 있을 때에만 호출합니다.
virtual const CResult SetLeftColumnWidthSizeMode(ESizeMode eSizeMode=ESizeMode_Ratio)
왼쪽 열 너비의 크기 모드를 설정합니다.
virtual float GetLeftColumnWidthRatio() const
왼쪽 열 너비 비율을 반환합니다.
virtual bool AdjustLayoutForVisibility()
CGUIPropertyItemBase::SetVisible() 호출 이후, 컨트롤의 레이아웃을 조정하기 위해 사용하는 함수입니다. 프로퍼티 아이템을 새로 추가하거나 삭제하는 경우에는...
virtual void AdjustLayout() override
컨트롤의 레이아웃을 조정합니다. 프로퍼티 아이템을 새로 추가하거나 삭제, Show/Hide 하는 등 레이아웃 변경이 있을 때에만 호출합니다.
virtual ESizeMode GetLeftColumnWidthSizeMode() const
왼쪽 열 너비의 크기 모드를 반환합니다.
virtual COLORREF GetCustomColorBackground() const
배경의 사용자 정의 색상을 가져옵니다.
virtual COLORREF GetCustomColorGroupBackground() const
그룹 배경의 사용자 정의 색상을 가져옵니다.
virtual ~CGUIPropertyGridCtrl()
속성 그리드 컨트롤의 소멸자.
virtual void ShowGridLine(bool bShow)
그리드 선의 표시 여부를 설정합니다.
virtual void SetCustomColorGroupLine(COLORREF color)
그룹을 묶는 라인의 사용자 정의 색상을 설정합니다.
virtual void SetCustomColorBackground(COLORREF color)
배경의 사용자 정의 색상을 설정합니다.
CGUIPropertyGridCtrl()
속성 그리드 컨트롤의 기본 생성자.
void GetPropertyByVisibleOrder(std::vector< CMFCPropertyGridProperty * > &vctProps, CMFCPropertyGridProperty *pParent=nullptr) const
화면 표시 순서에 따라 속성을 가져옵니다.
virtual const CResult SetLeftColumnWidth(int32_t i32LeftColumnWidth, ESizeMode eSizeMode=ESizeMode_Fixed)
왼쪽 열 너비(이름 영역)를 설정합니다.
virtual void SetCustomColorGroupText(COLORREF color)
그룹 텍스트의 사용자 정의 색상을 설정합니다.
void SetDescriptionHeight(int32_t i32Height, bool bAdjustLayout=true)
설명 영역의 높이를 설정합니다.
프로퍼티 아이템 베이스 클래스
Definition GUIPropertyItemBase.h:319
Definition D2DObject.h:12
EInsertPosition
Definition DefinitionsGUI.h:14438
ESizeMode
UI 요소의 크기 지정 방식을 정의합니다.
Definition DefinitionsGUI.h:15353
@ ESizeMode_Ratio
비율 기반 크기.
Definition DefinitionsGUI.h:15385
@ ESizeMode_Fixed
고정 크기 (예: 픽셀 단위).
Definition DefinitionsGUI.h:15374
EOrientation
방향
Definition DefinitionsGUI.h:8887
@ EOrientation_Vertical
수직 방향
Definition DefinitionsGUI.h:8894
EAppendPosition
Definition DefinitionsGUI.h:14458
EGUIControlState
GUI 컨트롤 상태 열거형
Definition DefinitionsGUI.h:15195