;;; ecb-face.el --- all face-options of ECB

;; Copyright (C) 2000 - 2005 Jesper Nordenberg,
;;                           Klaus Berndl,
;;                           Kevin A. Burton,
;;                           Free Software Foundation, Inc.

;; Author: Klaus Berndl <klaus.berndl@sdm.de>
;;         Kevin A. Burton <burton@openprivacy.org>
;; Maintainer: Klaus Berndl <klaus.berndl@sdm.de>
;; Keywords: browser, code, programming, tools
;; Created: 2001

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

;; This program 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 General Public License for more
;; details.

;; You should have received a copy of the GNU General Public License along with
;; GNU Emacs; see the file COPYING.  If not, write to the Free Software
;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

;; $Id$

;;; Commentary:

;; This file contains all options with type 'face and all face-definitions of
;; ECB.

;;; History
;;
;; For the ChangeLog of this file see the CVS-repository. For a complete
;; history of the ECB-package see the file NEWS.

;;; Code

(eval-when-compile
  (require 'silentcomp))

(silentcomp-defun set-face-parent)
(silentcomp-defun make-face-bold)
(silentcomp-defun make-face)
(silentcomp-defun set-face-foreground)

(defgroup ecb-face-options nil
  "Settings for all faces used in ECB."
  :group 'ecb
  :prefix "ecb-")

(defgroup ecb-faces nil
  "Definitions of all ECB-faces"
  :group 'ecb-face-options 
  :group 'faces
  :prefix "ecb-")

(defmacro ecb-face-default (&optional height bold-p italic-p
                                      inherit
                                      fg-light-col fg-dark-col
                                      bg-light-col bg-dark-col
                                      fg-rest bg-rest
                                      reverse-video-p)
  "Macro for setting default values for an ECB face.
The parameters are set for the following display-types:
- ((class color) (background light)): HEIGHT, BOLD-P, ITALIC-P, INHERIT
                                      FG-LIGHT-COL, BG-LIGHT-COL
- ((class color) (background dark)): HEIGHT, BOLD-P, ITALIC-P, INHERIT
                                     FG-DARK-COL, BG-DARK-COL
- t: HEIGHT, BOLD-P, ITALIC-P, INHERIT, FG-REST, BG-REST, REVERSE-VIDEO."
  `(list (list '((class color) (background light))
               (append (if (and ,height (not ecb-running-xemacs)) (list :height ,height))
                       (if ,bold-p (if (not ecb-running-xemacs)
                                       (list :weight 'bold)
                                     (list :bold t)))
                       (if ,italic-p (if (not ecb-running-xemacs)
                                         (list :slant 'italic)
                                       (list :italic t)))
                       (if (and ,inherit (not ecb-running-xemacs)) (list :inherit ,inherit))
                       (if ,fg-light-col (list :foreground ,fg-light-col))
                       (if ,bg-light-col (list :background ,bg-light-col))))
         (list '((class color) (background dark))
               (append (if (and ,height (not ecb-running-xemacs)) (list :height ,height))
                       (if ,bold-p (if (not ecb-running-xemacs)
                                       (list :weight 'bold)
                                     (list :bold t)))
                       (if ,italic-p (if (not ecb-running-xemacs)
                                         (list :slant 'italic)
                                       (list :italic t)))
                       (if (and ,inherit (not ecb-running-xemacs)) (list :inherit ,inherit))
                       (if ,fg-dark-col (list :foreground ,fg-dark-col))
                       (if ,bg-dark-col (list :background ,bg-dark-col))))
         (list 't (append (if (and ,height (not ecb-running-xemacs)) (list :height ,height))
                          (if ,bold-p (if (not ecb-running-xemacs)
                                          (list :weight 'bold)
                                        (list :bold t)))
                          (if ,italic-p (if (not ecb-running-xemacs)
                                            (list :slant 'italic)
                                          (list :italic t)))
                          (if (and ,inherit (not ecb-running-xemacs)) (list :inherit ,inherit))
                          (if ,fg-rest (list :foreground ,fg-rest))
                          (if ,bg-rest (list :foreground ,bg-rest))
                          (if ,reverse-video-p (list :reverse-video t))))))

(defface ecb-default-general-face (ecb-face-default 1.0)
  "*Basic face for all ECB tree-buffers.
Itīs recommended to define here the font-family, the font-size, the basic
color etc.

In GNU Emacs 21.X all faces \(even the face 'ecb-default-highlight-face') used
in the ECB tree-buffers inherit from this face. Therefore the default
attributes like font etc. of a face used in a tree-buffer can be very easily
changed with face 'ecb-default-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature but the options
`ecb-directories-general-face', `ecb-sources-general-face',
`ecb-methods-general-face' and `ecb-history-general-face' offer the choice to
use the face 'ecb-default-general-face' so also with XEmacs and GNU Emacs 20.X
the basic face-settings can be easily changed just by customizing the face
'ecb-default-general-face'!"
  :group 'ecb-faces)

(defface ecb-tree-guide-line-face (ecb-face-default 1.0 nil nil
                                                    'ecb-default-general-face
                                                    "grey" "gray")
  "*Face for the guide-lines in the tree-buffers."
  :group 'ecb-faces)

(defcustom ecb-tree-guide-line-face 'ecb-tree-guide-line-face
  "*Face for the guide-lines in the tree-buffers."
  :group 'ecb-face-options)

(defface ecb-directories-general-face (ecb-face-default 1.0 nil nil
                                                        'ecb-default-general-face)
  "*Basic face for the ECB directories buffer.
Itīs recommended to define here the font-family, the font-size, the basic
color etc."
  :group 'ecb-faces)

(defcustom ecb-directories-general-face 'ecb-default-general-face
  "*Basic face for the ECB directories buffer.
This defines the basic face the whole directory buffer should displayed with.
If the face 'ecb-default-general-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-general-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-directories
  :type '(radio (const :tag "Use ecb-default-general-face"
                       :value ecb-default-general-face)
                (face :tag "Special face"
                      :value ecb-directories-general-face)))

(defface ecb-sources-general-face (ecb-face-default 1.0 nil nil
                                                    'ecb-default-general-face)
  "*Basic face for the ECB sources buffer.
Itīs recommended to define here the font-family, the font-size, the basic
color etc."
  :group 'ecb-faces)

(defcustom ecb-sources-general-face 'ecb-default-general-face
  "*Basic face for the ECB sources buffer.
This defines the basic face the whole sources buffer should displayed with. If
the face 'ecb-default-general-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-general-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-sources
  :type 'face
  :type '(radio (const :tag "Use ecb-default-general-face"
                       :value ecb-default-general-face)
                (face :tag "Special face"
                      :value ecb-sources-general-face)))

(defface ecb-methods-general-face (ecb-face-default 1.0 nil nil
                                                    'ecb-default-general-face)
  "*Basic face for the ECB methods buffer.
Itīs recommended to define here the font-family, the font-size, the basic
color etc."
  :group 'ecb-faces)

(defcustom ecb-methods-general-face 'ecb-default-general-face
  "*Basic face for the ECB methods buffer.
This defines the basic face the whole methods buffer should displayed with. If
the face 'ecb-default-general-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-general-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-methods
  :type '(radio (const :tag "Use ecb-default-general-face"
                       :value ecb-default-general-face)
                (face :tag "Special face"
                      :value ecb-methods-general-face)))

(defface ecb-history-general-face (ecb-face-default 1.0 nil nil
                                                    'ecb-default-general-face)
  "*Basic face for the ECB history buffer.
Itīs recommended to define here the font-family, the font-size, the basic
color etc."
  :group 'ecb-faces)

(defcustom ecb-history-general-face 'ecb-default-general-face
  "*Basic face for the ECB history buffer.
This defines the basic face the whole history buffer should displayed with. If
the face 'ecb-default-general-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-general-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-history
  :type '(radio (const :tag "Use ecb-default-general-face"
                       :value ecb-default-general-face)
                (face :tag "Special face"
                      :value ecb-history-general-face)))

(defface ecb-history-bucket-node-face (ecb-face-default nil nil nil
                                                        'ecb-bucket-node-face)
  "*Face used for displaying a bucket-node in the ECB-history-buffer.

In GNU Emacs 21.X this face inherits from the face 'ecb-bucket-node-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-history-buffer should be displayed with the same basic
attributes set by 'ecb-bucket-node-face' this set of basic attributes have
to be set in 'ecb-history-bucket-node-face' too!"
  :group 'ecb-faces)

(defcustom ecb-history-bucket-node-face 'ecb-history-bucket-node-face
  "*Basic face for displaying a bucket-node in the ECB-history-buffer.
This defines the basic face for the bucket-nodes used to bucketize the
history-entries as defined with the option `ecb-history-make-buckets'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-history
  :type '(radio (const :tag "Use ecb-bucket-node-face"
                       :value ecb-bucket-node-face)
                (face :tag "Special face"
                      :value ecb-history-bucket-node-face)))

(defface ecb-history-bucket-node-dir-soure-path-face (ecb-face-default nil nil nil
                                                                       'ecb-history-bucket-node-face
                                                                       ;; DarkCyan would be good too
                                                                       "DarkMagenta"
                                                                       "DarkMagenta")
  "*Face used for displaying the source-path part in a directory-bucket.

In GNU Emacs 21.X this face inherits from the face 'ecb-history-bucket-node-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-history-buffer should be displayed with the same basic
attributes set by 'ecb-history-bucket-node-face' this set of basic attributes have
to be set in 'ecb-history-bucket-node-dir-soure-path-face' too!"
  :group 'ecb-faces)

(defcustom ecb-history-bucket-node-dir-soure-path-face 'ecb-history-bucket-node-dir-soure-path-face
  "*Basic face for displaying the source-path part in a directory bucket.
This defines the face for the source-path part in a bucket-node of the
history-buffer if `ecb-history-make-buckets' is set to
'directory-with-source-path. For all other values of
`ecb-history-make-buckets' this option takes no effect.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-history
  :type '(radio (const :tag "Use ecb-history-bucket-node-face"
                       :value ecb-history-bucket-node-face)
                (face :tag "Special face"
                      :value ecb-history-bucket-node-dir-soure-path-face)))

(defface ecb-history-indirect-buffer-face (ecb-face-default nil nil t
                                                            'ecb-history-general-face)
  "*Define a face for displaying indirect buffers in the history buffer.

In GNU Emacs 21.X this face inherits from the face 'ecb-history-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-history-buffer should be displayed with the same basic
attributes set by 'ecb-history-general-face' this set of basic attributes have
to be set in 'ecb-history-indirect-buffer-face' too!"
  :group 'ecb-faces)
 
(defcustom ecb-history-indirect-buffer-face 'ecb-history-indirect-buffer-face
  "*Face for indirect buffers in the history buffer."
  :group 'ecb-history
  :group 'ecb-face-options
  :type '(radio (const :tag "Use ecb-history-general-face"
                       :value ecb-history-general-face)
                (face :tag "Special face"
                      :value ecb-history-indirect-buffer-face)))

(defface ecb-history-dead-buffer-face (ecb-face-default nil nil nil
                                                        'ecb-history-general-face
                                                        "gray60"
                                                        "gray60"
                                                        nil nil
                                                        nil "gray60")
  "*Define a face for history entries pointing to dead buffers.

In GNU Emacs 21.X this face inherits from the face 'ecb-history-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-history-buffer should be displayed with the same basic
attributes set by 'ecb-history-general-face' this set of basic attributes have
to be set in 'ecb-history-dead-buffer-face' too!"
  :group 'ecb-faces)
 
(defcustom ecb-history-dead-buffer-face 'ecb-history-dead-buffer-face
  "*Face for history entries pointing to dead buffers."
  :group 'ecb-history
  :group 'ecb-face-options
  :type '(radio (const :tag "Use ecb-history-general-face"
                       :value ecb-history-general-face)
                (face :tag "Special face"
                      :value ecb-history-dead-buffer-face)))


(defface ecb-default-highlight-face (ecb-face-default nil nil nil
                                                      nil ;'ecb-default-general-face
                                                      "yellow" nil
                                                      "cornflower blue" "magenta"
                                                      nil nil t)
  "*Define basic face for highlighting the selected node in a tree-buffer.
In GNU Emacs 21.X all highlighting faces in the ECB tree-buffers inherit from
this face. Therefore the default attributes like font etc. of a face used in a
tree-buffer for highlighting the current tag can be very easily changed with
face 'ecb-default-highlight-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature but the options
`ecb-directory-face', `ecb-source-face', `ecb-method-face' and
`ecb-history-face' offer the choice to use the face
'ecb-default-highlight-face' so also with XEmacs and GNU Emacs 20.X the basic
face-settings can be easily changed just by customizing the face
'ecb-default-highlight-face'!"
  :group 'ecb-faces)

(defface ecb-directory-face (ecb-face-default nil nil nil
                                              'ecb-default-highlight-face
                                              "yellow" nil
                                              "cornflower blue" "magenta"
                                              nil nil t)
  "*Define face used for highlighting current dir in directories buffer."
  :group 'ecb-faces)

(defcustom ecb-directory-face 'ecb-default-highlight-face
  "*Face used for highlighting current directory in the directories-buffer.
If the face 'ecb-default-highlight-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-highlight-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-directories
  :type '(radio (const :tag "Use ecb-default-highlight-face"
                       :value ecb-default-highlight-face)
                (face :tag "Special face"
                      :value ecb-directory-face)))

(defface ecb-source-face (ecb-face-default nil nil nil
                                           'ecb-default-highlight-face
                                           "yellow" nil
                                           "cornflower blue" "magenta"
                                           nil nil t)
  "*Define face used for highlighting current source in the sources buffer."
  :group 'ecb-faces)

(defcustom ecb-source-face 'ecb-default-highlight-face
  "*Face used for highlighting current source in the sources buffer.
If the face 'ecb-default-highlight-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-highlight-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-sources
  :type '(radio (const :tag "Use ecb-default-highlight-face"
                       :value ecb-default-highlight-face)
                (face :tag "Special face"
                      :value ecb-sources-face)))

(defface ecb-method-face (ecb-face-default nil nil nil
                                           'ecb-default-highlight-face
                                           "yellow" nil
                                           "cornflower blue" "magenta"
                                           nil nil t)
  "*Define face used for highlighting current tag in the methods buffer."
  :group 'ecb-faces)

(defcustom ecb-method-face 'ecb-default-highlight-face
  "*Face used for highlighting current tag in the methods buffer.
If the face 'ecb-default-highlight-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-highlight-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-methods
  :type '(radio (const :tag "Use ecb-default-highlight-face"
                       :value ecb-default-highlight-face)
                (face :tag "Special face"
                      :value ecb-method-face)))

(defface ecb-method-non-semantic-face (ecb-face-default nil nil nil
                                                        'ecb-methods-general-face
                                                        "brown" "brown")
  "*Define face used for displaying tags of non-semantic-sources."
  :group 'ecb-faces)

(defcustom ecb-method-non-semantic-face 'speedbar-tag-face
  "*Face used for for displaying tags of non-semantic-sources.
Default is the face used by speedbar for tags.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-methods
  :type '(radio (const :tag "Use ecb-default-highlight-face"
                       :value ecb-default-highlight-face)
                (face :tag "Special face"
                      :value ecb-method-face)))

(defface ecb-history-face (ecb-face-default nil nil nil
                                            'ecb-default-highlight-face
                                            "yellow" nil
                                            "cornflower blue" "magenta"
                                            nil nil t)
  "*Define face used for highlighting current entry in the history buffer."
  :group 'ecb-faces)

(defcustom ecb-history-face 'ecb-default-highlight-face
  "*Face used for highlighting current entry in the history buffer.
If the face 'ecb-default-highlight-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-highlight-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-history
  :type '(radio (const :tag "Use ecb-default-highlight-face"
                       :value ecb-default-highlight-face)
                (face :tag "Special face"
                      :value ecb-history-face)))

(defface ecb-analyse-face (ecb-face-default nil nil nil
                                            'ecb-default-highlight-face
                                            "yellow" nil
                                            "cornflower blue" "magenta"
                                            nil nil t)
  "*Define face used for highlighting current entry in the analyse buffer."
  :group 'ecb-faces)

(defcustom ecb-analyse-face 'ecb-default-highlight-face
  "*Face used for highlighting current entry in the analyse buffer.
If the face 'ecb-default-highlight-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-highlight-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-analyse
  :type '(radio (const :tag "Use ecb-default-highlight-face"
                       :value ecb-default-highlight-face)
                (face :tag "Special face"
                      :value ecb-analyse-face)))

(defface ecb-analyse-general-face (ecb-face-default 1.0 nil nil
                                                    'ecb-default-general-face)
  "*Basic face for the ECB analyse buffer.
Itīs recommended to define here the font-family, the font-size, the basic
color etc."
  :group 'ecb-faces)

(defcustom ecb-analyse-general-face 'ecb-default-general-face
  "*Basic face for the ECB analyse buffer.
This defines the basic face the whole history buffer should displayed with. If
the face 'ecb-default-general-face' is used then the display of all
ECB-tree-buffers can be changed by modifying only the face
'ecb-default-general-face'.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-analyse
  :type '(radio (const :tag "Use ecb-default-general-face"
                       :value ecb-default-general-face)
                (face :tag "Special face"
                      :value ecb-analyse-general-face)))

(defface ecb-analyse-bucket-element-face (ecb-face-default nil nil nil
                                                           'ecb-analyse-general-face
                                                           "brown")
  "*Face used for displaying elements of buckets in the ECB-analyse-buffer.

In GNU Emacs 21.X this face inherits from the face 'ecb-default-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-buffers should be displayed with the same basic
attributes set by 'ecb-default-general-face' this set of basic attributes have
to be set in 'ecb-analyse-bucket-node-face' too!"
  :group 'ecb-faces)

(defcustom ecb-analyse-bucket-element-face 'ecb-analyse-bucket-element-face
  "*Basic face for displaying elements of buckets in the ECB-analyse-buffer.
This defines the basic face for the elements of category-buckets like Context,
Prefix, Completions etc. in the ECB-analyse-buffer.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-analyse
  :type '(radio (const :tag "Use ecb-default-general-face"
                       :value ecb-default-general-face)
                (face :tag "Special face"
                      :value ecb-analyse-bucket-element-face)))

(defface ecb-analyse-bucket-node-face (ecb-face-default nil t nil
                                                        'ecb-bucket-node-face)
  "*Face used for displaying a bucket-node in the ECB-analyse-buffer.

In GNU Emacs >= 21.X this face inherits from the face 'ecb-bucket-node-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-buffers should be displayed with the same basic
attributes set by 'ecb-bucket-node-face' this set of basic attributes have
to be set in 'ecb-analyse-bucket-node-face' too!"
  :group 'ecb-faces)

(defcustom ecb-analyse-bucket-node-face 'ecb-analyse-bucket-node-face
  "*Basic face for displaying a bucket-node in the ECB-analyse-buffer.
This defines the basic face for the bucket-nodes like Context, Prefix,
Completions etc. in the ECB-analyse-buffer.

Changes take first effect after finishing and reactivating ECB!"
  :group 'ecb-face-options
  :group 'ecb-analyse
  :type '(radio (const :tag "Use ecb-bucket-node-face"
                       :value ecb-bucket-node-face)
                (face :tag "Special face"
                      :value ecb-analyse-bucket-node-face)))

(defface ecb-symboldef-symbol-face (ecb-face-default nil t nil
                                                     'ecb-default-general-face)
  "*Define face used for the symbol itself in the symboldef-buffer.

In GNU Emacs >= 21.X this face inherits from the face 'ecb-default-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-buffers should be displayed with the same basic
attributes set by 'ecb-default-general-face' this set of basic attributes have
to be set in 'ecb-analyse-bucket-node-face' too!"
  :group 'ecb-faces)

(defcustom ecb-symboldef-symbol-face 'use-font-lock-face
  "*Which face should be used for the symbol itself in the symboldef-buffer.

There are two choices: Either a face or the special symbol 'use-font-lock-face
whereas the latter one means that ECB uses that face font-lock uses for
fontifying the symbol \(e.g. font-lock-function-name-face for a function
symbol or font-lock-variable-name-face for a variable symbol)."
  :group 'ecb-face-options
  :group 'ecb-symboldef
  :type '(radio (const :tag "No special face" :value nil)
                (const :tag "Use font-lock face"
                       :value use-font-lock-face)
                (face :tag "Use face"
                      :value ecb-symboldef-symbol-face)))
  
(defface ecb-symboldef-prototype-face (ecb-face-default nil t nil
                                                        'ecb-default-general-face)
  "*Define face used for the prototype of symbol in the symboldef-buffer.

In GNU Emacs >= 21.X this face inherits from the face 'ecb-default-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-buffers should be displayed with the same basic
attributes set by 'ecb-default-general-face' this set of basic attributes have
to be set in 'ecb-analyse-bucket-node-face' too!"
  :group 'ecb-faces)

(defcustom ecb-symboldef-prototype-face nil
  "*Which face should be used for the symbol prototype in the symboldef-buffer.

The prototype can be the function prototype in case of a function or method or
- in case of a variable - the type of the variable \(in case of a typed
language)."
  :group 'ecb-face-options
  :group 'ecb-symboldef
  :type '(radio (const :tag "No special face" :value nil)
                (const :tag "Use ecb-symboldef-prototype-face"
                       :value ecb-symboldef-prototype-face)
                (face :tag "Special face")))

(defface ecb-tag-header-face (ecb-face-default nil nil nil nil nil nil
                                               "SeaGreen1" "SeaGreen1"
                                               nil nil t)
  "*Define face used for highlighting the tag header.
The tag header is the first line of the tag which is highlighted after
jumping to it by clicking onto a node in the methods buffer."
  :group 'ecb-faces)
  
(defcustom ecb-tag-header-face 'ecb-tag-header-face
  "*Face used for highlighting the tag header.
The tag header is the first line of the tag which is highlighted after
jumping to it by clicking onto a node in the methods buffer."
  :group 'ecb-face-options
  :group 'ecb-methods
  :type 'face)

(defface ecb-source-in-directories-buffer-face (ecb-face-default nil nil nil
                                                                 'ecb-directories-general-face
                                                                 "medium blue"
                                                                 "LightBlue1"
                                                                 nil nil
                                                                 nil "gray")
  "*Define a face for displaying sources in the directories buffer."
  :group 'ecb-faces)
 
(defcustom ecb-source-in-directories-buffer-face 'ecb-source-in-directories-buffer-face
  "*Face for source files in the directories buffer."
  :group 'ecb-directories
  :group 'ecb-face-options
  :type 'face)

(defface ecb-source-read-only-face (ecb-face-default nil nil t
                                                     'ecb-default-general-face)
  "*Define a face for displaying read-only sources."
  :group 'ecb-faces)
 
(defcustom ecb-source-read-only-face 'ecb-source-read-only-face
  "*Face for read-only sources."
  :group 'ecb-sources
  :group 'ecb-directories
  :group 'ecb-face-options
  :type 'face)

(defface ecb-directory-not-accessible-face (ecb-face-default nil nil nil
                                                             'ecb-directories-general-face
                                                             "gray60"
                                                             "gray60"
                                                             nil nil
                                                             nil "gray60")
  "*Define a face for displaying not accessible dirs in the directories buffer."
  :group 'ecb-faces)
 
(defcustom ecb-directory-not-accessible-face 'ecb-directory-not-accessible-face
  "*Face for not accessible dirs in the directories buffer."
  :group 'ecb-directories
  :group 'ecb-face-options
  :type 'face)

(defface ecb-type-tag-class-face (ecb-face-default nil t)
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-type-tag-interface-face (ecb-face-default nil t)
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-type-tag-struct-face (ecb-face-default nil t)
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-type-tag-typedef-face (ecb-face-default nil t)
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-type-tag-union-face (ecb-face-default nil t)
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-type-tag-enum-face (ecb-face-default nil t)
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-type-tag-group-face (ecb-face-default nil t nil nil
                                                   (if ecb-running-xemacs
                                                       "dimgray"
                                                     "dim gray")
                                                   (if ecb-running-xemacs
                                                       "dimgray"
                                                     "dim gray"))
  "*Define face used with option `ecb-type-tag-display'."
  :group 'ecb-faces)

(defface ecb-bucket-node-face (ecb-face-default nil t nil
                                                'ecb-default-general-face)
  "*Face used for displaying bucket-nodes in the ECB-buffers.
See also `ecb-bucket-node-display'.

In GNU Emacs 21.X this face inherits from the face 'ecb-default-general-face'.

With XEmacs and GNU Emacs 20.X there is no inheritance-feature so if the
buckets in the ECB-buffers should be displayed with the same basic
attributes set by 'ecb-default-general-face' this set of basic attributes have
to be set in 'ecb-bucket-node-face' too!"
  :group 'ecb-faces)

;; - mode-line faces-------------------------------------------

;; For XEmacs a face in the modeline should really inhertit from the face
;; 'modeline!
;; TODO: Klaus Berndl <klaus.berndl@sdm.de>: Currently with XEmacs 21.4.X
;; set-face-parent MUST be before defface - therefore we have to use make-face
;; first and then adding the values to this face we would have also added
;; by`defface. The defface is here only used to make this face customizable!
;; Maybe later XEmacs-versions support the parent-keyword with defface then we
;; can change back this ugly hack.
(when ecb-running-xemacs
  (make-face 'ecb-mode-line-win-nr-face)
  (set-face-parent 'ecb-mode-line-win-nr-face 'modeline nil '(default))
  (make-face-bold 'ecb-mode-line-win-nr-face))
(defface ecb-mode-line-win-nr-face (ecb-face-default nil t)
  "*Define face for the window-number in the mode-line.
See `ecb-mode-line-display-window-number'."
  :group 'ecb-faces)

(defcustom ecb-mode-line-win-nr-face 'ecb-mode-line-win-nr-face
  "*Face used for the window-number in the mode-line.
See `ecb-mode-line-display-window-number'. For XEmacs the face should inherit
from the face 'modeline \(see `set-face-parent')!"
  :group 'ecb-mode-line
  :group 'ecb-face-options
  :type 'face)

(when ecb-running-xemacs
  (make-face 'ecb-mode-line-prefix-face)
  (set-face-parent 'ecb-mode-line-prefix-face 'modeline nil '(default))
  (set-face-foreground 'ecb-mode-line-prefix-face "forestgreen"))
;;                        nil '(default color win)))
(defface ecb-mode-line-prefix-face (ecb-face-default nil nil nil nil
                                                     "forestgreen"
                                                     "forestgreen")
  "*Define face for the prefix in the mode-line.
See `ecb-mode-line-prefixes'."
  :group 'ecb-faces)

(defcustom ecb-mode-line-prefix-face 'ecb-mode-line-prefix-face
  "*Face used for the prefix in the mode-line.
See `ecb-mode-line-prefixes'. For XEmacs the face should inherit from the face
'modeline \(see `set-face-parent')!"
  :group 'ecb-mode-line
  :group 'ecb-face-options
  :type 'face)

(when ecb-running-xemacs
  (make-face 'ecb-mode-line-data-face)
  (set-face-parent 'ecb-mode-line-data-face 'modeline nil '(default)))
(defface ecb-mode-line-data-face (ecb-face-default)
  "*Define face for the data in the mode-line.
See `ecb-mode-line-data'."
  :group 'ecb-faces)

(defcustom ecb-mode-line-data-face 'ecb-mode-line-data-face
  "*Face used for the data in the mode-line.
See `ecb-mode-line-data'. For XEmacs the face should inherit from the face
'modeline \(see `set-face-parent')!"
  :group 'ecb-mode-line
  :group 'ecb-face-options
  :type 'face)

(silentcomp-provide 'ecb-face)

;;; ecb-face.el ends here
