+ item2->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
+
+ item1->Add( item2, 1, wxALIGN_CENTER|wxALL, 5 );
+
+ item0->Add( item1, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ wxStaticBox *item8 = new wxStaticBox( this, -1, wxT("Server log") );
+ wxStaticBoxSizer *item7 = new wxStaticBoxSizer( item8, wxVERTICAL );
+
+ wxTextCtrl *item9 = new wxTextCtrl( this, ID_LOG, wxT(""), wxDefaultPosition, wxSize(500,140), wxTE_MULTILINE );
+ item7->Add( item9, 1, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ item0->Add( item7, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
+
+ SetSizer( item0 );
+ item0->SetSizeHints( this );
+
+ // status
+ m_server = NULL;
+ GetServername()->SetSelection(0);
+ wxLogTextCtrl *logWindow = new wxLogTextCtrl(GetLog());
+ delete wxLog::SetActiveTarget(logWindow);
+ wxLogMessage(_T("Click on Start to start the server"));
+ Enable();
+}
+
+void MyFrame::Enable()
+{
+ GetStart()->Enable(m_server == NULL);
+ GetServername()->Enable(m_server == NULL);
+ GetAdvise()->Enable(m_server && m_server->CanAdvise());
+ GetDisconnect()->Enable(m_server && m_server->IsConnected());
+}
+
+void MyFrame::OnClose(wxCloseEvent& event)
+{
+ if (m_server)
+ {
+ delete m_server;
+ m_server = NULL;
+ }
+ event.Skip();
+}
+
+void MyFrame::OnExit(wxCommandEvent& WXUNUSED(event))
+{
+ Close(true);
+}
+
+void MyFrame::OnStart(wxCommandEvent& WXUNUSED(event))
+{
+ // Create a new server
+ m_server = new MyServer;
+ wxString servername = GetServername()->GetStringSelection();
+ if (m_server->Create(servername))
+ {
+ wxLogMessage(_T("Server %s started"), servername.c_str());
+ #if wxUSE_DDE_FOR_IPC
+ wxLogMessage(_T("Server uses DDE"));
+ #else // !wxUSE_DDE_FOR_IPC
+ wxLogMessage(_T("Server uses TCP"));
+ #endif // wxUSE_DDE_FOR_IPC/!wxUSE_DDE_FOR_IPC
+ }
+ else
+ {
+ wxLogMessage(_T("Server %s failed to start"), servername.c_str());
+ delete m_server;
+ m_server = NULL;
+ }
+ Enable();