WebCore/html/DataGridColumnList.cpp
changeset 0 4f2f89ce4247
equal deleted inserted replaced
-1:000000000000 0:4f2f89ce4247
       
     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