Ticket #4069: 4069_chat_history_v1.1.patch
File 4069_chat_history_v1.1.patch, 8.8 KB (added by , 8 years ago) |
---|
-
binaries/data/mods/public/gui/session/chat_window.xml
1 1 <?xml version="1.0" encoding="utf-8"?> 2 2 3 <object name="chatDialogPanel" size="50%- 180 50%-66 50%+180 50%+54" type="image" hidden="true" sprite="genericPanel">3 <object name="chatDialogPanel" size="50%-200 50%-410 50%+200 50%+60" type="image" hidden="true" sprite="genericPanel"> 4 4 5 <object type="image" name="chatHistoryPage" size="0 0 100% 300" hidden="false"> 6 <object name="chatHistory" type="text" size="10 10 100%-10 100%-36" sprite="ModernDarkBoxGold" style="chatHistory"/> 7 8 <!-- Chat History Filter --> 9 <object size="16 100%-22 60 100%-2" name="chatHistoryFilterLabel" type="text" style="chatPanel"> 10 <translatableAttribute id="caption" context="chat input">Filter:</translatableAttribute> 11 </object> 12 <object size="75 100%-24 100%-16 100%" name="chatHistoryFilter" type="dropdown" style="ModernDropDown" tooltip_style="sessionToolTipBold"> 13 <translatableAttribute id="tooltip" context="chat input">Filter the chat history.</translatableAttribute> 14 <action on="SelectionChange">updateChatHistory();</action> 15 </object> 16 </object> 17 5 18 <!-- Message addressee --> 6 <object size="16 1 4 50 38" type="text" style="chatPanel">19 <object size="16 100%-106 50 100%-82" type="text" style="chatPanel"> 7 20 <translatableAttribute id="caption" context="chat input">To:</translatableAttribute> 8 21 </object> 9 <object size="75 1 2 100%-16 36" name="chatAddressee" type="dropdown" style="ModernDropDown" tooltip_style="sessionToolTipBold">10 <translatableAttribute id="tooltip" context="chat input">Select chatmessage addressee </translatableAttribute>22 <object size="75 100%-108 100%-16 100%-84" name="chatAddressee" type="dropdown" style="ModernDropDown" tooltip_style="sessionToolTipBold"> 23 <translatableAttribute id="tooltip" context="chat input">Select chatmessage addressee.</translatableAttribute> 11 24 </object> 12 25 13 26 <!-- Message text --> 14 <object size="16 46 50 70" type="text" style="chatPanel">27 <object size="16 100%-74 50 100%-50" type="text" style="chatPanel"> 15 28 <translatableAttribute id="caption" context="chat input">Text:</translatableAttribute> 16 29 </object> 17 <object name="chatInput" size="75 44 100%-16 68" type="input" style="ModernInput" max_length="80">30 <object name="chatInput" size="75 100%-76 100%-16 100%-52" type="input" style="ModernInput" max_length="80"> 18 31 <translatableAttribute id="tooltip" context="chat input">Type the message to send.</translatableAttribute> 19 32 <action on="Press">submitChatInput();</action> 20 33 <action on="Tab"> … … 30 43 <translatableAttribute id="caption">Cancel</translatableAttribute> 31 44 <action on="Press">closeChat();</action> 32 45 </object> 46 47 <!-- Extended Chat Checkbox --> 48 <object name="extendedChat" type="checkbox" checked="false" style="ModernTickBox" size="50%-50 100%-38 50%-24 100%-12"> 49 <action on="Press">resizeChatWindow();</action> 50 </object> 33 51 52 <!-- Extended Chat Label --> 53 <object type="text" size="50%-24 100%-38 50%+40 100%-12" text_align="left" textcolor="white"> 54 <translatableAttribute id="caption" context="extended chat">Extended</translatableAttribute> 55 </object> 56 34 57 <!-- Send Button --> 35 58 <object size="60%+16 100%-40 100%-16 100%-12" type="button" style="StoneButton"> 36 59 <translatableAttribute id="caption">Send</translatableAttribute> -
binaries/data/mods/public/gui/session/menu.js
217 217 let command = teamChat ? (g_IsObserver ? "/observers" : "/allies") : ""; 218 218 chatAddressee.selected = chatAddressee.list_data.indexOf(command); 219 219 220 Engine.GetGUIObjectByName("chatInput").focus();221 220 Engine.GetGUIObjectByName("chatDialogPanel").hidden = false; 221 222 resizeChatWindow(); 222 223 } 223 224 224 225 function closeChat() … … 228 229 Engine.GetGUIObjectByName("chatDialogPanel").hidden = true; 229 230 } 230 231 232 function resizeChatWindow() 233 { 234 let extended = Engine.GetGUIObjectByName("extendedChat").checked; 235 let chatDialogPanel = Engine.GetGUIObjectByName("chatDialogPanel"); 236 let chatHistoryPage = Engine.GetGUIObjectByName("chatHistoryPage"); 237 let panelSize = chatDialogPanel.size; 238 panelSize.top = (extended ? -chatHistoryPage.size.bottom : 0) - 60; 239 chatDialogPanel.size = panelSize; 240 241 if (extended) 242 { 243 let chatHistoryFilter = Engine.GetGUIObjectByName("chatHistoryFilter"); 244 chatHistoryFilter.hidden = g_IsObserver; 245 Engine.GetGUIObjectByName("chatHistoryFilterLabel").hidden = g_IsObserver; 246 let chatHistory = Engine.GetGUIObjectByName("chatHistory"); 247 let chatHistorySize = chatHistory.size; 248 chatHistorySize.bottom = g_IsObserver ? chatHistoryFilter.size.bottom : chatHistoryFilter.size.top -12; 249 chatHistorySize.rbottom = g_IsObserver ? chatHistoryFilter.size.rbottom : chatHistoryFilter.size.rtop; 250 chatHistory.size = chatHistorySize; 251 if (g_IsObserver) 252 chatHistoryFilter.selected = 0; 253 updateChatHistory(); 254 } 255 Engine.GetGUIObjectByName("chatHistoryPage").hidden = !extended; 256 Engine.GetGUIObjectByName("chatInput").focus(); 257 } 258 259 function initChatHistoryFilter() 260 { 261 let chatHistoryFilter = Engine.GetGUIObjectByName("chatHistoryFilter"); 262 chatHistoryFilter.list = [translate("All"), translate("Chat"), translate("Players chat"), translate("Ally chat")]; 263 chatHistoryFilter.list_data = ["all", "isChat", "noObserver", "isAlly"]; 264 chatHistoryFilter.selected = 0; 265 } 266 267 function updateChatHistory() 268 { 269 let chatHistoryFilter = Engine.GetGUIObjectByName("chatHistoryFilter"); 270 let selected = chatHistoryFilter.list_data[chatHistoryFilter.selected]; 271 Engine.GetGUIObjectByName("chatHistory").caption = g_ChatHistory.filter(msg => selected == "all" || msg[selected]).map( 272 msg => Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true" ? 273 sprintf(translate("%(time)s %(message)s"), { 274 "time": msg.timePrefix, 275 "message": msg.txt 276 }) : 277 msg.txt).join("\n"); 278 } 279 231 280 function openDiplomacy() 232 281 { 233 282 closeOpenDialogs(); -
binaries/data/mods/public/gui/session/messages.js
15 15 const g_ChatLines = 20; 16 16 17 17 /** 18 * The strings to be displayed including sender and formating.18 * The currently displayed strings, limited by the given timeframe and limit above. 19 19 */ 20 20 var g_ChatMessages = []; 21 21 22 22 /** 23 * All unparsed chat messages received since connect, including timestamp. 24 */ 25 var g_ChatHistory = []; 26 27 /** 23 28 * Holds the timer-IDs used for hiding the chat after g_ChatTimeout seconds. 24 29 */ 25 30 var g_ChatTimers = []; … … 703 708 if (!formatted) 704 709 return; 705 710 711 // Remember the original text as it depends on g_PlayerAssignments 712 let time = new Date(Date.now()); 713 let senderID = g_PlayerAssignments[msg.guid].player 714 g_ChatHistory.push({ 715 "txt": formatted, 716 "timePrefix": sprintf(translate("\\[%(time)s]"), { 717 "time": Engine.FormatMillisecondsIntoDateString(time.getTime(), translate("HH:mm")) 718 }), 719 "isChat": msg.type == "message", 720 "noObserver": msg.type == "message" && senderID > 0 && !isPlayerObserver(senderID), 721 "isAlly": msg.type == "message" && g_Players[Engine.GetPlayerID()] && g_Players[Engine.GetPlayerID()].isAlly[senderID] 722 }); 723 if (!Engine.GetGUIObjectByName("chatDialogPanel").hidden) 724 updateChatHistory(); 725 706 726 g_ChatMessages.push(formatted); 707 727 g_ChatTimers.push(setTimeout(removeOldChatMessage, g_ChatTimeout * 1000)); 708 728 -
binaries/data/mods/public/gui/session/session.js
294 294 Engine.GetGUIObjectByName("menuExitButton").enabled = false; 295 295 296 296 initHotkeyTooltips(); 297 initChatHistoryFilter(); 297 298 298 299 if (hotloadData) 299 300 g_Selection.selected = hotloadData.selection; -
binaries/data/mods/public/gui/session/styles.xml
247 247 textcolor_selected="darkgray" 248 248 /> 249 249 250 <style name="chatHistory" 251 buffer_zone="5" 252 font="sans-13" 253 scrollbar="true" 254 scrollbar_style="ModernScrollBar" 255 scroll_bottom="true" 256 textcolor="white" 257 textcolor_selected="gold" 258 text_align="left" 259 text_valign="center" 260 /> 261 250 262 <style name="notificationPanel" 251 263 buffer_zone="5" 252 264 font="sans-bold-stroke-14"