Home | History | Annotate | Download | only in html
      1 /*
      2  * Copyright (C) 2009 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 
     28 #if ENABLE(DATAGRID)
     29 
     30 #include "AtomicString.h"
     31 #include "DataGridColumnList.h"
     32 #include "HTMLDataGridElement.h"
     33 #include "PlatformString.h"
     34 #include "RenderObject.h"
     35 
     36 namespace WebCore {
     37 
     38 DataGridColumnList::DataGridColumnList(HTMLDataGridElement* dataGrid)
     39     : m_dataGrid(dataGrid)
     40 {
     41 }
     42 
     43 DataGridColumnList::~DataGridColumnList()
     44 {
     45     clear();
     46 }
     47 
     48 DataGridColumn* DataGridColumnList::itemWithName(const AtomicString& name) const
     49 {
     50     unsigned length = m_columns.size();
     51     for (unsigned i = 0; i < length; ++i) {
     52         if (m_columns[i]->id() == name)
     53             return m_columns[i].get();
     54     }
     55     return 0;
     56 }
     57 
     58 void DataGridColumnList::setDataGridNeedsLayout()
     59 {
     60     // Mark the datagrid as needing layout.
     61     if (dataGrid() && dataGrid()->renderer())
     62         dataGrid()->renderer()->setNeedsLayout(true);
     63 }
     64 
     65 DataGridColumn* DataGridColumnList::add(const String& id, const String& label, const String& type, bool primary, unsigned short sortable)
     66 {
     67     return add(DataGridColumn::create(id, label, type, primary, sortable).get());
     68 }
     69 
     70 DataGridColumn* DataGridColumnList::add(DataGridColumn* column)
     71 {
     72     if (column->primary())
     73         m_primaryColumn = column;
     74     m_columns.append(column);
     75     column->setColumnList(this);
     76     setDataGridNeedsLayout();
     77     return column;
     78 }
     79 
     80 void DataGridColumnList::remove(DataGridColumn* col)
     81 {
     82     size_t index = m_columns.find(col);
     83     if (index == notFound)
     84         return;
     85     m_columns.remove(index);
     86     if (col == m_primaryColumn)
     87         m_primaryColumn = 0;
     88     if (col == m_sortColumn)
     89         m_sortColumn = 0;
     90     col->setColumnList(0);
     91     setDataGridNeedsLayout();
     92 }
     93 
     94 void DataGridColumnList::move(DataGridColumn* col, unsigned long index)
     95 {
     96     size_t colIndex = m_columns.find(col);
     97     if (colIndex == notFound)
     98         return;
     99     m_columns.insert(index, col);
    100     setDataGridNeedsLayout();
    101 }
    102 
    103 void DataGridColumnList::clear()
    104 {
    105     unsigned length = m_columns.size();
    106     for (unsigned i = 0; i < length; ++i)
    107         m_columns[i]->setColumnList(0);
    108     m_columns.clear();
    109     m_primaryColumn = 0;
    110     m_sortColumn = 0;
    111     setDataGridNeedsLayout();
    112 }
    113 
    114 void DataGridColumnList::primaryColumnChanged(DataGridColumn* col)
    115 {
    116     if (col->primary())
    117         m_primaryColumn = col;
    118     else if (m_primaryColumn = col)
    119         m_primaryColumn = 0;
    120 
    121     setDataGridNeedsLayout();
    122 }
    123 
    124 } // namespace WebCore
    125 
    126 #endif
    127