/* -*- 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/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */
#ifndef INCLUDED_SW_SOURCE_UIBASE_INC_CFGITEMS_HXX
#define INCLUDED_SW_SOURCE_UIBASE_INC_CFGITEMS_HXX

#include <svl/poolitem.hxx>
#include <swdllapi.h>
#include <printdata.hxx>

#include <cmdid.h>
#include <sfx2/zoomitem.hxx>

class SwViewOption;
enum class SwFillMode;

/// Item for settings dialog - document view
class SW_DLLPUBLIC SwDocDisplayItem final : public SfxPoolItem
{
    friend class SwShdwCursorOptionsTabPage;
    friend class SwModule;

    bool m_bParagraphEnd      :1;
    bool m_bTab               :1;
    bool m_bSpace             :1;
    bool m_bNonbreakingSpace  :1;
    bool m_bSoftHyphen        :1;
    bool m_bCharHiddenText    :1;
    bool m_bBookmarks         :1;
    bool m_bManualBreak       :1;
    bool m_bTextBoundariesFull :1;
    bool m_bTextBoundaries    :1;
    bool m_bSectionBoundaries :1;
    bool m_bTableBoundaries   :1;

    sal_Int32 m_xDefaultAnchor;

public:
                                DECLARE_ITEM_TYPE_FUNCTION(SwDocDisplayItem)
                                SwDocDisplayItem();
                                SwDocDisplayItem( const SwViewOption& rVOpt );

    virtual SwDocDisplayItem*   Clone( SfxItemPool *pPool = nullptr ) const override;
    virtual bool                operator==( const SfxPoolItem& ) const override;
    void                        FillViewOptions( SwViewOption& rVOpt) const;
};

// OS 12.01.95
// Item for settings dialog, element page
class SW_DLLPUBLIC SwElemItem final : public SfxPoolItem
{
    //view
    bool m_bVertRuler     :1;
    bool m_bVertRulerRight:1;
    bool m_bSmoothScroll  :1;
    //visual aids
    bool m_bCrosshair     :1;
    //display
    bool m_bTable             :1;
    bool m_bGraphic           :1;
    bool m_bDrawing           :1;
    bool m_bNotes             :1;
    bool m_bShowInlineTooltips :1;
    bool m_bShowOutlineContentVisibilityButton :1;
    bool m_bTreatSubOutlineLevelsAsContent :1;
    bool m_bShowChangesInMargin :1;
    bool m_bFieldHiddenText   :1;
    bool m_bShowHiddenPara    :1;
    bool m_bDefaultZoom       :1;
    SvxZoomType m_eDefaultZoomType;
    sal_uInt16  m_nDefaultZoomValue;

    friend class SwContentOptPage;

public:
                            DECLARE_ITEM_TYPE_FUNCTION(SwElemItem)
                            SwElemItem();
                            SwElemItem(const SwViewOption& rVOpt);

    virtual SwElemItem*     Clone( SfxItemPool *pPool = nullptr ) const override;
    virtual bool            operator==( const SfxPoolItem& ) const override;

    void                    FillViewOptions( SwViewOption& rVOpt) const;

    bool IsDefaultZoom() const {return m_bDefaultZoom; }
    void SetDefaultZoom(bool bSet) { m_bDefaultZoom = bSet; }

    SvxZoomType GetDefaultZoomType() const { return m_eDefaultZoomType; }
    void SetDefaultZoomType(SvxZoomType eType) { m_eDefaultZoomType = eType; }

    sal_uInt16  GetDefaultZoomValue() const { return m_nDefaultZoomValue;}
    void SetDefaultZoomValue(sal_Int16 nValue){ m_nDefaultZoomValue = nValue; }

};

// OS 12.01.95
// Item for settings dialog - printer/add-ons
class SW_DLLPUBLIC SwAddPrinterItem final : public SfxPoolItem, public SwPrintData
{
    using  SwPrintData::operator ==;

public:
    DECLARE_ITEM_TYPE_FUNCTION(SwAddPrinterItem)
    SwAddPrinterItem();
    SwAddPrinterItem( const SwPrintData& rPrtData );

    virtual SwAddPrinterItem* Clone( SfxItemPool *pPool = nullptr ) const override;

    virtual bool         operator==( const SfxPoolItem& ) const override;
};

/// Item for settings dialog, ShadowCursorPage
class SW_DLLPUBLIC SwShadowCursorItem final : public SfxPoolItem
{
    SwFillMode m_eMode;
    bool m_bOn;
public:
    DECLARE_ITEM_TYPE_FUNCTION(SwShadowCursorItem)
    SwShadowCursorItem();
    SwShadowCursorItem( const SwViewOption& rVOpt );

    virtual SwShadowCursorItem* Clone( SfxItemPool *pPool = nullptr ) const override;
    virtual bool            operator==( const SfxPoolItem& ) const override;

    void FillViewOptions( SwViewOption& rVOpt) const;

    SwFillMode GetMode() const          { return m_eMode; }
    bool IsOn() const                   { return m_bOn; }

    void SetMode( SwFillMode eM )       { m_eMode = eM; }
    void SetOn( bool bFlag )            { m_bOn = bFlag; }
};

class SW_DLLPUBLIC SwFmtAidsAutoComplItem final : public SfxPoolItem
{
    friend class SwShdwCursorOptionsTabPage;
    friend class SwModule;

    bool m_bEncloseWithCharactersOn;

public:
    DECLARE_ITEM_TYPE_FUNCTION(SwFmtAidsAutoComplItem)
    SwFmtAidsAutoComplItem();
    SwFmtAidsAutoComplItem(const SwViewOption& rVOpt);

    virtual SwFmtAidsAutoComplItem* Clone(SfxItemPool* pPool = nullptr) const override;
    virtual bool operator==(const SfxPoolItem&) const override;

    bool IsEncloseWithCharactersOn() const { return m_bEncloseWithCharactersOn; }

    void SetEncloseWithCharactersOn(bool bFlag) { m_bEncloseWithCharactersOn = bFlag; }
};

#ifdef DBG_UTIL

// Item for settings dialog - test settings
class SW_DLLPUBLIC SwTestItem final : public SfxPoolItem
{
    friend class SwModule;
    friend class SwTestTabPage;

    bool    m_bTest1:1;
    bool    m_bTest2:1;
    bool    m_bTest3:1;
    bool    m_bTest4:1;
    bool    m_bTest5:1;
    bool    m_bTest6:1;
    bool    m_bTest7:1;
    bool    m_bTest8:1;
    bool    m_bTest9:1;
    bool    m_bTest10:1;

public:
                            DECLARE_ITEM_TYPE_FUNCTION(SwTestItem)
                            SwTestItem() : SfxPoolItem(FN_PARAM_SWTEST) {};

    virtual SwTestItem*     Clone( SfxItemPool *pPool = nullptr ) const override;
    virtual bool            operator==( const SfxPoolItem& ) const override;

};
#endif

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
