1 /* Copyright(C) 2006 The gtkmm Development Team
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Library General Public
5 * License as published by the Free Software Foundation; either
6 * version 2 of the License, or(at your option) any later version.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Library General Public License for more details.
13 * You should have received a copy of the GNU Library General Public
14 * License along with this library; if not, write to the Free
15 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 #include <gtkmm/listviewtext.h>
23 ListViewText::TextModelColumns::TextModelColumns(guint columns_count)
24 : m_columns_count(columns_count)
26 m_columns = new Gtk::TreeModelColumn<Glib::ustring>[m_columns_count];
30 for(guint i = 0; i < m_columns_count; ++i)
37 ListViewText::TextModelColumns::~TextModelColumns()
43 guint ListViewText::TextModelColumns::get_num_columns() const
45 return m_columns_count;
48 ListViewText::ListViewText(guint columns_count, bool editable, Gtk::SelectionMode mode)
49 : m_model_columns(columns_count)
51 char column_title[20];
54 m_model = Gtk::ListStore::create(m_model_columns);
58 for(guint i = 0; i < columns_count; ++i)
60 //Get text for the number:
61 sprintf(column_title, "%d", i);
64 append_column_editable(column_title, m_model_columns.m_columns[i]);
66 append_column(column_title, m_model_columns.m_columns[i]);
69 // Set multiple or simple selection
70 get_selection()->set_mode(mode);
73 ListViewText::~ListViewText()
77 void ListViewText::set_column_title(guint column, const Glib::ustring& title)
79 g_return_if_fail( column < get_columns().size() );
81 get_column(column)->set_title(title);
84 Glib::ustring ListViewText::get_column_title(guint column) const
86 g_return_val_if_fail( column < get_columns().size(), "" ); //Using Glib::ustring() fails sometimes: Bug #352226
88 return get_column(column)->get_title();
91 guint ListViewText::append_text(const Glib::ustring& column_one_value)
93 Gtk::TreeModel::Row newRow = *(m_model->append());
95 newRow[m_model_columns.m_columns[0]] = column_one_value;
100 void ListViewText::prepend_text(const Glib::ustring& column_one_value)
102 Gtk::TreeModel::Row newRow = *(m_model->prepend());
104 newRow[m_model_columns.m_columns[0]] = column_one_value;
107 void ListViewText::insert_text(guint row, const Glib::ustring& column_one_value)
109 g_return_if_fail( row < size() );
111 Gtk::ListStore::const_iterator iter = m_model->children()[row];
112 Gtk::TreeModel::Row newRow = *(m_model->insert(iter));
114 if(!column_one_value.empty())
116 newRow[m_model_columns.m_columns[0]] = column_one_value;
120 void ListViewText::clear_items()
125 Glib::ustring ListViewText::get_text(guint row, guint column) const
127 Glib::ustring result;
129 g_return_val_if_fail( row < size(), result );
131 Gtk::TreeModel::iterator iter = m_model->children()[row];
132 iter->get_value(column, result);
137 void ListViewText::set_text(guint row, guint column, const Glib::ustring& value)
139 g_return_if_fail( row < size() );
141 Gtk::TreeModel::iterator iter = m_model->children()[row];
142 (*iter)->set_value(column, value);
145 void ListViewText::set_text(guint row, const Glib::ustring& value)
147 g_return_if_fail( row < size() );
149 Gtk::TreeModel::iterator iter = m_model->children()[ row ];
150 (*iter)->set_value(0, value);
153 guint ListViewText::size() const
155 return (guint)m_model->children().size();
158 guint ListViewText::get_num_columns() const
160 return m_model_columns.get_num_columns();
163 ListViewText::SelectionList ListViewText::get_selected()
165 Glib::RefPtr<Gtk::TreeSelection> selected = get_selection();
166 Gtk::TreeSelection::ListHandle_Path selectedRows = selected->get_selected_rows();
169 SelectionList selectionList;
170 selectionList.reserve( selected->count_selected_rows() );
172 // Save selected rows
174 for(Gtk::TreeSelection::ListHandle_Path::const_iterator iter = selectedRows.begin(); iter != selectedRows.end(); ++iter)
176 selectionList.push_back( *((*iter).begin()) );
179 return selectionList;