FLImaging 7.4.14.3
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
416 virtual const CResult InsertItem(CGUIPropertyItemBase* pItem, const CGUIPropertyItemBase* pItemNewParent, EAppendPosition eAppendPosition, bool bAdjustLayout, bool bAutoLoad);
417 virtual const CResult InsertItem(CGUIPropertyItemBase* pItem, EInsertPosition eInsertPosition, const CGUIPropertyItemBase* pItemInsertPosition, bool bAdjustLayout, bool bAutoLoad);
418 virtual const CResult RemoveItem(CGUIPropertyItemBase* pItem, bool bDeletePropertyGridProperty, bool bAdjustLayout);
419
420 virtual const CResult PreDeleteProperty(CMFCPropertyGridProperty* pProperty);
421
422 virtual void HighlightPropertyWithBlink(CGUIPropertyItemBase* pItem, COLORREF clrHighlight = Foundation::FLLOGOCOLOR, uint32_t u32BlinkCount = 3, uint32_t u32IntervalMs = 200);
423
424 DeclareGetClassType();
425
426 public:
427 virtual CMFCPropertyGridProperty* HitTest(CPoint pt, CMFCPropertyGridProperty::ClickArea* pnArea = NULL, BOOL bPropsOnly = FALSE) const;
428 // bDelete == TRUE일 경우 DeleteProperty() 호출하고 종료
429 virtual BOOL RemoveProperty(CMFCPropertyGridProperty*& pProp, BOOL bDelete, BOOL bRedraw, BOOL bAdjustLayout);
430
431 void EnsureVisible(CMFCPropertyGridProperty* pProp, BOOL bExpandParents = FALSE);
432 virtual void SetAlphabeticMode(BOOL bSet = TRUE);
433
434 virtual void SetParentMainFrame(CGUIMainFrame* pMainFrame);
435 virtual CGUIMainFrame* GetParentMainFrame() const;
436
437 virtual const CGUIScrollBarOwnerDrawn* GetOwnerDrawScrollBar(EOrientation eOrientation = EOrientation_Vertical) const;
438 virtual int GetTotalItemsWithExtraRows(BOOL bIncludeHidden = TRUE) const;
439
440 void SetFontBold(HFONT hfont);
441 void SetFont(HFONT hfont);
442 virtual CFont* GetFontBold();
443
444 virtual void SetManagerPropertyItem(CGUIManagerPropertyItem* pMgr);
445 virtual const CGUIManagerPropertyItem* GetManagerPropertyItem() const;
446
447 protected:
448 virtual void AddPendingUpdateValue(const CMFCPropertyGridProperty* pPGP, const COleVariant& var);
449 virtual void AddPendingUpdateValueMin(const CGUIPropertyGridPropertySliderDualHandle* pPGP, const COleVariant& var);
450 virtual void AddPendingUpdateValueMax(const CGUIPropertyGridPropertySliderDualHandle* pPGP, const COleVariant& var);
451 virtual const CResult GetPendingUpdateValue(const CMFCPropertyGridProperty* pPGP, COleVariant& varRes) const;
452 virtual const CResult GetPendingUpdateValueMin(const CGUIPropertyGridPropertySliderDualHandle* pPGP, COleVariant& varRes) const;
453 virtual const CResult GetPendingUpdateValueMax(const CGUIPropertyGridPropertySliderDualHandle* pPGP, COleVariant& varRes) const;
454 virtual void AddPendingUpdateVisibility(const CMFCPropertyGridProperty* pPGP, bool bVisibility);
455 virtual const CResult GetPendingUpdateVisibility(const CMFCPropertyGridProperty* pPGP, bool& bVisibility) const;
456
457 virtual void OnDrawList(CDC* pDC) override;
458 virtual void DrawPropertyDefault(CDC* pDC, CGUIPropertyGridPropertyBase* pPgp) const;
459 virtual void DrawRadioButtonGroupBox(CDC* pDC, CGUIPropertyGridPropertyRadioButtonGroup* pPropRGB) const;
460 virtual int OnDrawProperty(CDC* pDC, CMFCPropertyGridProperty* pProp) const override;
461 virtual int OnDrawProperty(CDC* pDC, CGUIPropertyGridPropertyCategory* pPropCat) const;
462 static void OnDrawComboDropButton(CDC* pDC, CRect rect, BOOL bDisabled, BOOL bDropped, BOOL bHighlighted, CMFCToolBarComboBoxButton* pButton);
463 static void OnDrawButtonBorder(CDC* pDC, CMFCToolBarButton* pButton, CRect rect, CMFCVisualManager::AFX_BUTTON_STATE state);
464 virtual void OnReceiveBroadcast(const Base::CBroadcastMessage* pMessage) override;
465 virtual CList<CMFCPropertyGridProperty*, CMFCPropertyGridProperty*>* GetTopLevelProperties();
466 virtual BOOL EndEditItem(BOOL bUpdateData = TRUE) override;
467
468 virtual void UpdateColorByState(EGUIControlState eState);
469 virtual void SetScrollSizes();
470 virtual void ReposProperties();
471 virtual Base::TRect<int32_t> GetRowMargin() const;
472 virtual void SetContentPadding(const Base::TRect<int32_t>& trPadding);
473 virtual Base::TRect<int32_t> GetCategoryMargin() const;
474 virtual Base::TRect<int32_t> GetContentPadding() const;
475 virtual Base::TRect<int32_t> GetTextPadding(EControlTextType e) const;
476
477 private:
478 void RecursivelySetPropertySliderWidth(CMFCPropertyGridProperty* pParent = nullptr);
479
480 protected:
481 CMFCPropertyGridProperty* m_pPropLButtonDown;
482 Base::TPoint<int32_t> m_tpPrev;
483 CGUIPaneProperties* m_pParentPane;
484 CGUIMainFrame* m_pParentMainFrame;
485 CGUIPropertyGridPropertyBase* m_pPropertyPrevHit;
486 CGUIPropertyGridToolTipCtrl* m_pIPToolTip;
487 CGUIScrollBarOwnerDrawn* m_pOwnerDrawScrollBarVert;
488 CGUIScrollBarOwnerDrawn* m_pOwnerDrawScrollBarHorz;
489 std::unordered_map<CMFCPropertyGridProperty*, COleVariant>& m_mapPendingValue;
490 std::unordered_map<CGUIPropertyGridPropertySliderDualHandle*, COleVariant>& m_mapPendingValueMin;
491 std::unordered_map<CGUIPropertyGridPropertySliderDualHandle*, COleVariant>& m_mapPendingValueMax;
492 std::unordered_map<CMFCPropertyGridProperty*, bool>& m_mapPendingVisibility;
493
494 ESizeMode m_eLeftColWidthSizeMode;
495 float m_f32LeftColWidthRatio;
496 int32_t m_i32LeftColWidth;
497
498 CGUIPropertyGridPropertyBase* m_pPropHighlightBlink;
499 COLORREF m_clrHighlight;
500 COLORREF m_clrHighlightBackup;
501 uint32_t m_u32NeedToBlinkCnt;
502 uint32_t m_u32CurrBlinkCnt;
503
504 bool m_bPropertySliderDeprecatedExists;
505
506 CGUIStyledCtrlBase m_scbCategory; // default draw options for category item
507 CGUIStyledCtrlBase m_scbRadioBtnGroup; // default draw options for radio button group item
508 CGUIStyledCtrlBase m_scbPropBase; // default draw options for PGPBase
509
510 CGUIManagerPropertyItem* m_pMgrRef;
511
512 CBrush m_brBrush;
513
514 friend class CGUIManagerPane;
515 friend class CGUIPaneProperties;
516 friend class CGUIMenuItemProperty;
517 friend class CGUIPropertyGridPropertyDropdownList;
518 friend class CGUIPropertyGridPropertyViewListBase;
519 friend class CGUIPropertyGridPropertyBase;
520 friend class CGUIPropertyGridPropertyColor;
521 friend class CGUIPropertyItemRadioButton;
522 friend class CGUIPropertyItemSliderDualHandle;
523 friend class CGUIPropertyItemCheckBox;
524 friend class CGUIPropertyItemCategory;
525 friend class CGUIPropertyItemText;
526 friend class CGUIPropertyItemFont;
527 friend class CGUIPropertyItemBase;
528 friend class CGUIPropertyItemRadioButtonGroup;
529 friend class CGUIPropertyGridPropertyRadioButtonGroup;
530 friend class CGUIPropertyItemCheckBox3State;
531 friend class CGUIDialogProperty;
532 friend class CGUIDialogLicenseFeatures;
533 friend class CGUIManagerPropertyItem;
534
535 public:
536 DECLARE_MESSAGE_MAP()
537 afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
538 afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
539 afx_msg void OnMouseHWheel(UINT nFlags, short zDelta, CPoint pt);
540 afx_msg void OnMouseMove(UINT nFlags, CPoint point);
541 afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
542 afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
543 afx_msg void OnSetFocus(CWnd* pOldWnd);
544 afx_msg void OnKillFocus(CWnd* pNewWnd);
545 afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
546 afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
547 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
548 virtual void PreSubclassWindow();
549 virtual BOOL PreTranslateMessage(MSG* pMsg);
550 afx_msg void OnEnable(BOOL bEnable);
551 afx_msg void OnCancelMode();
552 afx_msg void OnDestroy();
553 LRESULT OnScrollBarPosChanged(WPARAM wParam, LPARAM lParam);
554 LRESULT OnSliderOwnerDrawnPosChanged(WPARAM wParam, LPARAM lParam);
555 LRESULT OnSliderOwnerDrawnRedraw(WPARAM wParam, LPARAM lParam);
556 afx_msg BOOL OnNeedTipText(UINT id, NMHDR* pNMH, LRESULT* pResult);
557 afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
558 afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
559 afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
560 afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
561 afx_msg void OnHeaderItemChanged(NMHDR* pNMHDR, LRESULT* pResult);
562 afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
563 afx_msg void OnSize(UINT nType, int cx, int cy);
564 afx_msg void OnTimer(UINT_PTR nIDEvent);
565
566 void TrackToolTip(CPoint pt);
567 virtual void Init() override;
568 virtual void OnDraw(CDC* pDC) override;
569 virtual void OnClickButton(CPoint point) override;
570};
571 }
572}
Broadcast message class.
Definition BroadcastMessage.h:27
Simplified class representing a point.
Definition TPoint.h:37
Simplified class representing a rectangle.
Definition TRect.h:37
FLImaging module execution result object.
Definition ResultsDef.h:1676
Manager class responsible for handling CGUIPropertyItemBase objects and synchronizing them with CGUIP...
Definition GUIManagerPropertyItem.h:46
The menu item class associated with the property pane.
Definition GUIMenuItemProperty.h:48
virtual void SetCustomColorGroupBackground(COLORREF color)
Set custom color for group background.
virtual CGUIPaneProperties * GetParentPane() const
Get parent pane.
virtual void SetCustomColorGridLine(COLORREF color)
Set custom color for grid lines.
virtual const CResult SetLeftColumnWidthRatio(float f32Ratio=0.5f, ESizeMode eSizeMode=ESizeMode_Ratio)
Sets the width of the left column using a ratio.
virtual COLORREF GetCustomColorGridLine() const
Get custom color for grid lines.
virtual COLORREF GetCustomColorGroupSubItemBackground() const
Get custom color for group sub item background.
virtual bool IsGridLineVisible() const
Check whether the grid lines are visible.
virtual COLORREF GetCustomColorGroupText() const
Get custom color for group text.
virtual COLORREF GetCustomColorGroupLine() const
Get custom color for group line.
virtual void SetCustomColorGroupSubItemBackground(COLORREF color)
Set custom color for group sub item background.
virtual void SetParentPane(CGUIPaneProperties *pParentPane)
Set parent pane.
virtual void OnReceiveBroadcast(const Base::CBroadcastMessage *pMessage) override
Callback function. A function that receives a BroadcastMessage.
virtual void AdjustLayoutAsync()
Adjusts the control's layout.(Asynchronous function) This function should be called only when there a...
virtual const CResult SetLeftColumnWidthSizeMode(ESizeMode eSizeMode=ESizeMode_Ratio)
Sets the size mode for the left column width.
virtual float GetLeftColumnWidthRatio() const
Gets the ratio used for the left column width.
virtual bool AdjustLayoutForVisibility()
Used to adjust the control's layout after calling CGUIPropertyItemBase::SetVisible()....
virtual void AdjustLayout() override
Adjusts the control's layout. This function should be called only when there are layout changes,...
virtual ESizeMode GetLeftColumnWidthSizeMode() const
Gets the size mode of the left column width.
virtual COLORREF GetCustomColorBackground() const
Get custom color for background.
virtual COLORREF GetCustomColorGroupBackground() const
Get custom color for group background.
virtual ~CGUIPropertyGridCtrl()
Destructor for the property grid control.
virtual void ShowGridLine(bool bShow)
Set whether to display grid lines.
virtual void SetCustomColorGroupLine(COLORREF color)
Set custom color for group line.
virtual void SetCustomColorBackground(COLORREF color)
Set custom color for background.
CGUIPropertyGridCtrl()
Default constructor for the property grid control.
void GetPropertyByVisibleOrder(std::vector< CMFCPropertyGridProperty * > &vctProps, CMFCPropertyGridProperty *pParent=nullptr) const
Get properties by their visible order.
virtual const CResult SetLeftColumnWidth(int32_t i32LeftColumnWidth, ESizeMode eSizeMode=ESizeMode_Fixed)
Sets the width of the left column (name area).
virtual void SetCustomColorGroupText(COLORREF color)
Set custom color for group text.
Property item base class.
Definition GUIPropertyItemBase.h:318
Definition D2DObject.h:12
EInsertPosition
Definition DefinitionsGUI.h:12150
ESizeMode
Specifies how a UI element's size is determined.
Definition DefinitionsGUI.h:13004
@ ESizeMode_Ratio
Ratio-based size.
Definition DefinitionsGUI.h:13036
@ ESizeMode_Fixed
Fixed size (e.g., pixel-based).
Definition DefinitionsGUI.h:13025
EOrientation
Direction.
Definition DefinitionsGUI.h:6607
@ EOrientation_Vertical
a vertical direction
Definition DefinitionsGUI.h:6614
EAppendPosition
Definition DefinitionsGUI.h:12170
EGUIControlState
Enumeration for GUI control states.
Definition DefinitionsGUI.h:12907