void LoginDialog::onListening() { ConnectionConfigSM ccsm(RegistryPaths::VIEWER_PATH, _T(".listen")); m_connectionConfig.loadFromStorage(&ccsm); m_listening.setEnabled(false); m_viewer->startListening(ViewerConfig::getInstance()->getListenPort()); }
void LoginDialog::onConnect() { ConnectionHistory *conHistory = ViewerConfig::getInstance()->getConnectionHistory(); m_server.getText(&m_serverHost); conHistory->load(); conHistory->addHost(m_serverHost.getString()); conHistory->save(); if (!m_serverHost.isEmpty()) { ConnectionConfigSM ccsm(RegistryPaths::VIEWER_PATH, m_serverHost.getString()); m_connectionConfig.saveToStorage(&ccsm); } m_viewer->newConnection(&m_serverHost, &m_connectionConfig); }
BOOL LoginDialog::onOptions() { OptionsDialog dialog; dialog.setConnectionConfig(&m_connectionConfig); dialog.setParent(getControl()); if (dialog.showModal() == 1) { StringStorage server; m_server.getText(&server); if (server.isEmpty()) { ConnectionConfigSM ccsm(RegistryPaths::VIEWER_PATH, server.getString()); m_connectionConfig.saveToStorage(&ccsm); } return FALSE; } return TRUE; }
void LoginDialog::updateHistory() { ConnectionHistory *conHistory; StringStorage currentServer; m_server.getText(¤tServer); m_server.removeAllItems(); conHistory = ViewerConfig::getInstance()->getConnectionHistory(); conHistory->load(); for (size_t i = 0; i < conHistory->getHostCount(); i++) { m_server.insertItem(static_cast<int>(i), conHistory->getHost(i)); } m_server.setText(currentServer.getString()); if (m_server.getItemsCount()) { if (currentServer.isEmpty()) { m_server.setSelectedItem(0); } StringStorage server; m_server.getText(&server); ConnectionConfigSM ccsm(RegistryPaths::VIEWER_PATH, server.getString()); m_connectionConfig.loadFromStorage(&ccsm); } }
BOOL LoginDialog::onCommand(UINT controlID, UINT notificationID) { switch (controlID) { case IDC_CSERVER: switch (notificationID) { case CBN_DROPDOWN: updateHistory(); break; // select item in ComboBox with list of history case CBN_SELENDOK: { int selectedItemIndex = m_server.getSelectedItemIndex(); if (selectedItemIndex < 0) { return FALSE; } StringStorage server; m_server.getItemText(selectedItemIndex, &server); ConnectionConfigSM ccsm(RegistryPaths::VIEWER_PATH, server.getString()); m_connectionConfig.loadFromStorage(&ccsm); break; } } enableConnect(); break; // click "Connect" case IDOK: onConnect(); kill(0); break; // cancel connection case IDCANCEL: kill(0); break; case IDC_BCONFIGURATION: onConfiguration(); break; case IDC_BOPTIONS: return onOptions(); case IDC_LISTENING: onListening(); kill(0); break; case IDC_ORDER_SUPPORT_BUTTON: onOrder(); break; case IDC_BABOUT: onAbout(); break; default: _ASSERT(true); return FALSE; } return TRUE; }
// Process window messages LRESULT CALLBACK Daemon::WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { // This is a static method, so we don't know which instantiation we're // dealing with. We have stored a pseudo-this in the window user data, // though. Daemon *_this = (Daemon *) GetWindowLong(hwnd, GWL_USERDATA); switch (iMsg) { case WM_CREATE: { return 0; } case WM_SOCKEVENT: { assert(HIWORD(lParam) == 0); // A new socket created by accept might send messages to // this procedure. We can ignore them. if(wParam != _this->m_sock) { return 0; } switch(lParam) { case FD_ACCEPT: { SOCKET hNewSock; hNewSock = accept(_this->m_sock, NULL, NULL); WSAAsyncSelect(hNewSock, hwnd, 0, 0); unsigned long nbarg = 0; ioctlsocket(hNewSock, FIONBIO, &nbarg); pApp->NewConnection(hNewSock); break; } case FD_READ: { unsigned long numbytes; ioctlsocket(_this->m_sock, FIONREAD, &numbytes); recv(_this->m_sock, _this->netbuf, numbytes, 0); break; } case FD_CLOSE: Log::info(_T("Daemon connection closed\n")); DestroyWindow(hwnd); break; } return 0; } case WM_COMMAND: switch (LOWORD(wParam)) { case ID_NEWCONN: pApp->NewConnection(); break; case IDC_OPTIONBUTTON: { Control ctrlThis; ctrlThis.setWindow(_this->m_hwnd); ConnectionConfigDialog conConfDialog; conConfDialog.setParent(&ctrlThis); conConfDialog.setConnectionConfig(&_this->m_conConf); if (conConfDialog.showModal() == IDOK) { ConnectionConfigSM ccsm(_T(".listen")); _this->m_conConf.saveToStorage(&ccsm); } } break; case ID_CLOSEDAEMON: PostQuitMessage(0); break; case IDD_APP_ABOUT: ShowAboutBox(); break; case IDD_CONFIGURATION: g_vncViewerConfigDialog.showModal(); break; } return 0; case WM_TRAYNOTIFY: { HMENU hSubMenu = GetSubMenu(_this->m_hmenu, 0); if (lParam==WM_LBUTTONDBLCLK) { // double click: execute first menu item ::SendMessage(_this->m_nid.hWnd, WM_COMMAND, GetMenuItemID(hSubMenu, 0), 0); } else if (lParam==WM_RBUTTONUP) { if (hSubMenu == NULL) { Log::warning(_T("No systray submenu\n")); return 0; } // Make first menu item the default (bold font) ::SetMenuDefaultItem(hSubMenu, 0, TRUE); // Display the menu at the current mouse location. There's a "bug" // (Microsoft calls it a feature) in Windows 95 that requires calling // SetForegroundWindow. To find out more, search for Q135788 in MSDN. // POINT mouse; GetCursorPos(&mouse); ::SetForegroundWindow(_this->m_nid.hWnd); ::TrackPopupMenu(hSubMenu, 0, mouse.x, mouse.y, 0, _this->m_nid.hWnd, NULL); } return 0; } case WM_TIMER: _this->CheckTrayIcon(); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); }