// -*- c++ -*-
//  Generated by gtkmmproc from ./../notebook.gen_h -- DO NOT MODIFY!
#include <gtk--/notebook.h>
#include <gtk--/private/notebook_p.h>
namespace Gtk
{

Notebook::Page* Notebook::get_current() const
{
   return reinterpret_cast<Notebook::Page*>(gtkobj()->cur_page);
}

Widget*
Notebook::get_current_child()
{
  GtkNotebookPage* page = gtkobj()->cur_page;
  return wrap(GTK_WIDGET(page->child));
}

/*********************************************************************
***** Page Properties
*********************************************************************/

Widget* Notebook_Helpers::Page::get_child() {return wrap(gtkobj()->child);}
bool Notebook_Helpers::Page::get_expand()       {return gtkobj()->expand;}
bool Notebook_Helpers::Page::get_fill()         {return gtkobj()->fill;}
GtkPackType Notebook_Helpers::Page::get_pack()  {return GtkPackType(gtkobj()->pack);}
Widget* Notebook_Helpers::Page::get_tab()
{
  if (gtkobj()->default_tab) return 0;
  return wrap(gtkobj()->tab_label);
}
Widget* Notebook_Helpers::Page::get_menu()
{
  if (gtkobj()->default_menu) return 0;
  return wrap(gtkobj()->menu_label);
}

void Notebook_Helpers::Page::set_tab (Widget* tab)
{
  gtk_notebook_set_tab_label(parent(),gtkobj()->child,(tab?tab->gtkobj():0));
}

void Notebook_Helpers::Page::set_tab (Widget& tab)
{
  gtk_notebook_set_tab_label(parent(),gtkobj()->child,tab.gtkobj());
}

string Notebook_Helpers::Page::get_tab_text()
{
  GtkWidget* w=gtk_notebook_get_tab_label(parent(),gtkobj()->child);
  char *s=0;
  if (w&& GTK_IS_LABEL (w))
    s=GTK_LABEL(w)->label;
  if (s) return s;
  return "";
}

void Notebook_Helpers::Page::set_tab_text(const nstring& str)
{
  gtk_notebook_set_tab_label_text(parent(),gtkobj()->child,str.gc_str());
}

void Notebook_Helpers::Page::set_menu(Widget* menu)
{
  gtk_notebook_set_menu_label(parent(),gtkobj()->child,(menu?menu->gtkobj():0));
}

void Notebook_Helpers::Page::set_menu(Widget& menu)
{
  gtk_notebook_set_menu_label(parent(),gtkobj()->child,menu.gtkobj());
}

void Notebook_Helpers::Page::set_tab_packing(bool expand,bool fill,GtkPackType pack_type)
{
  gtk_notebook_set_tab_label_packing(parent(),gtkobj()->child,expand,fill,pack_type);
}

/*********************************************************************
***** List properties
*********************************************************************/
typedef Notebook_Helpers::PageList::iterator page_iterator;

page_iterator Notebook_Helpers::PageList::insert(page_iterator position,const Element& e)
{
  int pos;

  // locate the items desired position
  if (!position.node)
    pos=-1;
  else
    pos=g_list_position(glist(),position.node);

  // give item to gtk+
  gtk_notebook_insert_page_menu(
                             parent_->gtkobj(),
                             ((e.child_)?e.child_->gtkobj():0),
                             ((e.tab_)?e.tab_->gtkobj():0),
                             ((e.menu_)?e.menu_->gtkobj():0),
                             pos);

  // return the right iterator
  if (pos==0)
    return begin();
  if (!position.node)
    return --end();
  return --position;
}

void Notebook_Helpers::PageList::reorder(page_iterator pos,page_iterator page)
{
  int position=g_list_position(glist(),pos.node);
  gtk_notebook_reorder_child(parent_->gtkobj(),(*page)->gtkobj()->child,position);
}


}

namespace Gtk {
Gtk::Notebook *wrap (GtkNotebook *o)
  {
    return static_cast<Gtk::Notebook *> (Gtk::wrap_auto ((GtkObject *) (o)));
  }
}

namespace Gtk {
Notebook_Class Notebook::notebook_class = {0};

Object* Notebook_Class::wrap_new(GtkObject* o)
  {
    Object* cpp=manage(new Notebook((GtkNotebook*)(o)));
    return cpp;
  }

bool Notebook::isA( Object *checkcast)
  {
    return GTK_IS_NOTEBOOK(checkcast->gtkobj());
  }

GtkType Notebook::get_type()
  {
    return notebook_class.get_type();
  }

GtkType Notebook_Class::get_type()
  {
    if (!type)
      {
        CppClassParent::CppObjectType::get_type();
        GtkTypeInfo info =
          {
            "Gtk__Notebook",
            sizeof(BaseObjectType),
            sizeof(BaseClassType),
            (GtkClassInitFunc) class_init_function,
            (GtkObjectInitFunc) object_init_function,
            /* reserved_1 */ NULL,
            /* reserved_2 */ NULL,
            /*base_class_init_func */ (GtkClassInitFunc) NULL
          };
        type=gtk_type_unique(gtk_notebook_get_type(), &info);
      }
    return type;
  }

const char* const Notebook::signal_names[]={
   "switch_page",
   0};

void Notebook::initialize_class()
  {

     notebook_self=this;

  }

void Notebook_Class::class_init_function(GtkNotebookClass *klass)
  {
    CppClassParent::class_init_function((BaseClassParent*)klass);
    klass->switch_page=switch_page_callback;
  }

void Notebook_Class::object_init_function(GtkNotebook *)
  {}

}

void Gtk::Notebook_Helpers::PageList::remove(const_reference child)
{
  g_return_if_fail(child!=0);
  gtk_container_remove(parent_->Container::gtkobj(),
                       (GtkWidget*)(child->get_child()->gtkobj()));
}

void Gtk::Notebook_Helpers::PageList::remove(Widget &w)
{
  gtk_container_remove(parent_->Container::gtkobj(),(GtkWidget*)(w.gtkobj()));
}

Gtk::Notebook_Helpers::PageList::iterator Gtk::Notebook_Helpers::PageList::erase(iterator position)
{
  if (!position.node||position==end()) return end();
  iterator next=position;
  next++;

  gtk_container_remove(parent_->Container::gtkobj(),
      (GtkWidget*)((*position)->get_child()->gtkobj()));
  return next;
}

Gtk::Notebook_Helpers::PageList::iterator Gtk::Notebook_Helpers::PageList::find(const_reference w)
{
  iterator i=begin();
  for (i=begin();i!=end()&&*i!=w;i++);
  return i;
}

Gtk::Notebook_Helpers::PageList::iterator Gtk::Notebook_Helpers::PageList::find(Widget& w)
{
  iterator i;
  for (i=begin();i!=end()&&(*i)->get_child()!=&w;i++);
  return i;
}

Gtk::Notebook_Helpers::PageList::value_type Gtk::Notebook_Helpers::PageList::operator[](size_type l) const
          { size_type j; iterator i; for (i=begin(),j=0;i!=end(),j<l;++i,++j);
            return (*i);
          }

GList*& Gtk::Notebook_Helpers::PageList::glist() const
{ return parent_->gtkobj()->children; }

Gtk::Notebook_Helpers::PageList::iterator Gtk::Notebook_Helpers::PageList::begin_() const
{return iterator(glist(),glist());}

Gtk::Notebook_Helpers::PageList::iterator Gtk::Notebook_Helpers::PageList::end_() const
{return iterator(glist(),(GList*)0);}

Gtk::Notebook_Helpers::PageList::size_type Gtk::Notebook_Helpers::PageList::size() const
  { return g_list_length(glist()); }

void Gtk::Notebook_Helpers::PageList::clear()
{ erase(begin(),end()); }

void Gtk::Notebook_Helpers::PageList::erase(iterator start, iterator stop)
{ while(start != stop) start=erase(start); }


Gtk::Notebook::Notebook(GtkNotebook *castitem)
  :     Gtk::Container((GtkContainer*)(castitem))
  {
    initialize_class();
  }

Gtk::Notebook::Notebook()
  :     Gtk::Container((GtkContainer*)(gtk_object_new(get_type(),0)))
  {
    initialize_class();
  }

Gtk::Notebook::~Notebook() { destroy_(); }

gint Gtk::Notebook::get_current_page_num() const
  {
    return gtk_notebook_get_current_page(const_cast<GtkNotebook*>(gtkobj()));
  }

Gtk::Widget* Gtk::Notebook::get_nth_page(gint page_number)
  {
    return Gtk::wrap(gtk_notebook_get_nth_page(gtkobj(),page_number));
  }

gint Gtk::Notebook::page_num(const Gtk::Widget& child)
  {
    return gtk_notebook_page_num(gtkobj(),const_cast<GtkWidget*>(child.gtkobj()));
  }

void Gtk::Notebook::set_page(gint page_number)
  {
    gtk_notebook_set_page(gtkobj(),page_number);
  }

void Gtk::Notebook::next_page()
  {
    gtk_notebook_next_page(gtkobj());
  }

void Gtk::Notebook::prev_page()
  {
    gtk_notebook_prev_page(gtkobj());
  }

void Gtk::Notebook::set_show_border(bool show_border)
  {
    gtk_notebook_set_show_border(gtkobj(),(gint)show_border);
  }

void Gtk::Notebook::set_show_tabs(bool show_tabs)
  {
    gtk_notebook_set_show_tabs(gtkobj(),(gint)show_tabs);
  }

void Gtk::Notebook::set_tab_pos(GtkPositionType pos)
  {
    gtk_notebook_set_tab_pos(gtkobj(),pos);
  }

void Gtk::Notebook::set_homogeneous_tabs(bool homogeneous)
  {
    gtk_notebook_set_homogeneous_tabs(gtkobj(),(gint)homogeneous);
  }

void Gtk::Notebook::set_tab_border(gint border_width)
  {
    gtk_notebook_set_tab_border(gtkobj(),border_width);
  }

void Gtk::Notebook::set_tab_hborder(guint tab_hborder)
  {
    gtk_notebook_set_tab_hborder(gtkobj(),tab_hborder);
  }

void Gtk::Notebook::set_tab_vborder(guint tab_vborder)
  {
    gtk_notebook_set_tab_vborder(gtkobj(),tab_vborder);
  }

void Gtk::Notebook::set_scrollable(bool scrollable)
  {
    gtk_notebook_set_scrollable(gtkobj(),(gint)scrollable);
  }

void Gtk::Notebook::popup_enable()
  {
    gtk_notebook_popup_enable(gtkobj());
  }

void Gtk::Notebook::popup_disable()
  {
    gtk_notebook_popup_disable(gtkobj());
  }

void gtkmm_notebook_switch_page(GtkNotebook* notebook,GtkNotebookPage* p1,guint p2)
  {
    static guint signum=gtk_signal_lookup("switch_page",gtk_notebook_get_type());
    g_return_if_fail (notebook != NULL);
    g_return_if_fail (GTK_NOTEBOOK (notebook));

    gtk_signal_emit(GTK_OBJECT(notebook),signum,p1,p2);
  }

void Gtk::Notebook::prepend_page(Gtk::Widget& p0,Gtk::Widget& p1)
  {
    gtk_notebook_prepend_page(gtkobj(),p0.gtkobj(),p1.gtkobj());
  }

void Gtk::Notebook::append_page(Gtk::Widget& p0,Gtk::Widget& p1)
  {
    gtk_notebook_append_page(gtkobj(),p0.gtkobj(),p1.gtkobj());
  }

void Gtk::Notebook_Class::switch_page_callback(GtkNotebook* p0,GtkNotebookPage* p1,guint p2)
  {
    CppObjectType *obj=
      static_cast<CppObjectType *>(static_cast<Gtk::Object *>(
        gtk_object_get_data_by_id((GtkObject*)p0,Gtk::quark_)));

    if (obj)
      obj->switch_page_impl((Gtk::Notebook_Helpers::Page*)((void*)(p1)),p2);
    else
      {
        BaseClassType* base=
          static_cast<BaseClassType*>(
            gtk_type_parent_class(((GtkObject*)p0)->klass->type));
        if (base->switch_page)
          (base->switch_page)(p0,p1,p2);
      }

  }

void Gtk::Notebook::switch_page_impl(Gtk::Notebook_Helpers::Page* p0,guint p1)
  {
    BaseClassType* base=
      static_cast<BaseClassType*>(
        gtk_type_parent_class(gtkobject->klass->type));
    if (base->switch_page)
      (base->switch_page)(gtkobj(),(GtkNotebookPage*)((void*)(p0)),p1);

  }

namespace {
static void switch_page_convert_func(SigC::Callback2<void,Gtk::Notebook_Helpers::Page*,guint> *s,GtkNotebookPage* p1,guint p2)
  {
     s->call((Gtk::Notebook_Helpers::Page*)((void*)(p1)),p2);
  }

}

SigC::Connection
Gtk::Notebook::Proxy_switch_page::connect(const SigC::Slot2<void,Gtk::Notebook_Helpers::Page*,guint> &s)
   {
    return BaseType::connect(SigC::convert(s,&switch_page_convert_func));
   }

void Gtk::Notebook::Proxy_switch_page::operator()(Gtk::Notebook_Helpers::Page* p0,guint p1)
  {
     BaseType::emit((GtkNotebookPage*)((void*)(p0)),p1);
  }

void Gtk::Notebook::Proxy_switch_page::emit(Gtk::Notebook_Helpers::Page* p0,guint p1)
  {
     BaseType::emit((GtkNotebookPage*)((void*)(p0)),p1);
  }

GtkPositionType Gtk::Notebook::get_tab_pos() const
  { return (GtkPositionType)gtkobj()->tab_pos; }

bool Gtk::Notebook::get_show_tabs() const
  { return ((gtkobj()->show_tabs)?true:false); }

bool Gtk::Notebook::get_show_border() const
  { return ((gtkobj()->show_border)?true:false); }
