]> git.saurik.com Git - wxWidgets.git/commitdiff
Implemented Reparent() and added test for it to minifram sample.
authorRobert Roebling <robert@roebling.de>
Mon, 31 May 1999 17:04:50 +0000 (17:04 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 31 May 1999 17:04:50 +0000 (17:04 +0000)
  Fixed one out of two window resizing bugs in multi-line text ctrl.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2602 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

samples/minifram/test.cpp
samples/minifram/test.h
src/gtk/textctrl.cpp
src/gtk/window.cpp
src/gtk1/textctrl.cpp
src/gtk1/window.cpp

index 5fe386612ac17d735fb989d9747c2dc656d8b37e..e7ee0478495d7f2f38bb5a1ea1a54af039053f7a 100644 (file)
 #include "bitmaps/help.xpm"
 #endif
 
 #include "bitmaps/help.xpm"
 #endif
 
+// start wxWindows
+
 IMPLEMENT_APP(MyApp)
 
 IMPLEMENT_APP(MyApp)
 
+// globas
+
+MyMainFrame   *main_frame = (MyMainFrame*) NULL;
+MyMiniFrame   *mini_frame = (MyMiniFrame*) NULL;
+wxButton      *button     = (wxButton*) NULL;
 
 // The `main program' equivalent, creating the windows and returning the
 // main frame
 bool MyApp::OnInit(void)
 {
 
 // The `main program' equivalent, creating the windows and returning the
 // main frame
 bool MyApp::OnInit(void)
 {
+  // Create the mini frame window
+  mini_frame = new MyMiniFrame((wxFrame *) NULL, -1, "wxMiniFrame sample",
+     wxPoint(100, 100), wxSize(205, 100));
+
+  mini_frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
+  InitToolbar(mini_frame->GetToolBar());
+  
   // Create the main frame window
   // Create the main frame window
-  MyFrame* frame = new MyFrame((wxFrame *) NULL, -1, (const wxString) "wxMiniFrame sample",
-     wxPoint(100, 100), wxSize(205, 45));
+  main_frame = new MyMainFrame((wxFrame *) NULL, -1, "wxFrame sample",
+     wxPoint(100, 100), wxSize(300, 200));
+     
+  main_frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL, ID_TOOLBAR);
+  InitToolbar(main_frame->GetToolBar());
+  
+  button = new wxButton( main_frame, ID_REPARENT, "Press to reparent!" );
 
 #ifdef __WXMSW__
 
 #ifdef __WXMSW__
-  frame->SetIcon(wxIcon("mondrian"));
+  main_frame->SetIcon(wxIcon("mondrian"));
+  mini_frame->SetIcon(wxIcon("mondrian"));
 #else
 #else
-  frame->SetIcon( wxIcon(mondrian_xpm) );
+  main_frame->SetIcon( wxIcon(mondrian_xpm) );
+  mini_frame->SetIcon( wxIcon(mondrian_xpm) );
 #endif
 
 #endif
 
-  // Create the toolbar
-  frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
-
-  InitToolbar(frame->GetToolBar());
-
-  frame->Show(TRUE);
-  SetTopWindow(frame);
+  SetTopWindow(main_frame);
+  
+  main_frame->Show(TRUE);
+  mini_frame->Show(TRUE);
 
   return TRUE;
 }
 
   return TRUE;
 }
@@ -130,20 +148,50 @@ bool MyApp::InitToolbar(wxToolBar* toolBar)
   return TRUE;
 }
 
   return TRUE;
 }
 
-BEGIN_EVENT_TABLE(MyFrame, wxMiniFrame)
-    EVT_CLOSE(MyFrame::OnCloseWindow)
+// MyMiniFrame
+
+BEGIN_EVENT_TABLE(MyMiniFrame, wxMiniFrame)
+    EVT_CLOSE  (              MyMiniFrame::OnCloseWindow)
+    EVT_BUTTON (ID_REPARENT,  MyMiniFrame::OnReparent)
 END_EVENT_TABLE()
 
 END_EVENT_TABLE()
 
-// Define my frame constructor
-MyFrame::MyFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
+MyMiniFrame::MyMiniFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
         const wxSize& size ) :
   wxMiniFrame(parent, id, title, pos, size )
 {
 }
 
         const wxSize& size ) :
   wxMiniFrame(parent, id, title, pos, size )
 {
 }
 
-// - must delete all frames except for the main one.
-void MyFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
+void MyMiniFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
 {
   Destroy();
 }
 
 {
   Destroy();
 }
 
+void MyMiniFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
+{
+  button->Reparent( main_frame );
+}
+
+// MyMainFrame
+
+BEGIN_EVENT_TABLE(MyMainFrame, wxFrame)
+    EVT_CLOSE  (              MyMainFrame::OnCloseWindow)
+    EVT_BUTTON (ID_REPARENT,  MyMainFrame::OnReparent)
+END_EVENT_TABLE()
+
+MyMainFrame::MyMainFrame(wxFrame* parent, wxWindowID id, const wxString& title, const wxPoint& pos,
+        const wxSize& size ) :
+  wxFrame(parent, id, title, pos, size )
+{
+}
+
+void MyMainFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event))
+{
+  Destroy();
+}
+
+void MyMainFrame::OnReparent(wxCommandEvent& WXUNUSED(event))
+{
+  button->Reparent( mini_frame );
+}
+
+
index db0f7dc5daebf1e2e2a0de357f8468e10a63b4c4..f228439556eaf2175319deeb7ccdd10c997795dd 100644 (file)
@@ -19,17 +19,32 @@ class MyApp: public wxApp
     bool InitToolbar(wxToolBar* toolBar);
 };
 
     bool InitToolbar(wxToolBar* toolBar);
 };
 
+// Define a new mini frame
+class MyMiniFrame: public wxMiniFrame
+{
+public:
+    MyMiniFrame(wxFrame *parent, wxWindowID id = -1, const wxString& title = "wxToolBar Sample",
+        const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize );
+
+    void OnCloseWindow(wxCloseEvent& event);
+    void OnReparent(wxCommandEvent& event);
+    
+DECLARE_EVENT_TABLE()
+};
+
 // Define a new frame
 // Define a new frame
-class MyFrame: public wxMiniFrame
+class MyMainFrame: public wxFrame
 {
 public:
 {
 public:
-    MyFrame(wxFrame *parent, wxWindowID id = -1, const wxString& title = "wxToolBar Sample",
+    MyMainFrame(wxFrame *parent, wxWindowID id = -1, const wxString& title = "wxToolBar Sample",
         const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize );
 
     void OnCloseWindow(wxCloseEvent& event);
         const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize );
 
     void OnCloseWindow(wxCloseEvent& event);
+    void OnReparent(wxCommandEvent& event);
     
 DECLARE_EVENT_TABLE()
 };
 
     
 DECLARE_EVENT_TABLE()
 };
 
-#define ID_TOOLBAR  500
+#define ID_TOOLBAR   500
+#define ID_REPARENT  501
 
 
index e5c9c881a2c0f36065a13388557e600f15853ad8..73293accf3b0cdc0ed4c7c22f6f39f572c2c104c 100644 (file)
@@ -158,16 +158,17 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                        0, 0);
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                        0, 0);
-
+                      
         /* always wrap words */
         gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
         /* always wrap words */
         gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
+       
         /* put the horizontal scrollbar in the lower left hand corner */
         if (bHasHScrollbar)
         {
             GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
             GTK_WIDGET_UNSET_FLAGS( hscrollbar, GTK_CAN_FOCUS );
             gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
         /* put the horizontal scrollbar in the lower left hand corner */
         if (bHasHScrollbar)
         {
             GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
             GTK_WIDGET_UNSET_FLAGS( hscrollbar, GTK_CAN_FOCUS );
             gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
-                       (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
+                       (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
                        GTK_FILL,
                        0, 0);
             gtk_widget_show(hscrollbar);
                        GTK_FILL,
                        0, 0);
             gtk_widget_show(hscrollbar);
@@ -177,6 +178,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
             gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
 #endif
         }
             gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
 #endif
         }
+       
         /* finally, put the vertical scrollbar in the upper right corner */
         m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
         GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
         /* finally, put the vertical scrollbar in the upper right corner */
         m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
         GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
index 71396ae3b42530aab42593a3f1ef0a6ff336a2b1..01bf2f6a9b0abec5f005b96caf0808f264e0a874 100644 (file)
@@ -2383,12 +2383,23 @@ bool wxWindow::AcceptsFocus() const
 bool wxWindow::Reparent( wxWindow *newParent )
 {
     wxCHECK_MSG( (m_widget != NULL), (wxWindow*) NULL, _T("invalid window") );
 bool wxWindow::Reparent( wxWindow *newParent )
 {
     wxCHECK_MSG( (m_widget != NULL), (wxWindow*) NULL, _T("invalid window") );
-
-    gtk_widget_unparent( m_widget );
+    
+    wxWindow *oldParent = m_parent;
 
     if ( !wxWindowBase::Reparent(newParent) )
         return FALSE;
 
 
     if ( !wxWindowBase::Reparent(newParent) )
         return FALSE;
 
+    if (oldParent)
+    {
+        gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
+    }
+    
+    if (newParent)
+    {
+        /* insert GTK representation */
+        (*(newParent->m_insertCallback))(newParent, this);
+    }
+    
     return TRUE;
 }
 
     return TRUE;
 }
 
index e5c9c881a2c0f36065a13388557e600f15853ad8..73293accf3b0cdc0ed4c7c22f6f39f572c2c104c 100644 (file)
@@ -158,16 +158,17 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                        0, 0);
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                       (GtkAttachOptions)(GTK_FILL | GTK_EXPAND | GTK_SHRINK),
                        0, 0);
-
+                      
         /* always wrap words */
         gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
         /* always wrap words */
         gtk_text_set_word_wrap( GTK_TEXT(m_text), TRUE );
+       
         /* put the horizontal scrollbar in the lower left hand corner */
         if (bHasHScrollbar)
         {
             GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
             GTK_WIDGET_UNSET_FLAGS( hscrollbar, GTK_CAN_FOCUS );
             gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
         /* put the horizontal scrollbar in the lower left hand corner */
         if (bHasHScrollbar)
         {
             GtkWidget *hscrollbar = gtk_hscrollbar_new(GTK_TEXT(m_text)->hadj);
             GTK_WIDGET_UNSET_FLAGS( hscrollbar, GTK_CAN_FOCUS );
             gtk_table_attach(GTK_TABLE(m_widget), hscrollbar, 0, 1, 1, 2,
-                       (GtkAttachOptions)(GTK_EXPAND | GTK_FILL),
+                       (GtkAttachOptions)(GTK_EXPAND | GTK_FILL | GTK_SHRINK),
                        GTK_FILL,
                        0, 0);
             gtk_widget_show(hscrollbar);
                        GTK_FILL,
                        0, 0);
             gtk_widget_show(hscrollbar);
@@ -177,6 +178,7 @@ bool wxTextCtrl::Create( wxWindow *parent, wxWindowID id, const wxString &value,
             gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
 #endif
         }
             gtk_text_set_line_wrap( GTK_TEXT(m_text), FALSE );
 #endif
         }
+       
         /* finally, put the vertical scrollbar in the upper right corner */
         m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
         GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
         /* finally, put the vertical scrollbar in the upper right corner */
         m_vScrollbar = gtk_vscrollbar_new( GTK_TEXT(m_text)->vadj );
         GTK_WIDGET_UNSET_FLAGS( m_vScrollbar, GTK_CAN_FOCUS );
index 71396ae3b42530aab42593a3f1ef0a6ff336a2b1..01bf2f6a9b0abec5f005b96caf0808f264e0a874 100644 (file)
@@ -2383,12 +2383,23 @@ bool wxWindow::AcceptsFocus() const
 bool wxWindow::Reparent( wxWindow *newParent )
 {
     wxCHECK_MSG( (m_widget != NULL), (wxWindow*) NULL, _T("invalid window") );
 bool wxWindow::Reparent( wxWindow *newParent )
 {
     wxCHECK_MSG( (m_widget != NULL), (wxWindow*) NULL, _T("invalid window") );
-
-    gtk_widget_unparent( m_widget );
+    
+    wxWindow *oldParent = m_parent;
 
     if ( !wxWindowBase::Reparent(newParent) )
         return FALSE;
 
 
     if ( !wxWindowBase::Reparent(newParent) )
         return FALSE;
 
+    if (oldParent)
+    {
+        gtk_container_remove( GTK_CONTAINER(oldParent->m_wxwindow), m_widget );
+    }
+    
+    if (newParent)
+    {
+        /* insert GTK representation */
+        (*(newParent->m_insertCallback))(newParent, this);
+    }
+    
     return TRUE;
 }
 
     return TRUE;
 }