Main.cpp
=========

#include <iostream>
#include "ExampleAssistant.h"


int main(int argc, char* argv[])
{
    Gtk::Main kit(argc, argv);

    if(!Glib::thread_supported()) Glib::thread_init();

    //Load the Glade file and instiate its widgets:
    Glib::RefPtr<Gtk::Builder> refBuilder = Gtk::Builder::create();
    #ifdef GLIBMM_EXCEPTIONS_ENABLED
      try
      {

        refBuilder->add_from_file("assistant.glade");
      }
      catch(const Glib::FileError& ex)
      {
        std::cerr << "FileError: " << ex.what() << std::endl;
        return 1;
      }
      catch(const Gtk::BuilderError& ex)
      {
        std::cerr << "BuilderError: " << ex.what() << std::endl;
        return 1;
      }
    #else
      std::auto_ptr<Glib::Error> error;

      if (!refBuilder->add_from_file("assistant.glade", error))
      {
        std::cerr << error->what() << std::endl;
        return 1;
      }
    #endif /* !GLIBMM_EXCEPTIONS_ENABLED */

    //Get the GtkBuilder-instantiated dialog::
    ExampleAssistant * pAssistant = 0;
    refBuilder->get_widget_derived("assistant1", pAssistant);

    // start the event loop
    Gtk::Main::run( *pAssistant );

    delete pAssistant;

    return 0;
}

====
Assistant class

#include <iostream>
#include "ExampleAssistant.h"



ExampleAssistant::ExampleAssistant( BaseObjectType* base_object, const
Glib::RefPtr<Gtk::Builder>& builder) :
  m_box(false, 12),
  m_label1("Type text to allow the assistant to continue:"),
  m_label2("Confirmation page"),
  m_check("Optional extra information")
{

  signal_apply().connect(sigc::mem_fun(*this,
    &ExampleAssistant::on_assistant_apply));
  signal_cancel().connect(sigc::mem_fun(*this,
    &ExampleAssistant::on_assistant_cancel));
  signal_close().connect(sigc::mem_fun(*this,
    &ExampleAssistant::on_assistant_close));
  signal_prepare().connect(sigc::mem_fun(*this,
    &ExampleAssistant::on_assistant_prepare));
  show_all_children();
}

ExampleAssistant::~ExampleAssistant()
{
}

void ExampleAssistant::get_result(bool& check_state, Glib::ustring&
entry_text)
{
  check_state = m_check.get_active();
  entry_text = m_entry.get_text();
}

void ExampleAssistant::on_assistant_apply()
{
  std::cout << "Apply was clicked";
  print_status();
}

void ExampleAssistant::on_assistant_cancel()
{
  std::cout << "Cancel was clicked";
  print_status();
  hide();
}

void ExampleAssistant::on_assistant_close()
{
  std::cout << "Assistant was closed";
  print_status();
  hide();
}

void ExampleAssistant::on_assistant_prepare(Gtk::Widget* /* widget */)
{
  set_title(Glib::ustring::compose("Gtk::Assistant example (Page %1 of %2)",
    get_current_page() + 1, get_n_pages()));
}

void ExampleAssistant::on_entry_changed()
{
  // The page is only complete if the entry contains text.
  if(m_entry.get_text_length())
    set_page_complete(m_box, true);
  else
    set_page_complete(m_box, false);
}

void ExampleAssistant::print_status()
{
  std::cout << ", entry contents: \"" << m_entry.get_text()
    << "\", checkbutton status: " << m_check.get_active() << std::endl;
}

=====
Assistant header

===


#include <gtkmm.h>

class ExampleAssistant : public Gtk::Assistant
{
public:
  //ExampleAssistant();
  ExampleAssistant( BaseObjectType* base_object, const
Glib::RefPtr<Gtk::Builder>& builder);
  virtual ~ExampleAssistant();

  void get_result(bool& check_state, Glib::ustring& entry_text);

private:
  // Signal handlers:
  void on_assistant_apply();
  void on_assistant_cancel();
  void on_assistant_close();
  void on_assistant_prepare(Gtk::Widget* widget);
  void on_entry_changed();

  // Member functions:
  void print_status();

  // Child widgets:
  Gtk::HBox m_box;
  Gtk::Label m_label1, m_label2;
  Gtk::CheckButton m_check;
  Gtk::Entry m_entry;

  Gtk::VBox *PtrPage1Vbox;
};


===
sample glade file
===
<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
  <object class="GtkAssistant" id="assistant1">
    <child>
      <object class="GtkLabel" id="label1">
        <property name="visible">True</property>
        <property name="label" translatable="yes">Introduction
page</property>
      </object>
      <packing>
        <property name="page_type">intro</property>
      </packing>
    </child>
    <child>
      <object class="GtkLabel" id="label2">
        <property name="visible">True</property>
        <property name="label" translatable="yes">Content page</property>
      </object>
    </child>
    <child>
      <object class="GtkLabel" id="label3">
        <property name="visible">True</property>
        <property name="label" translatable="yes">Confirmation
page</property>
      </object>
      <packing>
        <property name="page_type">confirm</property>
      </packing>
    </child>
  </object>
</interface>



=====

On Wed, Mar 9, 2011 at 6:36 AM, Murray Cumming <[email protected]> wrote:

> On Wed, 2011-03-09 at 06:11 -0500, Josh Sinykin wrote:
> > The assistant will not draw the containers defined the original way I had
> intended. Ie. Make the glade. The. Load it. And tell it to show.
> >
> > Even if you open glade and drop an assistant it fills in some sample
> labels onto pages. If you take this glade file and load it with the builder
> example pointed to this file the assistant will not draw the pages.
>
> Sorry. I can't understand that clearly. Maybe you could make a small
> complete test case. It might be a GtkBuilder problem rather than a
> Gtk::Builder problem, but a test case would help us to figure that out.
>
>
> --
> [email protected]
> www.murrayc.com
> www.openismus.com
>
>
_______________________________________________
gtkmm-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to