示例#1
0
 def __init__(self, Base):
     Gtk.TreeView.__init__(self)
     self.BarnamyBase = Base
     self.user_liststore = Gtk.ListStore(str, str)
     users_rend = Gtk.CellRendererText()
     status_rend = Gtk.CellRendererText()
     users_col = Gtk.TreeViewColumn("Users", users_rend, text=0)
     status_col = Gtk.TreeViewColumn("Status", status_rend, text=1)
     self.append_column(users_col)
     self.append_column(status_col)
     self.set_model(self.user_liststore)
     self.connect("button_press_event", self.on_user_list_button_press_event)
     self.connect("button_press_event", self.on_user_list_double_click)
     self.get_selection().connect("changed", self.on_selected_user_change)
     self.selected_prv_chat = None
     self.barnamy_private_win = BarnamyPrivateChat(self.BarnamyBase)
     self.users_tab = self.barnamy_private_win.users_tab
     self.users_tab.connect("switch-page", self.get_user_win_prv_title)
     self.menu = Gtk.Menu()
     prv_chat = Gtk.MenuItem("Private chat")
     fldr_access = Gtk.MenuItem("Folder Access")
     prv_chat.connect("activate", self.on_private_chat_clicked)
     fldr_access.connect("activate", self.on_fldr_access_clicked)
     self.menu.append(prv_chat)
     self.menu.append(fldr_access)
     prv_chat.show()
     fldr_access.show()
示例#2
0
class BarnamyUserList(Gtk.TreeView):
    def __init__(self, Base):
        Gtk.TreeView.__init__(self)
        self.BarnamyBase = Base
        self.user_liststore = Gtk.ListStore(str, str)
        users_rend = Gtk.CellRendererText()
        status_rend = Gtk.CellRendererText()
        users_col = Gtk.TreeViewColumn("Users", users_rend, text=0)
        status_col = Gtk.TreeViewColumn("Status", status_rend, text=1)
        self.append_column(users_col)
        self.append_column(status_col)
        self.set_model(self.user_liststore)
        self.connect("button_press_event", self.on_user_list_button_press_event)
        self.connect("button_press_event", self.on_user_list_double_click)
        self.get_selection().connect("changed", self.on_selected_user_change)
        self.selected_prv_chat = None
        self.barnamy_private_win = BarnamyPrivateChat(self.BarnamyBase)
        self.users_tab = self.barnamy_private_win.users_tab
        self.users_tab.connect("switch-page", self.get_user_win_prv_title)
        self.menu = Gtk.Menu()
        prv_chat = Gtk.MenuItem("Private chat")
        fldr_access = Gtk.MenuItem("Folder Access")
        prv_chat.connect("activate", self.on_private_chat_clicked)
        fldr_access.connect("activate", self.on_fldr_access_clicked)
        self.menu.append(prv_chat)
        self.menu.append(fldr_access)
        prv_chat.show()
        fldr_access.show()

    def on_selected_user_change(self, tree_selection):
        (model, pathlist) = tree_selection.get_selected_rows()
        for path in pathlist:
            tree_iter = model.get_iter(path)
            value = model.get_value(tree_iter, 0)
            self.selected_user = value

    def on_user_list_double_click(self, treeview, event):
        if event.button == 1:
            data = treeview.get_path_at_pos(int(event.x), int(event.y))
            if data:
                if event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS:
                    self.private_chat(self.selected_user)

    def on_private_chat_clicked(self, widget):
        self.private_chat(self.selected_user)

    def on_fldr_access_clicked(self, widget):
        data = {
            "type": "folder",
            "from_": self.BarnamyBase.nick,
            "to_": self.selected_user,
            "token_id": self.BarnamyBase.token_id,
        }
        self.BarnamyBase.barnamy_actions["ask_for_folder_access"](data)

    def private_chat(self, nick):
        if nick in USERS_CHAT:
            return
        USERS_CHAT[nick] = {"chat_private_view": BarnamyChatViewer(), "entry_text": Gtk.Entry()}
        USERS_CHAT[nick]["chat_private_view"].users_tag[nick] = USERS_CHAT[nick]["chat_private_view"].radom_color(nick)
        if not self.BarnamyBase.nick in USERS_CHAT[nick]["chat_private_view"].users_tag:
            USERS_CHAT[nick]["chat_private_view"].users_tag[self.BarnamyBase.nick] = USERS_CHAT[nick][
                "chat_private_view"
            ].chat_buffer.create_tag("user_color", foreground="#0000FF")
        chat_view_scrollbar = Gtk.ScrolledWindow()
        chat_view_scrollbar.add(USERS_CHAT[nick]["chat_private_view"])
        main_chat_box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=7)
        main_chat_box.set_border_width(7)
        main_chat_box.pack_start(chat_view_scrollbar, True, True, 0)
        main_chat_box.pack_start(USERS_CHAT[nick]["entry_text"], False, True, 0)
        label = Gtk.Label(label="%s" % str(nick))
        button = Gtk.Button("X")
        hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
        button.connect("clicked", self.on_closetab_button_clicked, hbox)
        USERS_CHAT[nick]["entry_text"].connect("key-press-event", self.send_prv_msg)
        hbox.pack_start(label, True, True, 0)
        hbox.pack_start(button, False, False, 0)
        hbox.show_all()
        self.users_tab.append_page(main_chat_box, hbox)
        self.barnamy_private_win.show_all()
        USERS_CHAT[nick]["entry_text"].grab_focus()

    def on_closetab_button_clicked(self, sender, widget):

        nick = widget.get_children()[0].get_text()
        # pagenum = self.users_tab.page_num(widget)
        page_num = self.users_tab.get_current_page()
        if self.users_tab.get_n_pages() == 1:
            self.barnamy_private_win.hide()
        self.users_tab.remove_page(page_num)
        del USERS_CHAT[nick]

    def send_prv_msg(self, widget, event):
        if event.keyval == 65293:
            widget.emit_stop_by_name("key-press-event")
            msg = widget.get_text()
            widget.set_text("")
            nick = self.selected_prv_chat
            USERS_CHAT[nick]["chat_private_view"].put_msg_(self.BarnamyBase.nick, msg)

            data = {
                "type": "private",
                "to_": nick,
                "from_": self.BarnamyBase.nick,
                "token_id": self.BarnamyBase.token_id,
                "msg": msg,
            }
            self.BarnamyBase.barnamy_actions["send_prv_msg"](data)

    def recv_prv_msg(self, data):
        self.private_chat(data["from_"])
        USERS_CHAT[data["from_"]]["chat_private_view"].recv_prv_msg(data["from_"], data["msg"])
        self.barnamy_private_win.set_urgency_hint(True)

    def recv_user_join_left_prv(self, data):
        if data["user"] in USERS_CHAT:
            USERS_CHAT[data["user"]]["chat_private_view"].recv_left_joing(data["user_join_left"])
            if data["user"] in data["user_list"]:
                USERS_CHAT[data["user"]]["entry_text"].set_sensitive(True)
            else:
                USERS_CHAT[data["user"]]["entry_text"].set_sensitive(False)

    def update_users_list(self, nick):
        for user in self.user_liststore:
            if user[0] == nick:
                self.user_liststore.remove(user.iter)
                return
        self.user_liststore.append([nick, "Online"])

    def get_user_win_prv_title(self, notebook, page, page_num):
        self.selected_prv_chat = notebook.get_tab_label(page).get_children()
        self.selected_prv_chat = self.selected_prv_chat[0].get_text()
        self.barnamy_private_win.set_title(
            "CONNECTED AS [%s] ### PRIVATE CHAT WITH [%s]" % (self.BarnamyBase.nick, self.selected_prv_chat)
        )

    def on_user_list_button_press_event(self, treeview, event):
        if event.button == 3:
            x = int(event.x)
            y = int(event.y)
            time = event.time
            pthinfo = treeview.get_path_at_pos(x, y)
            if pthinfo is not None:
                path, col, cellx, celly = pthinfo
                treeview.grab_focus()
                treeview.set_cursor(path, col, 0)

                self.menu.popup(None, None, None, None, event.button, time)
            return True