Re: Fwd: pointer of functions - what a confusing things :-)



> --- Ursprüngliche Nachricht ---
> Von: "Jonathon Jongsma" <jonathon jongsma gmail com>
> An: "gtkmm-list gnome org" <gtkmm-list gnome org>
> Betreff: Fwd: pointer of functions - what a confusing things :-)
> Datum: Thu, 9 Mar 2006 09:24:12 -0600
> 
> sorry, forgot to copy this message to this list
> 
> ---------- Forwarded message ----------
> From: Jonathon Jongsma <jonathon jongsma gmail com>
> Date: Mar 9, 2006 8:01 AM
> Subject: Re: pointer of functions - what a confusing things :-)
> To: "thom_schu gmx de" <thom_schu gmx de>
> 
> 
> On 3/9/06, thom_schu gmx de <thom_schu gmx de> wrote:
> > Hi,
> > since I was not able to get the Gtk::TreeView working under Windows
> (linker
> > error), I decided to write my own Wrapper for a Gtk+-TreeView-Object.
> > The Event-Handling of my new class MyTreeView should work just like the
> > Event-Handling under Gtkmm.
> > Now I do it like this.
> 
> [snip]
> 
> > The method on_row_activated is not a member-function, and this I think
> is
> > very dirty - but I didnt find a way to give the CALLBACK() a
> > member-function. Isnt there a way to do it like this :
> >
> >  CALLBACK(&MyTreeView::on_row_activated) ?
> >
> > thanks in advance
> >
> > gizmo
> 
> This is what the entire libsigc++ library used by gtkmm solves (i.e.
> sigc::mem_fun(...)).  However, I would highly recommend that you try
> to get TreeView working instead of attempting to re-implement it.
> I've never used gtkmm on windows, but there certainly are people here
> that do.  Perhaps if you posted detailed information about your
> problems using TreeView on windows somebody on the list could help you
> get it working, or maybe we could uncover a bug in gtkmm in the
> process.
> 
> Jonner
> _______________________________________________
> gtkmm-list mailing list
> gtkmm-list gnome org
> http://mail.gnome.org/mailman/listinfo/gtkmm-list
> 


I have a programm which uses Gtk::TreeView which works fine under Linux.
I tried to compile this programm under Windows and got the linker-error
  
  variable 'vtable for Gtk::TreeViewColumn' can't be auto-imported. Please  
read the documentation for ld's --enable-auto-import for details.

In the forum I found the hint I should link with the option
  -Wl,--enable-runtime-pseudo-reloc
With this option (what ever it means) I could link, but my exe crashed (dont
know why and where), when I tried to execute. Then I started to substitute
the Gtk::TreeView with an GtkTreeView, for which I wrote my own wrapper -
and it worked so far.

But of course its not a clean solution and I would prefer to use the
Gtk::TreeView. I wrote a minimal example with a Gtk::TreeView (listed
below), got the same error "vtable for .....", then added the linker-option
"-W1,--enable ......", could link and surprise, the exe worked.

But then I wanted to go on with this example, just added the line
gtk_rc_parse("./gtkrc") in the main-method, and this was already enough that
my exe crashes again (a message window mentions the libglibmm). Im sure it
must have to do with the linker-option "-Wl,--enable .....", because my
programm, in which I substituted the Gtk::TreeView with an GtkTreeView I
link without that option and everything works fine.

Since Im not that expert when it comes to debug ...... Im lost at this
point.

Here my minimal example which worked.

#include <gtkmm.h>

class TreeViewTest : public Gtk::Window
{
  public:
    TreeViewTest();
    virtual ~TreeViewTest();
  
  protected:  
    Gtk::TreeView m_TreeView;
    Gtk::ScrolledWindow m_ScrolledWindow;
    Glib::RefPtr<Gtk::TreeStore> m_refTreeStore;
    
    class ModelColumns : public Gtk::TreeModelColumnRecord
    {
      public:
        Gtk::TreeModelColumn<std::string> name;
        Gtk::TreeModelColumn<std::string> surname;
    
        ModelColumns();
    };
  
    const ModelColumns m_columns;
};


TreeViewTest::ModelColumns::ModelColumns()
{
  add(name); 
  add(surname);
}


TreeViewTest::TreeViewTest()
{

  m_refTreeStore               = Gtk::TreeStore::create(m_columns);
  
  Gtk::TreeRow row             = *(m_refTreeStore->append());
  row[m_columns.name]          = "Max";
  row[m_columns.surname]       = "Muster"; 
  
  Gtk::TreeRow child_row       = *(m_refTreeStore->append(row.children()));
  child_row[m_columns.name]    = "Moritz";
  child_row[m_columns.surname] = "Muster"; 
  
  m_TreeView.set_model(m_refTreeStore);
  
  m_TreeView.append_column("Name",  m_columns.name);
  m_TreeView.append_column("Surname",  m_columns.surname);
  
  add(m_ScrolledWindow);
  m_ScrolledWindow.add(m_TreeView);
  
  m_ScrolledWindow.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  
  show_all();
}

TreeViewTest::~TreeViewTest() 
{
}

int main(int argc, char **argv) {
  
  Gtk::Main kit(argc, argv);
  //gtk_rc_parse("./gtkrc");
  Gtk::Window *win = new TreeViewTest();
  kit.run(*win);
  delete win;
  return 0;
}

-- 
"Feel free" mit GMX FreeMail!
Monat für Monat 10 FreeSMS inklusive! http://www.gmx.net



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]