/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef INCLUDED_SC_SOURCE_UI_INC_CONDFORMATDLGENTRY_HXX #define INCLUDED_SC_SOURCE_UI_INC_CONDFORMATDLGENTRY_HXX #include #include #include #include #include class ScIconSetFrmtDataEntry; class ScCondFormatDlg; class ScCondFormatList; class ColorListBox; class ScColorScaleFormat; class ScDataBarFormat; class ScIconSetFormat; struct ScDataBarFormatData; namespace condformat { namespace entry { enum ScCondFrmtEntryType { CONDITION, FORMULA, COLORSCALE2, COLORSCALE3, DATABAR, ICONSET, DATE }; } } class ScCondFrmtEntry { protected: ScCondFormatList* mpParent; std::unique_ptr mxBuilder; private: //general ui elements std::unique_ptr mxBorder; std::unique_ptr mxGrid; std::unique_ptr mxFtCondNr; std::unique_ptr mxFtCondition; bool mbActive; OUString const maStrCondition; Link maClickHdl; DECL_LINK( EntrySelectHdl, const MouseEvent&, bool ); protected: std::unique_ptr mxLbType; ScDocument* mpDoc; ScAddress maPos; virtual void Select(); virtual void Deselect(); virtual OUString GetExpressionString() = 0; public: ScCondFrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, const ScAddress& rPos); virtual ~ScCondFrmtEntry(); void Show() { mxGrid->show(); } void set_grid_top_attach(int nAttach) { mxBorder->set_grid_top_attach(nAttach); } int get_grid_top_attach() const { return mxBorder->get_grid_top_attach(); } Size get_preferred_size() const { return mxBorder->get_preferred_size(); } void SetPos(const ScAddress& rPos) { maPos = rPos; }; bool IsSelected() const { return mbActive;} void SetIndex(sal_Int32 nIndex); virtual ScFormatEntry* GetEntry() const = 0; virtual void SetActive() = 0; virtual void SetInactive() = 0; virtual condformat::entry::ScCondFrmtEntryType GetType() = 0; }; class ScConditionFrmtEntry : public ScCondFrmtEntry, public SfxListener { //cond format ui elements SvxFontPrevWindow maWdPreview; std::unique_ptr mxLbCondType; std::unique_ptr mxEdVal1; std::unique_ptr mxEdVal2; std::unique_ptr mxFtVal; std::unique_ptr mxFtStyle; std::unique_ptr mxLbStyle; std::unique_ptr mxWdPreviewWin; std::unique_ptr mxWdPreview; bool mbIsInStyleCreate; static const sal_Int32 NUM_COND_ENTRIES = 24; // Lookup table from positions in maLbCondType to the condition mode enum static const ScConditionMode mpEntryToCond[NUM_COND_ENTRIES]; ScFormatEntry* createConditionEntry() const; virtual OUString GetExpressionString() override; void Init(ScCondFormatDlg* pDialogParent); DECL_LINK( StyleSelectHdl, weld::ComboBox&, void ); DECL_LINK( ConditionTypeSelectHdl, weld::ComboBox&, void ); DECL_LINK( OnEdChanged, formula::RefEdit&, void ); // Searches the lookup table for the entry position, given condition mode static sal_Int32 ConditionModeToEntryPos( ScConditionMode eMode ); // Accesses the lookup table for the condition mode, given entry position static ScConditionMode EntryPosToConditionMode( sal_Int32 aEntryPos ); // Returns the number of edit fields used for a given condition mode static sal_Int32 GetNumberEditFields( ScConditionMode eMode ); protected: virtual void Select() override; virtual void Deselect() override; public: ScConditionFrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, ScCondFormatDlg* pDialogParent, const ScAddress& rPos, const ScCondFormatEntry* pFormatEntry = nullptr); virtual ~ScConditionFrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::CONDITION; } }; class ScFormulaFrmtEntry : public ScCondFrmtEntry { SvxFontPrevWindow maWdPreview; std::unique_ptr mxFtStyle; std::unique_ptr mxLbStyle; std::unique_ptr mxWdPreviewWin; std::unique_ptr mxWdPreview; std::unique_ptr mxEdFormula; ScFormatEntry* createFormulaEntry() const; virtual OUString GetExpressionString() override; void Init(ScCondFormatDlg* pDialogParent); DECL_LINK(StyleSelectHdl, weld::ComboBox&, void); public: ScFormulaFrmtEntry(ScCondFormatList* pParent, ScDocument* PDoc, ScCondFormatDlg* pDialogParent, const ScAddress& rPos, const ScCondFormatEntry* pFormatEntry = nullptr); virtual ~ScFormulaFrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::FORMULA; } }; class ScColorScale2FrmtEntry : public ScCondFrmtEntry { //color format ui elements std::unique_ptr mxLbColorFormat; //color scale ui elements std::unique_ptr mxLbEntryTypeMin; std::unique_ptr mxLbEntryTypeMax; std::unique_ptr mxEdMin; std::unique_ptr mxEdMax; std::unique_ptr mxLbColMin; std::unique_ptr mxLbColMax; std::unique_ptr mxFtMin; std::unique_ptr mxFtMax; ScFormatEntry* createColorscaleEntry() const; virtual OUString GetExpressionString() override; void Init(); DECL_LINK( EntryTypeHdl, weld::ComboBox&, void ); public: ScColorScale2FrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat = nullptr); virtual ~ScColorScale2FrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::COLORSCALE2; } }; class ScColorScale3FrmtEntry : public ScCondFrmtEntry { //color format ui elements std::unique_ptr mxLbColorFormat; //color scale ui elements std::unique_ptr mxLbEntryTypeMin; std::unique_ptr mxLbEntryTypeMiddle; std::unique_ptr mxLbEntryTypeMax; std::unique_ptr mxEdMin; std::unique_ptr mxEdMiddle; std::unique_ptr mxEdMax; std::unique_ptr mxLbColMin; std::unique_ptr mxLbColMiddle; std::unique_ptr mxLbColMax; std::unique_ptr mxFtMin; std::unique_ptr mxFtMax; ScFormatEntry* createColorscaleEntry() const; virtual OUString GetExpressionString() override; void Init(); DECL_LINK( EntryTypeHdl, weld::ComboBox&, void ); public: ScColorScale3FrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScColorScaleFormat* pFormat = nullptr); virtual ~ScColorScale3FrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::COLORSCALE3; } }; class ScDataBarFrmtEntry : public ScCondFrmtEntry { //color format ui elements std::unique_ptr mxLbColorFormat; //data bar ui elements std::unique_ptr mxLbDataBarMinType; std::unique_ptr mxLbDataBarMaxType; std::unique_ptr mxEdDataBarMin; std::unique_ptr mxEdDataBarMax; std::unique_ptr mxBtOptions; std::unique_ptr mxFtMin; std::unique_ptr mxFtMax; std::unique_ptr mpDataBarData; ScFormatEntry* createDatabarEntry() const; virtual OUString GetExpressionString() override; void Init(); DECL_LINK( OptionBtnHdl, weld::Button&, void ); DECL_LINK( DataBarTypeSelectHdl, weld::ComboBox&, void ); public: ScDataBarFrmtEntry(ScCondFormatList* pParemt, ScDocument* pDoc, const ScAddress& rPos, const ScDataBarFormat* pFormat = nullptr); virtual ~ScDataBarFrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::DATABAR; } }; class ScDateFrmtEntry : public ScCondFrmtEntry, public SfxListener { public: ScDateFrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, const ScCondDateFormatEntry* pFormat = nullptr); virtual ~ScDateFrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::DATE; } virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; protected: virtual OUString GetExpressionString() override; private: void Init(); DECL_LINK( StyleSelectHdl, weld::ComboBox&, void ); SvxFontPrevWindow maWdPreview; std::unique_ptr mxLbDateEntry; std::unique_ptr mxFtStyle; std::unique_ptr mxLbStyle; std::unique_ptr mxWdPreviewWin; std::unique_ptr mxWdPreview; bool mbIsInStyleCreate; }; class ScIconSetFrmtEntry : public ScCondFrmtEntry { //color format ui elements std::unique_ptr mxLbColorFormat; // icon set ui elements std::unique_ptr mxLbIconSetType; std::unique_ptr mxIconParent; typedef std::vector> ScIconSetFrmtDataEntriesType; ScIconSetFrmtDataEntriesType maEntries; virtual OUString GetExpressionString() override; void Init(); DECL_LINK(IconSetTypeHdl, weld::ComboBox&, void); public: ScIconSetFrmtEntry(ScCondFormatList* pParent, ScDocument* pDoc, const ScAddress& rPos, const ScIconSetFormat* pFormat = nullptr); virtual ~ScIconSetFrmtEntry() override; virtual ScFormatEntry* GetEntry() const override; virtual void SetActive() override; virtual void SetInactive() override; virtual condformat::entry::ScCondFrmtEntryType GetType() override { return condformat::entry::ICONSET; } }; #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */