// ポストペインでキーを押した時 void CMainWindow::onKeyDownOnPostPane(wxKeyEvent& event) { #ifdef _WIN32 if (event.GetModifiers() == wxMOD_CONTROL){ #else if (event.GetModifiers() == wxMOD_ALT){ #endif if (event.GetKeyCode() == WXK_SPACE){ moveToUnread(); } } #ifdef _WIN32 if (event.GetModifiers() == wxMOD_CONTROL){ #else if (event.GetModifiers() == wxMOD_ALT & wxMOD_CMD){ #endif if (event.GetKeyCode() == WXK_UP){ m_view->selectPreviousChannel(); } else if (event.GetKeyCode() == WXK_DOWN){ m_view->selectNextChannel(); } } else { m_inputManager->setChangingText(true); if (event.GetKeyCode() == WXK_UP) { m_view->setTextPostPane(m_inputManager->getHistory());} else if (event.GetKeyCode() == WXK_DOWN){ m_view->setTextPostPane(m_inputManager->getHistoryBefore()); } } } // チャンネルペインを右クリック時 void CMainWindow::onChannelRightClicked(CChannelSelectEvent& event) { enum { Id_DeleteServer = 1, Id_AddChannel = 2, Id_DeleteChannel = 3, Id_ChangeTopic = 4, Id_ChangeNickname = 5, Id_Refresh = 6, Id_Disconnect = 7 }; int serviceId = event.getServerId(); CChatServiceBase* service = m_serviceHolder->getService(serviceId); wxMenu menu; if (event.isServerSelected()){ menu.Append(Id_DeleteServer, "サーバの削除"); menu.Append(Id_Refresh, "サーバの再読み込み"); if (service->IsConnected()){ menu.Append(Id_Disconnect, "サーバの切断"); } if (service->IsConnected()){ menu.AppendSeparator(); } } if (service->IsConnected()){ menu.Append(Id_AddChannel, "チャンネルの追加"); if (event.isServerSelected() == false){ menu.Append(Id_DeleteChannel, "チャンネルの削除"); menu.Append(Id_ChangeTopic, "トピックの変更"); } menu.Append(Id_ChangeNickname, "ニックネームの変更"); } wxString channel = event.getChannelName(); switch (this->GetPopupMenuSelectionFromUser(menu)) { case Id_DeleteServer: deleteService(serviceId); break; case Id_AddChannel: showAddChannleDialog(serviceId); break; case Id_DeleteChannel: m_serviceHolder->deleteChannel(serviceId, channel); break; case Id_ChangeTopic: showChangeTopicDialog(serviceId, channel); break; case Id_ChangeNickname: showChangeNicknameDialog(serviceId); break; case Id_Refresh: updateService(serviceId); break; case Id_Disconnect: disconnect(serviceId); break; } } ////////////////////////////////////////////////////////////////////// // メッセージ投稿終了時 void CMainWindow::onFinishPostMessage(wxThreadEvent& event) { } // 認証情報の受信時 void CMainWindow::onGetAuth(CAuthEvent& event) { // サービスIDが不明な場合 CChatServiceBase* service = m_serviceHolder->getService( event.getConnectionId()); if (service == NULL){ return; } // 認証に失敗 if (!event.isAuthSucceeded()){ wxMessageBox("接続に失敗しました"); // サービスの削除 m_serviceHolder->deleteService(event.getConnectionId()); // 表示の更新 m_view->displayChannels(m_serviceHolder->getServices()); } else{ // コンテンツの更新 service->onAuthSucceeed(); service->setConnected(true); // 表示の更新 updateAllView(event.getConnectionId(), service->getCurrentChannel()); } } // // 切断情報の受信時 void CMainWindow::onDisconnect(CDisconnectEvent& event) { CChatServiceBase* service = m_serviceHolder->getService( event.getConnectionId()); if (service != NULL){ disconnect(event.getConnectionId()); wxMessageBox( wxString::Format(wxT("サーバー[%s(%s)]切断されました。再接続を行う際は更新してください。"), service->getName(), service->getHost())); } }