[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">&lt;<a \
href="mailto:kjellahlstedt@gmail.com" \
target="_blank">kjellahlstedt@gmail.com</a>&gt;</span> wrote:<br><blockquote \
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc \
solid;padding-left:1ex">Can&#39;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 &lt; 6; ++col)<br>
                      add(m_cols[col]);<br>
                }<br>
                Gtk::TreeModelColumn&lt;Glib::ust<wbr>ring&gt; m_cols[6];<br>
        }<br>
......<br>
              m_refTreeModel =  Gtk::ListStore::create(m_Colu<wbr>mns);<br>
              m_TreeView-&gt;set_model(m_refTre<wbr>eModel);<br>
              for (int col = 0; col &lt; 6; ++col)<br>
                m_TreeView-&gt;append_column(titl<wbr>e[col], \
m_Columns.m_cols[col]);<br> <br>
             Gtk::TreeModel::Row rows[35];<br>
             for (int row = 0; row &lt; 35; ++row)<br>
             {<br>
               rows[row] = *(m_refTreeModel-&gt;append());<br>
<br>
               for (int col = 0; col &lt; 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&lt;Glib::ust<wbr>ring&gt;      m_colA;<br>
Gtk::TreeModelColumn&lt;Glib::ust<wbr>ring&gt;      m_colB;<br>
Gtk::TreeModelColumn&lt;Glib::ust<wbr>ring&gt;      m_colC;<br>
Gtk::TreeModelColumn&lt;Glib::ust<wbr>ring&gt;      m_colD;<br>
Gtk::TreeModelColumn&lt;Glib::ust<wbr>ring&gt;      m_colE;<br>
Gtk::TreeModelColumn&lt;Glib::ust<wbr>ring&gt;      m_colF;<br>
        };<br>
<br>
void LoadBtn()<br>
{<br>
       Gtk::FileChooserDialog dialog(&quot;Please select a file to open&quot;,<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(&quot;_Cancel&quot;, Gtk::RESPONSE_CANCEL);<br>
        dialog.add_button(&quot;_Open&quot;, 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-&gt;set_name(&quot;csv files (*.csv)|*.csv&quot;);<br>
        filter_text-&gt;add_pattern(&quot;*&quot;);<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&lt; vector&lt;Glib::ustring&gt; &gt; array;  // the 2D \
                array<br>
                        vector&lt;Glib::ustring&gt; 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,&#39;,&#39;))  // 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-&gt;set_model(m_refTre<wbr>eModel);<br>
              m_TreeView-&gt;append_column(&quot;Dat<wbr>a1&quot;, \
                m_Columns.m_colA);<br>
              m_TreeView-&gt;append_column(&quot;Dat<wbr>a2&quot;, \
                m_Columns.m_colB);<br>
              m_TreeView-&gt;append_column(&quot;Dat<wbr>a3&quot;, \
                m_Columns.m_colC);<br>
              m_TreeView-&gt;append_column(&quot;Dat<wbr>a4&quot;, \
                m_Columns.m_colD);<br>
              m_TreeView-&gt;append_column(&quot;Dat<wbr>a5&quot;, \
                m_Columns.m_colE);<br>
              m_TreeView-&gt;append_column(&quot;Dat<wbr>a6&quot;, \
m_Columns.m_colF);<br> <br>
              Gtk::TreeModel::Row row = *(m_refTreeModel-&gt;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-&gt;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