[prev in list] [next in list] [prev in thread] [next in thread]
List: gtkmm
Subject: Re: TreeModel
From: Deepak Chiradoni <deepakachiradoni () gmail ! com>
Date: 2017-09-20 8:53:06
Message-ID: CA+9UgB=7hPDTtH6_znjGfFWV9yekVA5CZxeHVvx1aLZVvD==zQ () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
Hello Sir,
Thank you so much Sir, Its worked.
Regards
Deepak, India
On Wed, Sep 20, 2017 at 1:47 PM, Kjell Ahlstedt <kjellahlstedt@gmail.com>
wrote:
> Can't you use plain old loops? Something like this:
>
> class ModelColumns : public Gtk::TreeModel::ColumnRecord
> {
> public:
>
> ModelColumns()
> {
> for (int col = 0; col < 6; ++col)
> add(m_cols[col]);
> }
> Gtk::TreeModelColumn<Glib::ustring> m_cols[6];
> }
> ......
> m_refTreeModel = Gtk::ListStore::create(m_Columns);
> m_TreeView->set_model(m_refTreeModel);
> for (int col = 0; col < 6; ++col)
> m_TreeView->append_column(title[col],
> m_Columns.m_cols[col]);
>
> Gtk::TreeModel::Row rows[35];
> for (int row = 0; row < 35; ++row)
> {
> rows[row] = *(m_refTreeModel->append());
>
> for (int col = 0; col < 6; ++col)
> rows[row][m_Columns.m_cols[col]] = array[row][col];
> }
>
>
> Den 2017-09-19 kl. 14:35, skrev Deepak Chiradoni:
>
>> Hi,
>>
>> 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;
>> };
>>
>> void LoadBtn()
>> {
>> 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.
>>
>> Regrads
>> Deepak, India.
>>
>>
>
[Attachment #5 (text/html)]
<div dir="ltr">Hello Sir,<div><br><div>Thank you so much Sir, Its \
worked.</div><div><br></div><div>Regards</div><div>Deepak, \
India</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, \
Sep 20, 2017 at 1:47 PM, Kjell Ahlstedt <span dir="ltr"><<a \
href="mailto:kjellahlstedt@gmail.com" \
target="_blank">kjellahlstedt@gmail.com</a>></span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">Can't you use plain old loops? Something like this:<br> \
<br> class ModelColumns : public Gtk::TreeModel::ColumnRecord<br>
{<br>
public:<br>
<br>
ModelColumns()<br>
{<br>
for (int col = 0; col < 6; ++col)<br>
add(m_cols[col]);<br>
}<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_cols[6];<br>
}<br>
......<br>
m_refTreeModel = Gtk::ListStore::create(m_Colu<wbr>mns);<br>
m_TreeView->set_model(m_refTre<wbr>eModel);<br>
for (int col = 0; col < 6; ++col)<br>
m_TreeView->append_column(titl<wbr>e[col], \
m_Columns.m_cols[col]);<br> <br>
Gtk::TreeModel::Row rows[35];<br>
for (int row = 0; row < 35; ++row)<br>
{<br>
rows[row] = *(m_refTreeModel->append());<br>
<br>
for (int col = 0; col < 6; ++col)<br>
rows[row][m_Columns.m_cols[col<wbr>]] = array[row][col];<br>
}<br>
<br>
<br>
Den 2017-09-19 kl. 14:35, skrev Deepak Chiradoni:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex"> Hi,<br>
<br>
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.<br> <br>
class ModelColumns : public Gtk::TreeModel::ColumnRecord<br>
{<br>
public:<br>
<br>
ModelColumns()<br>
{<br>
add(m_colA);<br>
add(m_colB);<br>
add(m_colC);<br>
add(m_colD);<br>
add(m_colE);<br>
add(m_colF);<br>
}<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_colA;<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_colB;<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_colC;<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_colD;<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_colE;<br>
Gtk::TreeModelColumn<Glib::ust<wbr>ring> m_colF;<br>
};<br>
<br>
void LoadBtn()<br>
{<br>
Gtk::FileChooserDialog dialog("Please select a file to open",<br>
Gtk::FILE_CHOOSER_ACTION_OPEN<wbr>);<br>
dialog.set_transient_for(*thi<wbr>s);<br>
<br>
//Add response buttons the the dialog:<br>
dialog.add_button("_Cancel", Gtk::RESPONSE_CANCEL);<br>
dialog.add_button("_Open", Gtk::RESPONSE_OK);<br>
<br>
//Add filters, so that only certain file types can be selected:<br>
<br>
auto filter_text = Gtk::FileFilter::create();<br>
filter_text->set_name("csv files (*.csv)|*.csv");<br>
filter_text->add_pattern("*");<br>
dialog.add_filter(filter_text)<wbr>;<br>
<br>
//Show the dialog and wait for a user response:<br>
int result = dialog.run();<br>
<br>
//Handle the response:<br>
switch(result)<br>
{<br>
case(Gtk::RESPONSE_OK):<br>
{<br>
std::string filename = dialog.get_filename();<br>
<br>
ifstream in(filename);<br>
<br>
string line, field;<br>
<br>
vector< vector<Glib::ustring> > array; // the 2D \
array<br>
vector<Glib::ustring> v; // array of \
values for one line only<br> <br>
while ( getline(in,line) ) // get next line in file<br>
{<br>
v.clear();<br>
stringstream ss(line);<br>
<br>
<br>
while (getline(ss,field,',')) // break line into \
comma delimitted fields<br> {<br>
v.push_back(field); // add each field to the 1D \
array<br> }<br>
<br>
array.push_back(v); // add the 1D array to the 2D \
array<br> }<br>
<br>
m_refTreeModel = Gtk::ListStore::create(m_Colu<wbr>mns);<br>
m_TreeView->set_model(m_refTre<wbr>eModel);<br>
m_TreeView->append_column("Dat<wbr>a1", \
m_Columns.m_colA);<br>
m_TreeView->append_column("Dat<wbr>a2", \
m_Columns.m_colB);<br>
m_TreeView->append_column("Dat<wbr>a3", \
m_Columns.m_colC);<br>
m_TreeView->append_column("Dat<wbr>a4", \
m_Columns.m_colD);<br>
m_TreeView->append_column("Dat<wbr>a5", \
m_Columns.m_colE);<br>
m_TreeView->append_column("Dat<wbr>a6", \
m_Columns.m_colF);<br> <br>
Gtk::TreeModel::Row row = *(m_refTreeModel->append());<br>
row[m_Columns.m_colA] = array[0][0]; row[m_Columns.m_colB] = \
array[0][1]; row[m_Columns.m_colC] = array[0][2];<br>
row[m_Columns.m_colD] = array[0][3]; row[m_Columns.m_colE] = \
array[0][4]; row[m_Columns.m_colF] = array[0][5];<br> <br>
Gtk::TreeModel::Row row1 = *(m_refTreeModel->append());<br>
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];<br> <br>
//35 Rows Like This<br>
<br>
break;<br>
}<br>
default:<br>
{<br>
break;<br>
}<br>
}<br>
<br>
}<br>
<br>
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.<br> <br>
Regrads<br>
Deepak, India.<br>
<br>
</blockquote>
<br>
</blockquote></div><br></div>
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic