1 // Generated by gtkmmproc -- DO NOT MODIFY!
3 #include <gtkmm/notebook.h>
4 #include <gtkmm/private/notebook_p.h>
6 #include <gtk/gtktypebuiltins.h>
10 /* Copyright 1998-2002 The gtkmm Development Team
12 * This library is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Library General Public
14 * License as published by the Free Software Foundation; either
15 * version 2 of the License, or (at your option) any later version.
17 * This library is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Library General Public License for more details.
22 * You should have received a copy of the GNU Library General Public
23 * License along with this library; if not, write to the Free
24 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 #include <gtk/gtknotebook.h>
28 #include <gtkmm/label.h>
34 namespace Notebook_Helpers
37 /**** Gtk::Notebook_Helpers::PageIterator **********************************/
39 bool PageIterator::equal(const PageIterator& other) const
41 return (node_ == other.node_);
44 PageIterator::operator bool() const
49 PageIterator& PageIterator::operator++()
51 g_return_val_if_fail(node_ != 0, *this);
57 const PageIterator PageIterator::operator++(int)
59 const PageIterator tmp (*this);
64 PageIterator& PageIterator::operator--()
69 node_ = g_list_last(parent_->gobj()->children);
74 const PageIterator PageIterator::operator--(int)
76 const PageIterator tmp (*this);
82 /*********************************************************************
84 *********************************************************************/
86 int Page::get_page_num() const
88 return g_list_position(parent_->gobj()->children, node_);
91 Widget* Page::get_child() const
93 return parent_->get_nth_page(get_page_num());
96 Widget* Page::get_tab_label() const
98 return parent_->get_tab_label(*get_child());
101 void Page::set_tab_label(Widget& tab_label)
103 parent_->set_tab_label(*get_child(), tab_label);
106 void Page::set_tab_label_text(const Glib::ustring& tab_text)
108 parent_->set_tab_label_text(*get_child(), tab_text);
111 Glib::ustring Page::get_tab_label_text() const
113 return parent_->get_tab_label_text(*get_child());
116 Widget* Page::get_menu_label() const
118 return parent_->get_menu_label(*get_child());
121 void Page::set_menu_label(Widget& menu_label)
123 parent_->set_menu_label(*get_child(), menu_label);
126 void Page::set_menu_label_text(const Glib::ustring& menu_text)
128 parent_->set_menu_label_text(*get_child(), menu_text);
131 Glib::ustring Page::get_menu_label_text() const
133 return parent_->get_menu_label_text(*get_child());
136 void Page::query_tab_label_packing(bool& expand, bool& fill, PackType& pack_type)
138 parent_->query_tab_label_packing(*get_child(), expand, fill, pack_type);
141 void Page::set_tab_label_packing(bool expand, bool fill, PackType pack_type)
143 parent_->set_tab_label_packing(*get_child(), expand, fill, pack_type);
146 /*********************************************************************
147 ***** List properties
148 *********************************************************************/
154 PageList::PageList(GtkNotebook* gparent)
159 PageList::PageList(const PageList& src)
164 PageList& PageList::operator=(const PageList& src)
166 gparent_ = src.gparent_;
170 PageList::size_type PageList::max_size() const
175 bool PageList::empty() const
177 return (gparent_->children == 0);
180 PageList::size_type PageList::size() const
182 return g_list_length(gparent_->children);
185 PageList::value_type PageList::front() const
190 PageList::value_type PageList::back() const
192 iterator pend (end());
196 PageList::value_type PageList::operator[](size_type index) const
198 GList *const node = g_list_nth(gparent_->children, index);
201 return *iterator(Glib::wrap(gparent_), node);
204 PageList::iterator PageList::insert(PageList::iterator position, const Element& elem)
206 // Get the iterator index, or -1 for end().
207 const int index = (position) ? position->get_page_num() : -1;
209 // Give item to GTK+.
210 gtk_notebook_insert_page_menu(gparent_,
211 Glib::unwrap(elem.child_),
212 Glib::unwrap(elem.tab_),
213 Glib::unwrap(elem.menu_),
216 // Return an iterator pointing to the inserted element.
220 void PageList::erase(PageList::iterator start, PageList::iterator stop)
223 start = erase(start);
226 PageList::iterator PageList::erase(PageList::iterator position)
228 iterator next (position);
233 gtk_container_remove(GTK_CONTAINER(gparent_), position->get_child()->gobj());
239 void PageList::remove(const_reference child)
241 // g_return_if_fail(child.parent_ != 0);
242 gtk_container_remove(GTK_CONTAINER(gparent_), child.get_child()->gobj());
245 void PageList::remove(Widget& widget)
247 gtk_container_remove(GTK_CONTAINER(gparent_), widget.gobj());
250 void PageList::reorder(PageList::iterator position, PageList::iterator page)
252 gtk_notebook_reorder_child(gparent(), page->get_child()->gobj(), position->get_page_num());
255 PageList::iterator PageList::find(int num)
257 if(num < 0) return end();
260 for(i = begin(), j = 0; i != end(), j < num; ++i, ++j);
264 PageList::iterator PageList::find(const_reference c)
266 iterator i = begin();
267 for(i = begin(); i != end() && ((*i).get_child() != c.get_child()); i++);
271 PageList::iterator PageList::find(Widget& widget)
274 for(i = begin(); i != end() && ((*i).get_child() != &widget); i++);
278 PageList::iterator PageList::find(GtkNotebookPage* page)
280 GList* node = gparent_->children;
282 while(node && node->data != page)
285 return (node) ? iterator(Glib::wrap(gparent_), node) : end();
288 void PageList::clear()
290 erase(begin(), end());
293 PageList::iterator PageList::begin_() const
295 return iterator(Glib::wrap(gparent_), gparent_->children);
298 PageList::iterator PageList::end_() const
300 return iterator(Glib::wrap(gparent_), 0);
303 Element::Element(Widget* child, Widget* tab, Widget* menu)
310 Element::Element(Widget& child, Widget& tab, Widget& menu)
317 Element::Element(Widget& child)
324 TabElem::TabElem(Widget& child, Widget& tab)
326 Element(&child, &tab, 0)
329 TabElem::TabElem(Widget& child, const Glib::ustring& label, bool mnemonic)
331 Element(&child, manage(new Label(label, mnemonic)), 0)
334 MenuElem::MenuElem(Widget& child, Widget& menu)
336 Element(&child, 0, &menu)
339 } /* namespace Notebook_Helpers */
342 Notebook::PageList::iterator Notebook::get_current()
344 return pages().find(get_current_page());
347 Notebook::PageList& Notebook::pages()
349 pages_proxy_ = PageList(gobj());
353 const Notebook::PageList& Notebook::pages() const
355 pages_proxy_ = PageList(const_cast<GtkNotebook*>(gobj()));
359 /*Widget* Notebook::get_current_page()
361 return get_nth_page(get_current_page_num());
364 int Notebook::prepend_page(Widget& child, const Glib::ustring& tab_label, bool use_mnemonic)
366 Label* pLabel = Gtk::manage( new Label(tab_label, use_mnemonic) );
367 return prepend_page(child, *pLabel);
370 int Notebook::prepend_page(Widget& child, const Glib::ustring& tab_label, const Glib::ustring& menu_label, bool use_mnemonic)
372 Label* pLabel = Gtk::manage( new Label(tab_label, use_mnemonic) );
373 Label* pLabelMenu = Gtk::manage( new Label(menu_label, use_mnemonic) );
374 return prepend_page(child, *pLabel, *pLabelMenu);
377 int Notebook::append_page(Widget& child, const Glib::ustring& tab_label, bool use_mnemonic)
379 Label* pLabel = Gtk::manage( new Label(tab_label, use_mnemonic) );
380 return append_page(child, *pLabel);
383 int Notebook::append_page(Widget& child, const Glib::ustring& tab_label, const Glib::ustring& menu_label, bool use_mnemonic)
385 Label* pLabel = Gtk::manage( new Label(tab_label, use_mnemonic) );
386 Label* pLabelMenu = Gtk::manage( new Label(menu_label, use_mnemonic) );
387 return append_page(child, *pLabel, *pLabelMenu);
390 int Notebook::insert_page(Widget& child, const Glib::ustring& tab_label, int position, bool use_mnemonic)
392 Label* pLabel = Gtk::manage( new Label(tab_label, use_mnemonic) );
393 return insert_page(child, *pLabel, position);
396 int Notebook::insert_page(Widget& child, const Glib::ustring& tab_label, const Glib::ustring& menu_label, int position, bool use_mnemonic)
398 Label* pLabel = Gtk::manage( new Label(tab_label, use_mnemonic) );
399 Label* pLabelMenu = Gtk::manage( new Label(menu_label, use_mnemonic) );
400 return insert_page(child, *pLabel, *pLabelMenu, position);
403 void Notebook::remove_page(Widget& child)
405 int pos = page_num(child);
410 void Notebook::query_tab_label_packing(Widget& child, bool& expand, bool& fill, PackType& pack_type)
412 gboolean gexpand = false;
413 gboolean gfill = false;
414 GtkPackType gpack_type = GTK_PACK_START;
415 gtk_notebook_query_tab_label_packing(gobj(), child.gobj(), &gexpand, &gfill, &gpack_type);
418 pack_type = (PackType)gpack_type;
421 int Notebook::prepend_page(Widget& child)
423 return gtk_notebook_prepend_page(gobj(), child.gobj(), 0 /* see GTK+ docs */);
426 int Notebook::append_page(Widget& child)
428 return gtk_notebook_append_page(gobj(), child.gobj(), 0 /* see GTK+ docs */);
431 int Notebook::insert_page(Widget& child, int position)
433 return gtk_notebook_insert_page(gobj(), child.gobj(), 0 /* see GTK+ docs */, position);
442 void Notebook_signal_switch_page_callback(GtkNotebook* self, GtkNotebookPage* p0,guint p1,void* data)
445 typedef sigc::slot< void,GtkNotebookPage*,guint > SlotType;
447 // Do not try to call a signal on a disassociated wrapper.
448 if(Glib::ObjectBase::_get_current_wrapper((GObject*) self))
452 if(sigc::slot_base *const slot = Glib::SignalProxyNormal::data_to_slot(data))
453 (*static_cast<SlotType*>(slot))(p0, p1);
457 Glib::exception_handlers_invoke();
462 const Glib::SignalProxyInfo Notebook_signal_switch_page_info =
465 (GCallback) &Notebook_signal_switch_page_callback,
466 (GCallback) &Notebook_signal_switch_page_callback
469 } // anonymous namespace
472 GType Glib::Value<Gtk::NotebookTab>::value_type()
474 return gtk_notebook_tab_get_type();
481 Gtk::Notebook* wrap(GtkNotebook* object, bool take_copy)
483 return dynamic_cast<Gtk::Notebook *> (Glib::wrap_auto ((GObject*)(object), take_copy));
486 } /* namespace Glib */
492 /* The *_Class implementation: */
494 const Glib::Class& Notebook_Class::init()
496 if(!gtype_) // create the GType if necessary
498 // Glib::Class has to know the class init function to clone custom types.
499 class_init_func_ = &Notebook_Class::class_init_function;
501 // This is actually just optimized away, apparently with no harm.
502 // Make sure that the parent type has been created.
503 //CppClassParent::CppObjectType::get_type();
505 // Create the wrapper type, with the same class/instance size as the base type.
506 register_derived_type(gtk_notebook_get_type());
508 // Add derived versions of interfaces, if the C type implements any interfaces:
514 void Notebook_Class::class_init_function(void* g_class, void* class_data)
516 BaseClassType *const klass = static_cast<BaseClassType*>(g_class);
517 CppClassParent::class_init_function(klass, class_data);
519 klass->switch_page = &switch_page_callback;
523 void Notebook_Class::switch_page_callback(GtkNotebook* self, GtkNotebookPage* p0, guint p1)
525 CppObjectType *const obj = dynamic_cast<CppObjectType*>(
526 Glib::ObjectBase::_get_current_wrapper((GObject*)self));
528 // Non-gtkmmproc-generated custom classes implicitly call the default
529 // Glib::ObjectBase constructor, which sets is_derived_. But gtkmmproc-
530 // generated classes can use this optimisation, which avoids the unnecessary
531 // parameter conversions if there is no possibility of the virtual function
533 if(obj && obj->is_derived_())
535 try // Trap C++ exceptions which would normally be lost because this is a C callback.
537 // Call the virtual member method, which derived classes might override.
538 obj->on_switch_page(p0, p1);
542 Glib::exception_handlers_invoke();
547 BaseClassType *const base = static_cast<BaseClassType*>(
548 g_type_class_peek_parent(G_OBJECT_GET_CLASS(self)) // Get the parent class of the object class (The original underlying C class).
551 // Call the original underlying C function:
552 if(base && base->switch_page)
553 (*base->switch_page)(self, p0, p1);
558 Glib::ObjectBase* Notebook_Class::wrap_new(GObject* o)
560 return manage(new Notebook((GtkNotebook*)(o)));
565 /* The implementation: */
567 Notebook::Notebook(const Glib::ConstructParams& construct_params)
569 Gtk::Container(construct_params)
573 Notebook::Notebook(GtkNotebook* castitem)
575 Gtk::Container((GtkContainer*)(castitem))
579 Notebook::~Notebook()
584 Notebook::CppClassType Notebook::notebook_class_; // initialize static member
586 GType Notebook::get_type()
588 return notebook_class_.init().get_type();
591 GType Notebook::get_base_type()
593 return gtk_notebook_get_type();
599 Glib::ObjectBase(0), //Mark this class as gtkmmproc-generated, rather than a custom class, to allow vfunc optimisations.
600 Gtk::Container(Glib::ConstructParams(notebook_class_.init()))
604 int Notebook::prepend_page(Widget& child, Widget& tab_label)
606 return gtk_notebook_prepend_page(gobj(), (child).gobj(), (tab_label).gobj());
609 int Notebook::prepend_page(Widget& child, Widget& tab_label, Widget& menu_label)
611 return gtk_notebook_prepend_page_menu(gobj(), (child).gobj(), (tab_label).gobj(), (menu_label).gobj());
614 int Notebook::append_page(Widget& child, Widget& tab_label)
616 return gtk_notebook_append_page(gobj(), (child).gobj(), (tab_label).gobj());
619 int Notebook::append_page(Widget& child, Widget& tab_label, Widget& menu_label)
621 return gtk_notebook_append_page_menu(gobj(), (child).gobj(), (tab_label).gobj(), (menu_label).gobj());
624 int Notebook::insert_page(Widget& child, Widget& tab_label, int position)
626 return gtk_notebook_insert_page(gobj(), (child).gobj(), (tab_label).gobj(), position);
629 int Notebook::insert_page(Widget& child, Widget& tab_label, Widget& menu_label, int position)
631 return gtk_notebook_insert_page_menu(gobj(), (child).gobj(), (tab_label).gobj(), (menu_label).gobj(), position);
634 void Notebook::remove_page(int page_num)
636 gtk_notebook_remove_page(gobj(), page_num);
639 int Notebook::get_current_page() const
641 return gtk_notebook_get_current_page(const_cast<GtkNotebook*>(gobj()));
644 Widget* Notebook::get_nth_page(int page_num)
646 return Glib::wrap(gtk_notebook_get_nth_page(gobj(), page_num));
649 const Widget* Notebook::get_nth_page(int page_num) const
651 return Glib::wrap(gtk_notebook_get_nth_page(const_cast<GtkNotebook*>(gobj()), page_num));
654 int Notebook::get_n_pages()
656 return gtk_notebook_get_n_pages(gobj());
659 int Notebook::page_num(const Widget& child)
661 return gtk_notebook_page_num(gobj(), const_cast<GtkWidget*>((child).gobj()));
664 void Notebook::set_current_page(int page_num)
666 gtk_notebook_set_current_page(gobj(), page_num);
669 void Notebook::next_page()
671 gtk_notebook_next_page(gobj());
674 void Notebook::prev_page()
676 gtk_notebook_prev_page(gobj());
679 void Notebook::set_show_border(bool show_border)
681 gtk_notebook_set_show_border(gobj(), static_cast<int>(show_border));
684 bool Notebook::get_show_border() const
686 return gtk_notebook_get_show_border(const_cast<GtkNotebook*>(gobj()));
689 void Notebook::set_show_tabs(bool show_tabs)
691 gtk_notebook_set_show_tabs(gobj(), static_cast<int>(show_tabs));
694 bool Notebook::get_show_tabs() const
696 return gtk_notebook_get_show_tabs(const_cast<GtkNotebook*>(gobj()));
699 void Notebook::set_tab_pos(PositionType pos)
701 gtk_notebook_set_tab_pos(gobj(), ((GtkPositionType)(pos)));
704 PositionType Notebook::get_tab_pos() const
706 return ((PositionType)(gtk_notebook_get_tab_pos(const_cast<GtkNotebook*>(gobj()))));
709 void Notebook::set_scrollable(bool scrollable)
711 gtk_notebook_set_scrollable(gobj(), static_cast<int>(scrollable));
714 bool Notebook::get_scrollable() const
716 return gtk_notebook_get_scrollable(const_cast<GtkNotebook*>(gobj()));
719 void Notebook::popup_enable()
721 gtk_notebook_popup_enable(gobj());
724 void Notebook::popup_disable()
726 gtk_notebook_popup_disable(gobj());
729 Widget* Notebook::get_tab_label(Widget& child)
731 return Glib::wrap(gtk_notebook_get_tab_label(gobj(), (child).gobj()));
734 const Widget* Notebook::get_tab_label(Widget& child) const
736 return Glib::wrap(gtk_notebook_get_tab_label(const_cast<GtkNotebook*>(gobj()), (child).gobj()));
739 void Notebook::set_tab_label(Widget& child, Widget& tab_label)
741 gtk_notebook_set_tab_label(gobj(), (child).gobj(), (tab_label).gobj());
744 void Notebook::set_tab_label_text(Widget& child, const Glib::ustring& tab_text)
746 gtk_notebook_set_tab_label_text(gobj(), (child).gobj(), tab_text.c_str());
749 Glib::ustring Notebook::get_tab_label_text(Widget& child) const
751 return Glib::convert_const_gchar_ptr_to_ustring(gtk_notebook_get_tab_label_text(const_cast<GtkNotebook*>(gobj()), (child).gobj()));
754 Widget* Notebook::get_menu_label(Widget& child)
756 return Glib::wrap(gtk_notebook_get_menu_label(gobj(), (child).gobj()));
759 const Widget* Notebook::get_menu_label(Widget& child) const
761 return Glib::wrap(gtk_notebook_get_menu_label(const_cast<GtkNotebook*>(gobj()), (child).gobj()));
764 void Notebook::set_menu_label(Widget& child, Widget& menu_label)
766 gtk_notebook_set_menu_label(gobj(), (child).gobj(), (menu_label).gobj());
769 void Notebook::set_menu_label_text(Widget& child, const Glib::ustring& menu_text)
771 gtk_notebook_set_menu_label_text(gobj(), (child).gobj(), menu_text.c_str());
774 Glib::ustring Notebook::get_menu_label_text(Widget& child) const
776 return Glib::convert_const_gchar_ptr_to_ustring(gtk_notebook_get_menu_label_text(const_cast<GtkNotebook*>(gobj()), (child).gobj()));
779 void Notebook::set_tab_label_packing(Widget& child, bool expand, bool fill, PackType pack_type)
781 gtk_notebook_set_tab_label_packing(gobj(), (child).gobj(), static_cast<int>(expand), static_cast<int>(fill), ((GtkPackType)(pack_type)));
784 void Notebook::reorder_child(Widget& child, int position)
786 gtk_notebook_reorder_child(gobj(), (child).gobj(), position);
790 Glib::SignalProxy2< void,GtkNotebookPage*,guint > Notebook::signal_switch_page()
792 return Glib::SignalProxy2< void,GtkNotebookPage*,guint >(this, &Notebook_signal_switch_page_info);
796 Glib::PropertyProxy<PositionType> Notebook::property_tab_pos()
798 return Glib::PropertyProxy<PositionType>(this, "tab-pos");
801 Glib::PropertyProxy_ReadOnly<PositionType> Notebook::property_tab_pos() const
803 return Glib::PropertyProxy_ReadOnly<PositionType>(this, "tab-pos");
806 Glib::PropertyProxy<bool> Notebook::property_show_tabs()
808 return Glib::PropertyProxy<bool>(this, "show-tabs");
811 Glib::PropertyProxy_ReadOnly<bool> Notebook::property_show_tabs() const
813 return Glib::PropertyProxy_ReadOnly<bool>(this, "show-tabs");
816 Glib::PropertyProxy<bool> Notebook::property_show_border()
818 return Glib::PropertyProxy<bool>(this, "show-border");
821 Glib::PropertyProxy_ReadOnly<bool> Notebook::property_show_border() const
823 return Glib::PropertyProxy_ReadOnly<bool>(this, "show-border");
826 Glib::PropertyProxy<bool> Notebook::property_scrollable()
828 return Glib::PropertyProxy<bool>(this, "scrollable");
831 Glib::PropertyProxy_ReadOnly<bool> Notebook::property_scrollable() const
833 return Glib::PropertyProxy_ReadOnly<bool>(this, "scrollable");
836 Glib::PropertyProxy_WriteOnly<guint> Notebook::property_tab_border()
838 return Glib::PropertyProxy_WriteOnly<guint>(this, "tab-border");
841 Glib::PropertyProxy_ReadOnly<guint> Notebook::property_tab_border() const
843 return Glib::PropertyProxy_ReadOnly<guint>(this, "tab-border");
846 Glib::PropertyProxy<guint> Notebook::property_tab_hborder()
848 return Glib::PropertyProxy<guint>(this, "tab-hborder");
851 Glib::PropertyProxy_ReadOnly<guint> Notebook::property_tab_hborder() const
853 return Glib::PropertyProxy_ReadOnly<guint>(this, "tab-hborder");
856 Glib::PropertyProxy<guint> Notebook::property_tab_vborder()
858 return Glib::PropertyProxy<guint>(this, "tab-vborder");
861 Glib::PropertyProxy_ReadOnly<guint> Notebook::property_tab_vborder() const
863 return Glib::PropertyProxy_ReadOnly<guint>(this, "tab-vborder");
866 Glib::PropertyProxy<int> Notebook::property_page()
868 return Glib::PropertyProxy<int>(this, "page");
871 Glib::PropertyProxy_ReadOnly<int> Notebook::property_page() const
873 return Glib::PropertyProxy_ReadOnly<int>(this, "page");
876 Glib::PropertyProxy<bool> Notebook::property_enable_popup()
878 return Glib::PropertyProxy<bool>(this, "enable-popup");
881 Glib::PropertyProxy_ReadOnly<bool> Notebook::property_enable_popup() const
883 return Glib::PropertyProxy_ReadOnly<bool>(this, "enable-popup");
886 Glib::PropertyProxy<bool> Notebook::property_homogeneous()
888 return Glib::PropertyProxy<bool>(this, "homogeneous");
891 Glib::PropertyProxy_ReadOnly<bool> Notebook::property_homogeneous() const
893 return Glib::PropertyProxy_ReadOnly<bool>(this, "homogeneous");
897 void Gtk::Notebook::on_switch_page(GtkNotebookPage* page, guint page_num)
899 BaseClassType *const base = static_cast<BaseClassType*>(
900 g_type_class_peek_parent(G_OBJECT_GET_CLASS(gobject_)) // Get the parent class of the object class (The original underlying C class).
903 if(base && base->switch_page)
904 (*base->switch_page)(gobj(),page,page_num);