/* This file is part of the KDE project
   Copyright (C) 1999 David Faure <faure@kde.org>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
   Boston, MA 02110-1301, USA.
*/

#ifndef __konq_settings_h__
#define __konq_settings_h__

class KConfig;
#include <qcolor.h>
#include <qstring.h>
#include <qfont.h>
#include <qmap.h>

#include <libkonq_export.h>

/**
 * The class KonqFMSettings holds the general settings for the
 * icon/tree views in konqueror/kdesktop.
 * There is no 'local' (per-URL) instance of it.
 * All those settings can only be changed in kcmkonq.
 *
 * Using this class from konqueror and from kdesktop return
 * different settings, since the config file is different.
 * konquerorrc, group "FMSettings", and kdesktoprc, group "FMSettings"
 * The kcontrol modules handles both files, depending where
 * it's called from.
 */

class LIBKONQ_EXPORT KonqFMSettings
{
protected:
  /**
   * @internal
   * Constructs a KonqFMSettings instance from a config file.
   */
  KonqFMSettings( KConfig * config );

  /** Destructor. Don't delete any instance by yourself. */
  virtual ~KonqFMSettings();

public:

  /**
   * The static instance of KonqFMSettings
   */
  static KonqFMSettings * settings();

  /**
   * Reparse the configuration to update the already-created instances
   *
   * Warning : you need to call KGlobal::config()->reparseConfiguration()
   * first (This is not done here so that the caller can avoid too much
   * reparsing if having several classes from the same config file)
   */
  static void reparseConfiguration();

  // Use settings (and mimetype definition files)
  // to find whether to embed a certain service type or not
  // Only makes sense in konqueror.
  bool shouldEmbed( const QString & serviceType ) const;

  // Behaviour settings
  bool wordWrapText() const { return m_bWordWrapText; }
  int iconTextHeight() const { return m_iconTextHeight; }
  int iconTextWidth() const;
  bool underlineLink() const { return m_underlineLink; }
  bool fileSizeInBytes() const { return m_fileSizeInBytes; }
  bool alwaysNewWin() const { return m_alwaysNewWin; }
  const QString & homeURL() const { return m_homeURL; }

  bool showFileTips() const {return m_showFileTips; }
  bool showPreviewsInFileTips() const;
  int numFileTips() const {return m_numFileTips; }
    bool renameIconDirectly() const;

  // Font settings
  const QFont& standardFont() const { return m_standardFont; }

  // Color settings
  const QColor& normalTextColor() const { return m_normalTextColor; }
  const QColor& highlightedTextColor() const { return m_highlightedTextColor; }
  const QColor& itemTextBackground() const { return m_itemTextBackground; }

  int textPreviewIconTransparency() const { return m_iconTransparency; }

  int caseSensitiveCompare( const QString& a, const QString& b ) const;

private:

  static KonqFMSettings * s_pSettings;

  bool m_underlineLink;
  bool m_fileSizeInBytes;
  bool m_alwaysNewWin;
  bool m_bTreeFollow;

  QMap<QString, QString> m_embedMap;

  QFont m_standardFont;

  QColor m_normalTextColor;
  QColor m_highlightedTextColor;
  QColor m_itemTextBackground;

  bool m_bWordWrapText;
  int m_iconTextHeight;

  QString m_homeURL;
  bool m_showFileTips;
  int  m_numFileTips;

  // used for the textpreview
  int m_iconTransparency;

  /** Called by constructor and reparseConfiguration */
  void init( KConfig * config );

  struct KonqFMSettingsPrivate * d;

  // There is no default constructor. Use the provided ones.
  KonqFMSettings();
  // No copy constructor either. What for ?
  KonqFMSettings( const KonqFMSettings &);
};

#endif
