Ticket #4069: 4069_chat_history_v1.patch

File 4069_chat_history_v1.patch, 8.2 KB (added by Imarok, 8 years ago)

reused some parts from elexis patch. Final patch

  • binaries/data/mods/public/gui/session/chat_window.xml

     
    11<?xml version="1.0" encoding="utf-8"?>
    22
    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">
    44
     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" 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
    518    <!-- Message addressee -->
    6     <object size="16 14 50 38" type="text" style="chatPanel">
     19    <object size="16 100%-106 50 100%-82" type="text" style="chatPanel">
    720        <translatableAttribute id="caption" context="chat input">To:</translatableAttribute>
    821    </object>
    9     <object size="75 12 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>
    1124    </object>
    1225
    1326    <!-- 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">
    1528        <translatableAttribute id="caption" context="chat input">Text:</translatableAttribute>
    1629    </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">
    1831        <translatableAttribute id="tooltip" context="chat input">Type the message to send.</translatableAttribute>
    1932        <action on="Press">submitChatInput();</action>
    2033        <action on="Tab">
     
    3043        <translatableAttribute id="caption">Cancel</translatableAttribute>
    3144        <action on="Press">closeChat();</action>
    3245    </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>
    3351
     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
    3457    <!-- Send Button -->
    3558    <object size="60%+16 100%-40 100%-16 100%-12" type="button" style="StoneButton">
    3659        <translatableAttribute id="caption">Send</translatableAttribute>
  • binaries/data/mods/public/gui/session/menu.js

     
    217217    let command = teamChat ? (g_IsObserver ? "/observers" : "/allies") : "";
    218218    chatAddressee.selected = chatAddressee.list_data.indexOf(command);
    219219
    220     Engine.GetGUIObjectByName("chatInput").focus();
    221220    Engine.GetGUIObjectByName("chatDialogPanel").hidden = false;
     221
     222    resizeChatWindow();
    222223}
    223224
    224225function closeChat()
     
    228229    Engine.GetGUIObjectByName("chatDialogPanel").hidden = true;
    229230}
    230231
     232function 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        updateChatHistory();
     243    Engine.GetGUIObjectByName("chatHistoryPage").hidden = !extended;
     244    Engine.GetGUIObjectByName("chatInput").focus();
     245}
     246
     247function initChatHistoryFilter()
     248{
     249    let chatHistoryFilter = Engine.GetGUIObjectByName("chatHistoryFilter");
     250    chatHistoryFilter.list = [translate("All"), translate("Chat"), translate("Players chat"), translate("Ally chat")];
     251    chatHistoryFilter.list_data = ["all", "isChat", "noObserver", "isAlly"];
     252    chatHistoryFilter.selected = 0;
     253}
     254
     255function updateChatHistory()
     256{
     257    let chatHistoryFilter = Engine.GetGUIObjectByName("chatHistoryFilter");
     258    let selected = chatHistoryFilter.list_data[chatHistoryFilter.selected];
     259    Engine.GetGUIObjectByName("chatHistory").caption = g_ChatHistory.filter(msg => selected == "all" || msg[selected]).map(
     260        msg => Engine.ConfigDB_GetValue("user", "lobby.chattimestamp") == "true" ?
     261            sprintf(translate("%(time)s %(message)s"), {
     262                "time": msg.timePrefix,
     263                "message": msg.txt
     264            }) :
     265            msg.txt).join("\n");
     266}
     267
    231268function openDiplomacy()
    232269{
    233270    closeOpenDialogs();
  • binaries/data/mods/public/gui/session/messages.js

     
    1515const g_ChatLines = 20;
    1616
    1717/**
    18  * The strings to be displayed including sender and formating.
     18 * The currently displayed strings, limited by the given timeframe and limit above.
    1919 */
    2020var g_ChatMessages = [];
    2121
    2222/**
     23 * All unparsed chat messages received since connect, including timestamp.
     24 */
     25var g_ChatHistory = [];
     26
     27/**
    2328 * Holds the timer-IDs used for hiding the chat after g_ChatTimeout seconds.
    2429 */
    2530var g_ChatTimers = [];
     
    703708    if (!formatted)
    704709        return;
    705710
     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
    706726    g_ChatMessages.push(formatted);
    707727    g_ChatTimers.push(setTimeout(removeOldChatMessage, g_ChatTimeout * 1000));
    708728
  • binaries/data/mods/public/gui/session/session.js

     
    294294        Engine.GetGUIObjectByName("menuExitButton").enabled = false;
    295295
    296296    initHotkeyTooltips();
     297    initChatHistoryFilter();
    297298
    298299    if (hotloadData)
    299300        g_Selection.selected = hotloadData.selection;
  • binaries/data/mods/public/gui/session/styles.xml

     
    247247        textcolor_selected="darkgray"
    248248    />
    249249
     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
    250262    <style name="notificationPanel"
    251263        buffer_zone="5"
    252264        font="sans-bold-stroke-14"