view src/cagou/plugins/plugin_wid_chat.kv @ 97:5d2289127bb7

menu (upload): better menu using dedicated widget: upload menu now use a decicated widget instead of context menu. The menu take half the size of the main window, and show each upload option as an icon. Use can select upload or P2P sending, and a short text message explains how the file will be transmitted.
author Goffi <goffi@goffi.org>
date Thu, 29 Dec 2016 23:47:07 +0100
parents c711be670ecd
children c601e3d40342
line wrap: on
line source

# Cagou: desktop/mobile frontend for Salut à Toi XMPP client
# Copyright (C) 2016 Jérôme Poisson (goffi@goffi.org)

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

#:import TransferMenu cagou.core.menu.TransferMenu


<SimpleXHTMLWidgetEscapedText>:
    size_hint: None, None
    size: self.texture_size

<SimpleXHTMLWidgetText>:
    size_hint: None, None
    size: self.texture_size

<SimpleXHTMLWidgetImage>:
    size_hint: None, None

<MessAvatar>:
    size_hint: None, None
    size: dp(30), dp(30)

<MessagesWidget>:
    cols: 1
    padding: dp(10)
    spacing: dp(5)
    size_hint: 1, None
    height: self.minimum_height

<MessageWidget>:
    cols: 1
    mess_xhtml: mess_xhtml
    padding: dp(10)
    spacing: dp(5)
    size_hint: 1, None
    height: self.minimum_height
    on_width: self.widthAdjust()
    avatar: avatar
    BoxLayout:
        id: header_box
        size_hint: 1, None
        height: avatar.height
        MessAvatar:
            id: avatar
            source: root.mess_data.avatar
        Label:
            id: time_label
            text_size: None, None
            size_hint: None, None
            size: self.texture_size
            padding: dp(5), 0
            text: u"{}, {}".format(root.mess_data.nick, root.mess_data.time_text)
    BoxLayout:
        # BoxLayout is needed here, else GridLayout won't let the Label choose its width
        size_hint: 1, None
        height: mess_xhtml.height
        on_size: root.widthAdjust()
        SimpleXHTMLWidget:
            canvas.before:
                Color:
                    rgba: 1, 1, 1, 1
                BorderImage:
                    source: app.expand("{media}/misc/black.png") if root.mess_data.type == "info" else app.expand("{media}/misc/borders/{}.jpg", "blue" if root.mess_data.own_mess else "gray")
                    pos: self.pos
                    size: self.content_width, self.height
            id: mess_xhtml
            size_hint: 0.8, None
            height: self.minimum_height
            xhtml: root.message_xhtml or self.escape(root.message or u' ')
            color: (0.74,0.74,0.24,1) if root.mess_data.type == "info" else (0, 0, 0, 1)
            padding: root.mess_padding
            bold: True if root.mess_data.type == "info" else False


<Chat>:
    messages_widget: messages_widget
    ScrollView:
        size_hint: 1, 0.8
        scroll_y: 0
        do_scroll_x: False
        MessagesWidget:
            id: messages_widget
    MessageInputBox:
        size_hint: 1, None
        height: dp(40)
        message_input: message_input
        MessageInputWidget:
            id: message_input
            size_hint: 1, 1
            hint_text: "Enter your message here"
            on_text_validate: root.onSend(args[0])
        IconButton
            # transfer button
            source: app.expand("{media}/icons/tango/actions/32/list-add.png")
            allow_stretch: True
            size_hint: None, 1
            width: max(self.texture_size[0], dp(40))
            on_release: TransferMenu(callback=root.onTransferOK).show(self)