Thanks Mr. Kjell,

I've just finished to implement another option... so good for me...

---
class CompareGUs
{
public:

    bool operator()(const Glib::ustring &lhs, const Glib::ustring &rhs)
    {
        bool retVal = true;

        gint comp_size = std::min<gint> (lhs.size(), rhs.size());

        bool next = true;

        for (gint it = 0; (it < comp_size) && next; it++)
        {
            switch (lhs.substr (it, 1).compare (rhs.substr (it, 1)))
            {
                case (-1):

                    next = false;
                    break;

                case (0):

                    break;

                case (1):

                    retVal = false;
                    next = false;
                    break;
            }
        }

        return retVal;

    }
};

std::map<Glib::ustring, Glib::ustring, CompareGUs> my_map;
---

Glus


2015-04-09 16:38 GMT+02:00 Kjell Ahlstedt <kjell.ahlst...@bredband.net>:

>  Gtk::Application::create() calls gtk_init(), which calls
> setlocale(LC_ALL, ""). The call to setlocale() affects the sort order of
> Glib::ustring. Such strings are compared by calls to g_utf8_collate(). I
> don't understand why a period (.) is ignored when strings are sorted
> according to the rules of the user-specified locale (which in my case is
> sv_SE.UTF-8).
>
> You can avoid the strange sort order by using a std::map<std::string,
> Glib::ustring> instead of a std::map<Glib::ustring, Glib::ustring>,
> provided all your map's keys contain only ascii characters.
>
> Kjell
>
>  Den 2015-04-09 12:56, Glus Xof skrev:
>
>
> 2015-04-08 21:33 GMT+02:00 Glus Xof <gtg...@gmail.com>:
>
>>   Hi guys,
>>
>>  I write a simple code (see at the bottom) to ask you why the order
>> sequence of values listed in the 'treeview' and in the "2nd Sequence" don't
>> correspond with the "1st Sequence"...
>>
>>  I mean, in the "1st Sequence" I get,
>>
>> .1 ==> Point -- One
>> .2 ==> Point -- Two
>> .3 ==> Point -- Three
>> 01 ==> Zero -- One
>> 02 ==> Zero -- Two
>> 11 ==> One -- One
>>
>>  Which is the desired sequence order... but in the "2nd..." (elaborated
>> in a Gtk Application context...)
>>
>> 01 * > Zero -- One
>> 02 * > Zero -- Two
>> .1 * > Point -- One
>> 11 * > One -- One
>> .2 * > Point -- Two
>> .3 * > Point -- Three
>>
>>
>>  What happens, here ??
>>
>
>  Can't yet understand why the sign pointer (.) seems not to be
> significant at Glib::ustring key comparisons when std::map values are
> extracted when iterate...
>
>  How can manage it ?
>
>
>>   Glus
>>
>> ----
>>
>> #include <gtkmm.h>
>> #include <iostream>
>> #include <map>
>>
>> class MainWindow
>> :
>>     public Gtk::Window
>> {
>> public:
>>
>>     MainWindow();
>>     virtual ~MainWindow();
>>
>> private:
>>
>>     void update_values();
>>     void fill_treeview();
>>
>>     void on_button_quit_clicked();
>>
>>     std::map<Glib::ustring, Glib::ustring> my_map2;
>>
>>     // Gtkmm widgets...
>>     Gtk::ScrolledWindow scrwindow;
>>     Gtk::TreeView treeview;
>>
>>     Gtk::Box vbox;
>>
>>     Gtk::ButtonBox bbox;
>>     Gtk::Button button_quit;
>>
>>     class ModelColumns
>>     :
>>         public Gtk::TreeModelColumnRecord
>>     {
>>     public:
>>
>>         ModelColumns()
>>         {
>>             add (nid);
>>             add (code);
>>             add (vlue);
>>         }
>>
>>         Gtk::TreeModelColumn<gint> nid;
>>         Gtk::TreeModelColumn<Glib::ustring> code;
>>         Gtk::TreeModelColumn<Glib::ustring> vlue;
>>     }
>>         model_columns;
>>
>>     Glib::RefPtr<Gtk::ListStore> refListStore;
>>
>>     Gtk::TreeRow row;
>>
>> };
>>
>> MainWindow::MainWindow()
>> :
>>     vbox (Gtk::ORIENTATION_VERTICAL),
>>
>>     button_quit ("Quit"),
>>
>>     refListStore (Gtk::ListStore::create (model_columns))
>> {
>>     set_title ("TreeView Test");
>>     set_border_width (10);
>>
>>     treeview.set_enable_search (false);
>>     treeview.set_model (refListStore);
>>
>>     treeview.append_column ("NÂș Id", model_columns.nid);
>>     treeview.append_column ("Code", model_columns.code);
>>     treeview.append_column ("Value", model_columns.vlue);
>>
>>     if (Gtk::CellRenderer * c_nid = treeview.get_column_cell_renderer (0))
>>         c_nid->set_alignment (0.5, 0.0);
>>
>>     if (Gtk::CellRenderer * c_code = treeview.get_column_cell_renderer
>> (1))
>>         c_code->set_alignment (0.5, 0.0);
>>
>>     scrwindow.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
>>     scrwindow.add (treeview);
>>
>>     bbox.set_margin_top (10);
>>     bbox.pack_start (button_quit, Gtk::PACK_SHRINK);
>>     bbox.set_layout (Gtk::BUTTONBOX_END);
>>
>>     button_quit.signal_clicked().connect (
>>         sigc::mem_fun (*this, &MainWindow::on_button_quit_clicked));
>>
>>     vbox.pack_start (scrwindow);
>>     vbox.pack_start (bbox, Gtk::PACK_SHRINK);
>>
>>     add (vbox);
>>
>>     fill_treeview();
>>
>>     show_all_children();
>> }
>>
>> void
>> MainWindow::update_values()
>> {
>>     my_map2.insert (std::pair<Glib::ustring, Glib::ustring> ("02", "Zero
>> -- Two"));
>>     my_map2.insert (std::pair<Glib::ustring, Glib::ustring> (".2", "Point
>> -- Two"));
>>     my_map2.insert (std::pair<Glib::ustring, Glib::ustring> ("11", "One
>> -- One"));
>>     my_map2.insert (std::pair<Glib::ustring, Glib::ustring> ("01", "Zero
>> -- One"));
>>     my_map2.insert (std::pair<Glib::ustring, Glib::ustring> (".1", "Point
>> -- One"));
>>     my_map2.insert (std::pair<Glib::ustring, Glib::ustring> (".3", "Point
>> -- Three"));
>> }
>>
>> void
>> MainWindow::fill_treeview()
>> {
>>     if (!refListStore->children().empty())
>>         refListStore->clear();
>>
>>     update_values();
>>
>>     std::cout << "2nd Sequence:" << std::endl;
>>
>>     // C++11 for...
>>     for (auto &it : my_map2)
>>     {
>>         std::cout << it.first << " * > " << it.second << std::endl;
>>
>>         row = *(refListStore->append());
>>
>>         row[model_columns.nid] = refListStore->children().size();
>>         row[model_columns.code] = it.first;
>>         row[model_columns.vlue] = it.second;
>>     }
>> }
>>
>>
>> void
>> MainWindow::on_button_quit_clicked()
>> {
>>     hide();
>> }
>>
>> MainWindow::~MainWindow()
>> {
>> }
>>
>> int main()
>> {
>>     std::map<Glib::ustring, Glib::ustring> my_map1;
>>
>>     my_map1.insert (std::pair<Glib::ustring, Glib::ustring> ("02", "Zero
>> -- Two"));
>>     my_map1.insert (std::pair<Glib::ustring, Glib::ustring> (".2", "Point
>> -- Two"));
>>     my_map1.insert (std::pair<Glib::ustring, Glib::ustring> ("11", "One
>> -- One"));
>>     my_map1.insert (std::pair<Glib::ustring, Glib::ustring> ("01", "Zero
>> -- One"));
>>     my_map1.insert (std::pair<Glib::ustring, Glib::ustring> (".1", "Point
>> -- One"));
>>     my_map1.insert (std::pair<Glib::ustring, Glib::ustring> (".3", "Point
>> -- Three"));
>>
>>     std::cout << "1st Sequence:" << std::endl;
>>
>>     // C++11 for...
>>     for (auto &it : my_map1)
>>         std::cout << it.first << " ==> " << it.second << std::endl;
>>
>>     std::cout << std::endl;
>>
>>
>>     Glib::RefPtr<Gtk::Application> app = Gtk::Application::create();
>>
>>     MainWindow main_window;
>>
>>     return app->run (main_window);
>> }
>>
>> ----
>>
>
>
>
_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to