10bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/*
20bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Apple Inc. All rights reserved.
30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
40bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Redistribution and use in source and binary forms, with or without
50bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * modification, are permitted provided that the following conditions
60bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * are met:
70bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 1. Redistributions of source code must retain the above copyright
80bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *    notice, this list of conditions and the following disclaimer.
90bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *    documentation and/or other materials provided with the distribution.
120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch *
130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch */
250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef DataGridColumn_h
270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#define DataGridColumn_h
280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(DATAGRID)
300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderStyle.h"
320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/PassRefPtr.h>
330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include <wtf/RefCounted.h>
34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h>
350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochnamespace WebCore {
370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass DataGridColumnList;
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass DataGridColumn : public RefCounted<DataGridColumn> {
410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic:
420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static PassRefPtr<DataGridColumn> create(const String& columnID, const String& label, const String& type, bool primary, unsigned short sortable)
430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return adoptRef(new DataGridColumn(columnID, label, type, primary, sortable));
450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const AtomicString& id() const { return m_id; }
480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setId(const AtomicString& id) { m_id = id; columnChanged(); }
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const AtomicString& label() const { return m_label; }
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setLabel(const AtomicString& label) { m_label = label; columnChanged(); }
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const AtomicString& type() const { return m_type; }
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setType(const AtomicString& type) { m_type = type; columnChanged(); }
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned short sortable() const { return m_sortable; }
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setSortable(unsigned short sortable) { m_sortable = sortable; columnChanged(); }
580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned short sortDirection() const { return m_sortDirection; }
600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setSortDirection(unsigned short sortDirection) { m_sortDirection = sortDirection; columnChanged(); }
610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool primary() const { return m_primary; }
630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setPrimary(bool);
640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setColumnList(DataGridColumnList* list)
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_columns = list;
680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_columnStyle = 0;
690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_headerStyle = 0;
700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        m_rect = IntRect();
710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RenderStyle* columnStyle() const { return m_columnStyle.get(); }
740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setColumnStyle(PassRefPtr<RenderStyle> style) { m_columnStyle = style; }
750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RenderStyle* headerStyle() const { return m_headerStyle.get(); }
770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setHeaderStyle(PassRefPtr<RenderStyle> style) { m_headerStyle = style; }
780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    const IntRect& rect() const { return m_rect; }
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void setRect(const IntRect& rect) { m_rect = rect; }
810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate:
830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    DataGridColumn(const String& columnID, const String& label, const String& type, bool primary, unsigned short sortable)
840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        : m_columns(0)
850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_id(columnID)
860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_label(label)
870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_type(type)
880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_primary(primary)
890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_sortable(sortable)
900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        , m_sortDirection(0)
910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void columnChanged();
950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    DataGridColumnList* m_columns; // Not refcounted.  The columns list will null out our reference when it goes away.
970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    AtomicString m_id;
990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    AtomicString m_label;
1000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    AtomicString m_type;
1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    bool m_primary;
1030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned short m_sortable;
1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    unsigned short m_sortDirection;
1060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RefPtr<RenderStyle> m_columnStyle; // The style used to render the column background behind the row cells.
1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    RefPtr<RenderStyle> m_headerStyle; // The style used to render the column header above the row cells.
1090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    IntRect m_rect;
1110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch};
1120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} // namespace WebCore
1140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif
1160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // DataGridColumn_h
118