1793 */ |
1793 */ |
1794 static void ChatWindowWndProc(Window *w, WindowEvent *e) |
1794 static void ChatWindowWndProc(Window *w, WindowEvent *e) |
1795 { |
1795 { |
1796 switch (e->event) { |
1796 switch (e->event) { |
1797 case WE_CREATE: |
1797 case WE_CREATE: |
1798 SendWindowMessage(WC_NEWS_WINDOW, 0, WE_CREATE, w->height, 0); |
|
1799 SetBit(_no_scroll, SCROLL_CHAT); // do not scroll the game with the arrow-keys |
|
1800 break; |
1798 break; |
1801 |
1799 |
1802 case WE_PAINT: { |
1800 case WE_PAINT: { |
1803 static const StringID chat_captions[] = { |
|
1804 STR_NETWORK_CHAT_ALL_CAPTION, |
|
1805 STR_NETWORK_CHAT_COMPANY_CAPTION, |
|
1806 STR_NETWORK_CHAT_CLIENT_CAPTION |
|
1807 }; |
|
1808 StringID msg; |
|
1809 |
|
1810 DrawWindowWidgets(w); |
1801 DrawWindowWidgets(w); |
1811 |
1802 |
1812 assert(WP(w, chatquerystr_d).caption < lengthof(chat_captions)); |
|
1813 msg = chat_captions[WP(w, chatquerystr_d).caption]; |
|
1814 DrawStringRightAligned(w->widget[2].left - 2, w->widget[2].top + 1, msg, TC_BLACK); |
|
1815 DrawEditBox(w, &WP(w, chatquerystr_d), 2); |
1803 DrawEditBox(w, &WP(w, chatquerystr_d), 2); |
1816 } break; |
1804 } break; |
1817 |
1805 |
1818 case WE_CLICK: |
1806 case WE_CLICK: |
1819 switch (e->we.click.widget) { |
1807 switch (e->we.click.widget) { |
1885 WP(w, chatquerystr_d).dest = dest; |
1873 WP(w, chatquerystr_d).dest = dest; |
1886 WP(w, chatquerystr_d).afilter = CS_ALPHANUMERAL; |
1874 WP(w, chatquerystr_d).afilter = CS_ALPHANUMERAL; |
1887 InitializeTextBuffer(&WP(w, chatquerystr_d).text, _edit_str_buf, lengthof(_edit_str_buf), 0); |
1875 InitializeTextBuffer(&WP(w, chatquerystr_d).text, _edit_str_buf, lengthof(_edit_str_buf), 0); |
1888 } |
1876 } |
1889 |
1877 |
|
1878 /** Enum for NetworkGameWindow, referring to _network_game_window_widgets */ |
|
1879 enum NetworkCompanyPasswordWindowWidgets { |
|
1880 NCPWW_CLOSE, ///< Close 'X' button |
|
1881 NCPWW_CAPTION, ///< Caption of the whole window |
|
1882 NCPWW_BACKGROUND, ///< The background of the interface |
|
1883 NCPWW_LABEL, ///< Label in front of the password field |
|
1884 NCPWW_PASSWORD, ///< Input field for the password |
|
1885 NCPWW_SAVE_AS_DEFAULT_PASSWORD, ///< Toggle 'button' for saving the current password as default password |
|
1886 NCPWW_CANCEL, ///< Close the window without changing anything |
|
1887 NCPWW_OK, ///< Safe the password etc. |
|
1888 }; |
|
1889 |
|
1890 static void NetworkCompanyPasswordWindowWndProc(Window *w, WindowEvent *e) |
|
1891 { |
|
1892 switch (e->event) { |
|
1893 case WE_PAINT: |
|
1894 DrawWindowWidgets(w); |
|
1895 DrawEditBox(w, &WP(w, chatquerystr_d), 4); |
|
1896 break; |
|
1897 |
|
1898 case WE_CLICK: |
|
1899 switch (e->we.click.widget) { |
|
1900 case NCPWW_OK: { |
|
1901 if (w->IsWidgetLowered(NCPWW_SAVE_AS_DEFAULT_PASSWORD)) { |
|
1902 snprintf(_network_default_company_pass, lengthof(_network_default_company_pass), "%s", _edit_str_buf); |
|
1903 } |
|
1904 |
|
1905 /* empty password is a '*' because of console argument */ |
|
1906 if (StrEmpty(_edit_str_buf)) snprintf(_edit_str_buf, lengthof(_edit_str_buf), "*"); |
|
1907 char *password = _edit_str_buf; |
|
1908 NetworkChangeCompanyPassword(1, &password); |
|
1909 } |
|
1910 |
|
1911 /* FALL THROUGH */ |
|
1912 case NCPWW_CANCEL: |
|
1913 DeleteWindow(w); |
|
1914 break; |
|
1915 |
|
1916 case NCPWW_SAVE_AS_DEFAULT_PASSWORD: |
|
1917 w->ToggleWidgetLoweredState(NCPWW_SAVE_AS_DEFAULT_PASSWORD); |
|
1918 SetWindowDirty(w); |
|
1919 break; |
|
1920 } |
|
1921 break; |
|
1922 |
|
1923 case WE_MOUSELOOP: |
|
1924 HandleEditBox(w, &WP(w, chatquerystr_d), 4); |
|
1925 break; |
|
1926 |
|
1927 case WE_KEYPRESS: |
|
1928 switch (HandleEditBoxKey(w, &WP(w, chatquerystr_d), 4, e)) { |
|
1929 case 1: // Return |
|
1930 /* FALLTHROUGH */ |
|
1931 case 2: // Escape |
|
1932 DeleteWindow(w); |
|
1933 break; |
|
1934 } |
|
1935 break; |
|
1936 } |
|
1937 } |
|
1938 |
|
1939 static const Widget _ncp_window_widgets[] = { |
|
1940 { WWT_CLOSEBOX, RESIZE_NONE, 14, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, |
|
1941 { WWT_CAPTION, RESIZE_NONE, 14, 11, 299, 0, 13, STR_COMPANY_PASSWORD_CAPTION, STR_018C_WINDOW_TITLE_DRAG_THIS}, |
|
1942 { WWT_PANEL, RESIZE_NONE, 14, 0, 299, 14, 50, 0x0, STR_NULL}, |
|
1943 { WWT_TEXT, RESIZE_NONE, 14, 5, 100, 19, 30, STR_COMPANY_PASSWORD, STR_NULL}, |
|
1944 { WWT_PANEL, RESIZE_NONE, 14, 101, 294, 19, 30, 0x0, STR_NULL}, |
|
1945 { WWT_TEXTBTN, RESIZE_NONE, 14, 101, 294, 35, 46, STR_MAKE_DEFAULT_COMPANY_PASSWORD, STR_MAKE_DEFAULT_COMPANY_PASSWORD_TIP}, |
|
1946 { WWT_PUSHTXTBTN, RESIZE_NONE, 14, 0, 149, 51, 62, STR_012E_CANCEL, STR_COMPANY_PASSWORD_CANCEL}, |
|
1947 { WWT_PUSHTXTBTN, RESIZE_NONE, 14, 150, 299, 51, 62, STR_012F_OK, STR_COMPANY_PASSWORD_OK}, |
|
1948 { WIDGETS_END}, |
|
1949 }; |
|
1950 |
|
1951 static const WindowDesc _ncp_window_desc = { |
|
1952 WDP_AUTO, WDP_AUTO, 300, 63, 300, 63, |
|
1953 WC_COMPANY_PASSWORD_WINDOW, WC_NONE, |
|
1954 WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON, |
|
1955 _ncp_window_widgets, |
|
1956 NetworkCompanyPasswordWindowWndProc |
|
1957 }; |
|
1958 |
|
1959 void ShowNetworkCompanyPasswordWindow() |
|
1960 { |
|
1961 DeleteWindowById(WC_COMPANY_PASSWORD_WINDOW, 0); |
|
1962 |
|
1963 _edit_str_buf[0] = '\0'; |
|
1964 Window *w = AllocateWindowDesc(&_ncp_window_desc); |
|
1965 WP(w, chatquerystr_d).afilter = CS_ALPHANUMERAL; |
|
1966 InitializeTextBuffer(&WP(w, chatquerystr_d).text, _edit_str_buf, min(lengthof(_network_default_company_pass), lengthof(_edit_str_buf)), 0); |
|
1967 } |
|
1968 |
1890 #endif /* ENABLE_NETWORK */ |
1969 #endif /* ENABLE_NETWORK */ |