root/headers/private/interface/ColumnTypes.h
/*******************************************************************************
/
/       File:                   ColumnTypes.h
/
/   Description:    Experimental classes that implement particular column/field
/                                       data types for use in BColumnListView.
/
/       Copyright 2000+, Be Incorporated, All Rights Reserved
/
*******************************************************************************/


#ifndef _COLUMN_TYPES_H
#define _COLUMN_TYPES_H


#include "ColumnListView.h"

#include <Bitmap.h>
#include <DateFormat.h>
#include <DateTimeFormat.h>
#include <Font.h>
#include <NumberFormat.h>
#include <String.h>


//=====================================================================
// Common base-class: a column that draws a standard title at its top.

class BTitledColumn : public BColumn
{
public:
                                                BTitledColumn(const char* title, float width, float minWidth,
                                                        float maxWidth, alignment align = B_ALIGN_LEFT);
        virtual void            DrawTitle(BRect rect, BView* parent);
        virtual void            GetColumnName(BString* into) const;

                        void            DrawString(const char*, BView*, BRect);
                        void            SetTitle(const char* title);
                        void            Title(BString* forTitle) const;
                                                        // sets the BString arg to be the title
                        float           FontHeight() const;

        virtual float           GetPreferredWidth(BField* field, BView* parent) const;

protected:
                BNumberFormat   fNumberFormat;

private:
                        float           fFontHeight;
                        BString         fTitle;
};


//=====================================================================
// Field and column classes for strings.

class BStringField : public BField
{
public:
                                                                BStringField(const char* string);

                        void                            SetString(const char* string);
                        const char*                     String() const;
                        void                            SetClippedString(const char* string);
                        bool                            HasClippedString() const;
                        const char*                     ClippedString();
                        void                            SetWidth(float);
                        float                           Width();

private:
                        float                           fWidth;
                        BString                         fString;
                        BString                         fClippedString;
};


//--------------------------------------------------------------------

class BStringColumn : public BTitledColumn
{
public:
                                                                BStringColumn(const char* title, float width,
                                                                        float minWidth, float maxWidth, uint32 truncate,
                                                                        alignment align = B_ALIGN_LEFT);
        virtual void                            DrawField(BField* field, BRect rect, BView* parent);
        virtual int                                     CompareFields(BField* field1, BField* field2);
        virtual float                           GetPreferredWidth(BField* field, BView* parent) const;
        virtual bool                            AcceptsField(const BField* field) const;

private:
                        uint32                          fTruncate;
};


//=====================================================================
// Field and column classes for dates.

class BDateField : public BField
{
public:
                                                                BDateField(time_t* t);
                        void                            SetWidth(float);
                        float                           Width();
                        void                            SetClippedString(const char*);
                        const char*                     ClippedString();
                        time_t                          Seconds();
                        time_t                          UnixTime();

private:
        struct  tm                                      fTime;
                        time_t                          fUnixTime;
                        time_t                          fSeconds;
                        BString                         fClippedString;
                        float                           fWidth;
};


//--------------------------------------------------------------------

class BDateColumn : public BTitledColumn
{
public:
                                                                BDateColumn(const char* title, float width,
                                                                        float minWidth, float maxWidth,
                                                                        alignment align = B_ALIGN_LEFT);
        virtual void                            DrawField(BField* field, BRect rect, BView* parent);
        virtual int                                     CompareFields(BField* field1, BField* field2);

private:
                        BDateTimeFormat         fDateTimeFormat;
                        BDateFormat                     fDateFormat;
                        BString                         fTitle;
};


//=====================================================================
// Field and column classes for numeric sizes.

class BSizeField : public BField
{
public:
                                                                BSizeField(off_t size);
                        void                            SetSize(off_t);
                        off_t                           Size();

private:
                        off_t                           fSize;
};


//--------------------------------------------------------------------

class BSizeColumn : public BTitledColumn
{
public:
                                                                BSizeColumn(const char* title, float width,
                                                                        float minWidth, float maxWidth,
                                                                        alignment align = B_ALIGN_LEFT);
        virtual void                            DrawField(BField* field, BRect rect, BView* parent);
        virtual int                                     CompareFields(BField* field1, BField* field2);
};


//=====================================================================
// Field and column classes for integers.

class BIntegerField : public BField
{
public:
                                                                BIntegerField(int32 number);
                        void                            SetValue(int32);
                        int32                           Value();

private:
                        int32                           fInteger;
};


//--------------------------------------------------------------------

class BIntegerColumn : public BTitledColumn
{
public:
                                                                BIntegerColumn(const char* title, float width,
                                                                        float minWidth, float maxWidth,
                                                                        alignment align = B_ALIGN_LEFT);
        virtual void                            DrawField(BField* field, BRect rect, BView* parent);
        virtual int                                     CompareFields(BField* field1, BField* field2);
};


//=====================================================================
// Field and column classes for bitmaps

class BBitmapField : public BField
{
public:
                                                                BBitmapField(BBitmap* bitmap);
        const   BBitmap*                        Bitmap();
                        void                            SetBitmap(BBitmap* bitmap);

private:
                        BBitmap*                        fBitmap;
};


//--------------------------------------------------------------------

class BBitmapColumn : public BTitledColumn
{
public:
                                                                BBitmapColumn(const char* title, float width,
                                                                        float minWidth, float maxWidth,
                                                                        alignment align = B_ALIGN_LEFT);
        virtual void                            DrawField(BField* field, BRect rect, BView* parent);
        virtual int                                     CompareFields(BField* field1, BField* field2);
        virtual bool                            AcceptsField(const BField* field) const;
};


//=====================================================================
// Column to display BIntegerField objects as a graph.

class GraphColumn : public BIntegerColumn
{
public:
                                                                GraphColumn(const char* name, float width,
                                                                        float minWidth, float maxWidth,
                                                                        alignment align = B_ALIGN_LEFT);
        virtual void                            DrawField(BField* field, BRect rect, BView* parent);
};


#endif  // _COLUMN_TYPES_H