]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/tabctrl.cpp
Same as last one..
[wxWidgets.git] / src / gtk / tabctrl.cpp
diff --git a/src/gtk/tabctrl.cpp b/src/gtk/tabctrl.cpp
new file mode 100644 (file)
index 0000000..a12cf6c
--- /dev/null
@@ -0,0 +1,329 @@
+/////////////////////////////////////////////////////////////////////////////
+// Name:        tabctrl.cpp
+// Purpose:
+// Author:      Robert Roebling
+// Created:     01/02/97
+// Id:
+// Copyright:   (c) 1998 Robert Roebling, Julian Smart and Markus Holzem
+// Licence:    wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
+#ifdef __GNUG__
+#pragma implementation "tabctrl.h"
+#endif
+
+#include "wx/tabctrl.h"
+#include "wx/utils.h"
+#include "wx/imaglist.h"
+
+#include "wx/gtk/win_gtk.h"
+
+//-----------------------------------------------------------------------------
+// wxTabPage
+//-----------------------------------------------------------------------------
+
+class wxTabPage: public wxObject
+{
+  public:
+  
+   int                m_id;
+   wxString           m_text;
+   int                m_image;
+   void              *m_clientData;
+   GtkNotebookPage   *m_page;
+   GtkWidget         *m_wxwindow;
+   wxList             m_children;
+   
+   wxTabPage(void)
+   {
+     m_id = -1;
+     m_text = "";
+     m_image = -1;
+     m_clientData = NULL;
+     m_page = NULL;
+     m_wxwindow = NULL;
+   };
+   
+};
+
+//-----------------------------------------------------------------------------
+// wxTabCtrl
+//-----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(wxTabCtrl, wxControl)
+END_EVENT_TABLE()
+
+IMPLEMENT_DYNAMIC_CLASS(wxTabCtrl,wxControl)
+
+wxTabCtrl::wxTabCtrl(void)
+{
+  m_imageList = NULL;
+  m_pages.DeleteContents( TRUE );
+};
+
+wxTabCtrl::wxTabCtrl( wxWindow *parent, const wxWindowID id, 
+      const wxPoint& pos, const wxSize& size,
+      const long style, const wxString& name )
+{
+  m_imageList = NULL;
+  m_pages.DeleteContents( TRUE );
+  Create( parent, id, pos, size, style, name );
+};
+
+wxTabCtrl::~wxTabCtrl(void)
+{
+  if (m_imageList) delete m_imageList;
+  DeleteAllItems();
+};
+
+bool wxTabCtrl::Create(wxWindow *parent, const wxWindowID id, 
+      const wxPoint& pos, const wxSize& size,
+      const long style, const wxString& name )
+{
+  m_needParent = TRUE;
+  
+  PreCreation( parent, id, pos, size, style, name );
+
+  m_widget = gtk_notebook_new();
+  
+  PostCreation();
+  
+  Show( TRUE );
+  
+  return TRUE;
+};
+
+int wxTabCtrl::GetSelection(void) const
+{
+  return gtk_notebook_current_page( GTK_NOTEBOOK(m_widget) );
+};
+
+wxImageList* wxTabCtrl::GetImageList(void) const
+{
+  return m_imageList;
+};
+
+int wxTabCtrl::GetItemCount(void) const
+{
+  return m_pages.Number();
+};
+
+bool wxTabCtrl::GetItemRect( const int WXUNUSED(item), wxRect& WXUNUSED(rect) ) const
+{
+  return FALSE;
+};
+
+int wxTabCtrl::GetRowCount(void) const
+{
+  return 1;
+};
+
+wxString wxTabCtrl::GetItemText( const int item ) const
+{
+  wxNode *node = m_pages.Nth( item );
+  if (node)
+  {
+    wxTabPage *page = (wxTabPage*)node->Data();
+    return page->m_text;
+  };
+  return "";
+};
+
+int wxTabCtrl::GetItemImage( const int item ) const
+{
+  wxNode *node = m_pages.Nth( item );
+  if (node)
+  {
+    wxTabPage *page = (wxTabPage*)node->Data();
+    return page->m_image;
+  };
+  return -1;
+};
+
+void* wxTabCtrl::GetItemData( const int item ) const
+{
+  wxNode *node = m_pages.Nth( item );
+  if (node)
+  {
+    wxTabPage *page = (wxTabPage*)node->Data();
+    return page->m_clientData;
+  };
+  return NULL;
+};
+
+int wxTabCtrl::SetSelection( const int item )
+{
+  wxTabPage *page = NULL;
+
+  wxNode *node = m_pages.First();
+  while (node)
+  {
+    page = (wxTabPage*)node->Data();
+    if (page->m_id == item) break;
+    page = NULL;
+    node = node->Next();
+  };
+  if (!page) return -1;
+  
+  int page_num = 0;
+  GList *child = GTK_NOTEBOOK(m_widget)->children;
+  while (child)
+  {
+    if (page->m_page == (GtkNotebookPage*)child->data) break;
+    page_num++;
+    child = child->next;
+  };
+   
+  if (!child) return -1;
+  
+  gtk_notebook_set_page( GTK_NOTEBOOK(m_widget), page_num );
+  
+  return item;
+};
+
+void wxTabCtrl::SetImageList( wxImageList* imageList )
+{
+  m_imageList = imageList;
+};
+
+bool wxTabCtrl::SetItemText( const int WXUNUSED(item), const wxString& WXUNUSED(text) )
+{
+  return TRUE;
+};
+
+bool wxTabCtrl::SetItemImage( const int WXUNUSED(item), const int WXUNUSED(image) )
+{
+  return TRUE;
+};
+
+bool wxTabCtrl::SetItemData( const int WXUNUSED(item), void* WXUNUSED(data) )
+{
+  return TRUE;
+};
+
+void wxTabCtrl::SetItemSize( const wxSize &WXUNUSED(size) )
+{
+};
+
+void wxTabCtrl::SetPadding( const wxSize &WXUNUSED(padding) )
+{
+};
+
+bool wxTabCtrl::DeleteAllItems(void)
+{
+  wxNode *page_node = m_pages.First();
+  while (page_node)
+  {
+    wxTabPage *page = (wxTabPage*)page_node->Data();
+    
+    wxNode *node = page->m_children.First();
+    while (node)
+    {
+      wxWindow *child = (wxWindow*)node->Data();
+      delete child;
+      
+      node = node->Next();
+    };
+    
+    gtk_widget_destroy( page->m_wxwindow );
+  
+    m_pages.DeleteObject( page );
+
+    page_node = m_pages.First();
+  };
+  
+  return TRUE;
+};
+
+bool wxTabCtrl::DeleteItem( const int item )
+{
+  wxTabPage *page = NULL;
+
+  wxNode *node = m_pages.First();
+  while (node)
+  {
+    page = (wxTabPage*)node->Data();
+    if (page->m_id == item) break;
+    node = node->Next();
+  };
+  if (!node) return FALSE;
+
+  node = page->m_children.First();
+  while (node)
+  {
+    wxWindow *child = (wxWindow*)node->Data();
+    delete child;
+      
+    node = node->Next();
+  };
+  
+  gtk_widget_destroy( page->m_wxwindow );
+  
+  m_pages.DeleteObject( page );
+    
+  return TRUE;
+};
+
+int wxTabCtrl::HitTest( const wxPoint &WXUNUSED(pt), long &WXUNUSED(flags) )
+{
+  return wxTAB_HITTEST_NOWHERE;
+};
+
+int wxTabCtrl::InsertItem( const int item, const wxString &text, const int imageId, void* data )
+{
+  wxTabPage *page = new wxTabPage;
+  
+  page->m_text = text;
+  if (page->m_text.IsNull()) page->m_text = "";
+  page->m_id = item;
+  page->m_image = imageId;
+  page->m_clientData = data;
+  
+  GtkWidget *label_widget = gtk_label_new( page->m_text );
+  gtk_misc_set_alignment( GTK_MISC(label_widget), 0.0, 0.5 );
+
+  page->m_wxwindow = gtk_myfixed_new();
+  gtk_widget_show( page->m_wxwindow );
+  gtk_widget_set_usize( page->m_wxwindow, 100, 100 );
+  
+  gtk_notebook_append_page( GTK_NOTEBOOK(m_widget), page->m_wxwindow, label_widget );
+  
+  page->m_page = GTK_NOTEBOOK(m_widget)->cur_page;
+  
+  m_pages.Append( page );
+  
+  return item;
+};
+
+void wxTabCtrl::AddChild( wxWindow *win )
+{
+  GtkNotebookPage *g_page = GTK_NOTEBOOK(m_widget)->cur_page;
+  
+  wxTabPage *page = NULL;
+
+  wxNode *node = m_pages.First();
+  while (node)
+  {
+    page = (wxTabPage*)node->Data();
+    if (page->m_page == g_page) break;
+    node = node->Next();
+  };
+  
+  if (!page) wxFatalError( "wxTabCtrl error" );
+  
+  gtk_myfixed_put( GTK_MYFIXED(page->m_wxwindow), win->m_widget, win->m_x, win->m_y );
+  gtk_widget_set_usize( win->m_widget, win->m_width, win->m_height );
+  
+  page->m_children.Append( win );
+};
+
+//-----------------------------------------------------------------------------
+// wxTabEvent
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxTabEvent, wxCommandEvent)
+
+wxTabEvent::wxTabEvent( WXTYPE commandType, int id ) :
+  wxCommandEvent(commandType, id)
+{
+};
\ No newline at end of file