Sophie

Sophie

distrib > Mandriva > 2009.1 > x86_64 > by-pkgid > e447967e21fe00b997923c01e1eb38ae > files > 40

agave-debug-0.4.5-1mdv2008.1.x86_64.rpm

/*******************************************************************************
 *  PROJECT: GNOME Colorscheme
 *
 *  AUTHOR: Jonathon Jongsma
 *
 *  Copyright (c) 2005 Jonathon Jongsma
 *
 *  License:
 *    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 of the License, 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 this program; if not, write to the 
 *    Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
 *    Boston, MA  02111-1307  USA
 *
 *******************************************************************************/

#ifndef __GCS_CELLRENDERERSWATCH_H
#define __GCS_CELLRENDERERSWATCH_H

#include "core/gcs-types.h"
#include <gtkmm/cellrenderer.h>

namespace gcs
{
    namespace Widgets
    {

        /** A custom CellRenderer that is used to display a color swatch based
         * on a color value contained in a model row of a TreeView
         *
         * To use, create an instance of the renderer and add it to a
         * TreeViewColumn.  Then Connect the 'color' property of the
         * CellRenderer to one of the columns of the treemodel that specifies a
         * color hex string (i.e. "#FFFFFF").  This is done like this:
         *
         * pColumn->add_attribute(pRenderer->property_color(), columns.hexString)
         *
         * where pRenderer is the instance of the renderer that you created and pColumn is the TreeViewColumn
         */
        class CellRendererSwatch : public Gtk::CellRenderer
        {
            public:
                CellRendererSwatch(void);
                virtual ~CellRendererSwatch(void);

                /** The size of the colorswatch -- defaults to 18
                 */
                Glib::PropertyProxy<gint> property_size(void);
                Glib::PropertyProxy_ReadOnly<gint> property_size(void) const;

                /** The color of the colorswatch -- defaults to '#FFFFFF'
                 */
                Glib::PropertyProxy<ColorPtr> property_color(void);
                Glib::PropertyProxy_ReadOnly<ColorPtr> property_color(void)
                    const;

                /** The width of the border around the swatch in pixels --
                 * defaults to 1
                 */
                Glib::PropertyProxy<gint> property_border_width(void);
                Glib::PropertyProxy_ReadOnly<gint> property_border_width(void)
                    const;

                /** The color of the border around the swatch -- Currently this
                 * is not implemented and it's just always drawn in black
                 */
                Glib::PropertyProxy<ColorPtr> property_border_color(void);
                Glib::PropertyProxy_ReadOnly<ColorPtr>
                    property_border_color(void) const;

            protected:
                /** This function calculates the size of the cell.  It
                 * uses the values for padding and from the
                 * property_size() of the CellRenderer.  It gets called
                 * indirectly from the render_vfunc function for each cell that
                 * needs to be rendered.  It also calculates the offsets for
                 * the cell.
                 */
                virtual void get_size_vfunc(Gtk::Widget& widget,
                        const Gdk::Rectangle* cell_area,
                        int* x_offset, int* y_offset,
                        int* width, int* height) const;

                /** This function actually renders the cell.  It gets called
                 * automatically for each cell in the TreeView.  It calculates
                 * how much size it needs and then draws the swatch in this
                 * area
                 */
                virtual void render_vfunc(
                        const Glib::RefPtr<Gdk::Drawable>& window,
                        Gtk::Widget& widget,
                        const Gdk::Rectangle& background_area,
                        const Gdk::Rectangle& cell_area,
                        const Gdk::Rectangle& expose_area,
                        Gtk::CellRendererState flags);

            private:
                Glib::Property<gint> m_property_size;
                Glib::Property<ColorPtr> m_property_color;
                Glib::Property<gint> m_property_border_width;
                Glib::Property<ColorPtr> m_property_border_color;
        };

    } // namespace Widgets
} // namespace gcs
#endif // __GCS_CELLRENDERERSWATCH_H