I am currently adding data coming from CSV(Comma Separated Values) file.All the data from CSV is string only. As I have 35 rows and 6 Columns of data in string.
class ModelColumns : public Gtk::TreeModel::ColumnRecord
{
public:
ModelColumns()
{
add(m_colA);
add(m_colB);
add(m_colC);
add(m_colD);
add(m_colE);
add(m_colF);
}
Gtk::TreeModelColumn<Glib::ustring> m_colA;
Gtk::TreeModelColumn<Glib::ustring> m_colB;
Gtk::TreeModelColumn<Glib::ustring> m_colC;
Gtk::TreeModelColumn<Glib::ustring> m_colD;
Gtk::TreeModelColumn<Glib::ustring> m_colE;
Gtk::TreeModelColumn<Glib::ustring> m_colF;
};
Gtk::FileChooserDialog dialog("Please select a file to open",
Gtk::FILE_CHOOSER_ACTION_OPEN);
dialog.set_transient_for(*this);
//Add response buttons the the dialog:
dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL);
dialog.add_button("_Open", Gtk::RESPONSE_OK);
//Add filters, so that only certain file types can be selected:
auto filter_text = Gtk::FileFilter::create();
filter_text->set_name("csv files (*.csv)|*.csv");
filter_text->add_pattern("*");
dialog.add_filter(filter_text);
//Show the dialog and wait for a user response:
int result = dialog.run();
//Handle the response:
switch(result)
{
case(Gtk::RESPONSE_OK):
{
std::string filename = dialog.get_filename();
ifstream in(filename);
string line, field;
vector< vector<Glib::ustring> > array; // the 2D array
vector<Glib::ustring> v; // array of values for one line only
while ( getline(in,line) ) // get next line in file
{
v.clear();
stringstream ss(line);
while (getline(ss,field,',')) // break line into comma delimitted fields
{
v.push_back(field); // add each field to the 1D array
}
array.push_back(v); // add the 1D array to the 2D array
}
m_refTreeModel = Gtk::ListStore::create(m_Columns);
m_TreeView->set_model(m_refTreeModel);
m_TreeView->append_column("Data1", m_Columns.m_colA);
m_TreeView->append_column("Data2", m_Columns.m_colB);
m_TreeView->append_column("Data3", m_Columns.m_colC);
m_TreeView->append_column("Data4", m_Columns.m_colD);
m_TreeView->append_column("Data5", m_Columns.m_colE);
m_TreeView->append_column("Data6", m_Columns.m_colF);
Gtk::TreeModel::Row row = *(m_refTreeModel->append());
row[m_Columns.m_colA] = array[0][0]; row[m_Columns.m_colB] = array[0][1]; row[m_Columns.m_colC] = array[0][2];
row[m_Columns.m_colD] = array[0][3]; row[m_Columns.m_colE] = array[0][4]; row[m_Columns.m_colF] = array[0][5];
Gtk::TreeModel::Row row1 = *(m_refTreeModel->append());
row1[m_Columns.m_colA] = array[1][0]; row1[m_Columns.m_colB] = array[1][1]; row1[m_Columns.m_colC] = array[1][2]; row1[m_Columns.m_colD] = array[1][3]; row1[m_Columns.m_colE] = array[1][4]; row1[m_Columns.m_colF] = array[1][5];
//35 Rows Like This
break;
}
default:
{
break;
}
}
Like this I am adding 35 rows. Its very Lengthy. I am getting data from string vector as I have added the code for FileChoser Function. I am defining a class for TreeModel as I added.
Deepak, India.