Changeset 402

Show
Ignore:
Timestamp:
01/09/07 20:44:45 (20 months ago)
Author:
daelstorm
Message:

Murmur: Username colors and popup menus in chat rooms, and just username colors in private chat

Location:
murmur/trunk/sources
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • murmur/trunk/sources/murmur

    r401 r402  
    971971                        self.frame.ChatRooms.roomsmaster.GetUserStatus( user, status) 
    972972                        self.frame.userlists.updateStatus(user, status) 
     973                        self.frame.PrivateChats.updateStatus(user, status) 
    973974                         
    974975                except Exception,e: 
     
    20972098                self.frame = chats.frame 
    20982099                self.user = user 
    2099          
     2100                self.Status = 0 
    21002101                self.Main = gtk.VBox(False, 0) 
    21012102                self.Main.show() 
     
    21852186        def UpdateColours(self): 
    21862187                def makecolour(buffer, colour): 
    2187                         colour = self.frame.Config["colors"][colour] 
     2188                        if self.frame.Config["colors"].has_key(colour): 
     2189                                colour = self.frame.Config["colors"][colour] 
     2190                        else: 
     2191                                colour = "#AAFF00" 
    21882192                        font = self.frame.Config["colors"]["chatfont"] 
     2193                         
    21892194                        if colour: 
    21902195                                return buffer.create_tag(foreground = colour, font=font) 
     
    21982203                self.tag_me = makecolour(buffer, "chatme") 
    21992204                self.tag_hilite = makecolour(buffer, "chathilite") 
    2200  
     2205                 
     2206                if self.frame.user_stats.has_key(self.user): 
     2207                        status = self.frame.user_stats[self.user][0] 
     2208                        if status == 1: 
     2209                                color = "useraway" 
     2210                        elif status == 2: 
     2211                                color = "useronline" 
     2212                        else: 
     2213                                color = "useroffline" 
     2214                else: 
     2215                        color = "useroffline" 
     2216                self.tag_username = makecolour(buffer, color) 
     2217 
     2218                 
     2219        def changecolour(self, tag, colour): 
     2220                if self.frame.Config["colors"].has_key(colour): 
     2221                        colour = self.frame.Config["colors"][colour] 
     2222                else: 
     2223                        colour = "" 
     2224                font = self.frame.Config["colors"]["chatfont"] 
     2225                 
     2226                if colour: 
     2227                        tag.set_property("foreground", colour) 
     2228                        tag.set_property("font", font) 
     2229                else: 
     2230                        tag.set_property("font", font) 
     2231                         
     2232        def ChangeColours(self): 
     2233                 
     2234                                 
     2235                self.changecolour(self.tag_remote, "chatremote") 
     2236                self.changecolour(self.tag_local, "chatlocal") 
     2237                self.changecolour(self.tag_me, "chatme") 
     2238                self.changecolour(self.tag_hilite, "chathilite") 
     2239                self.changecolour(self.tag_username, color) 
     2240                self.setStatus() 
     2241                 
     2242        def setStatus(self): 
     2243                 
     2244                if self.frame.user_stats.has_key(self.user): 
     2245 
     2246                        if self.Status == self.frame.user_stats[self.user][0]: 
     2247                                return 
     2248                        self.Status = self.frame.user_stats[self.user][0] 
     2249                        if self.Status == 1: 
     2250                                color = "useraway" 
     2251                        elif self.Status == 2: 
     2252                                color = "useronline" 
     2253                        else: 
     2254                                color = "useroffline" 
     2255                else: 
     2256                        color = "useroffline" 
     2257                        self.Status = 0 
     2258 
     2259                self.changecolour(self.tag_username, color) 
     2260                 
    22012261        def OnClose(self, widget): 
    22022262                #if self.logfile is not None: 
     
    22262286                        line = "[%s] %s" % (username, text) 
    22272287                self.frame.RequestIcon(self.frame.PrivateChatLabel) 
    2228                 AppendLine(self.ChatScroll, line, tag, "%c") 
     2288                AppendLine(self.ChatScroll, line, tag, "%c", username=self.user, usertag=self.tag_username) 
     2289                #if self.z: 
     2290                        #self.z = 0 
     2291                        #self.tag_username.set_property("foreground", "#00FF00") 
     2292                #else: 
     2293                        #self.z = 1 
     2294                        #self.tag_username.set_property("foreground", "#FF0000") 
    22292295                #if self.Log.get_active(): 
    22302296                        #self.logfile = WriteLog(self.logfile, self.frame.np.config.sections["logging"]["logsdir"], self.user, line) 
     
    22482314                        tag = self.tag_local 
    22492315                         
    2250                 AppendLine(self.ChatScroll, line, tag, "%c") 
     2316                AppendLine(self.ChatScroll, line, tag, "%c", username=self.user, usertag= self.tag_username) 
    22512317                #if self.Log.get_active(): 
    22522318                        #self.logfile = WriteLog(self.logfile, self.frame.np.config.sections["logging"]["logsdir"], self.user, line) 
     
    24842550                                gobject.idle_add(tab.ChatLine.grab_focus) 
    24852551                                break 
    2486  
    2487                  
     2552                         
     2553        def updateStatus(self, user, status): 
     2554                if self.users.has_key(user): 
     2555                        gobject.idle_add(self.users[user].setStatus) 
     2556                         
    24882557        def RemoveTab(self, tab): 
    24892558                self.remove_page(self.page_num(tab.Main) ) 
     
    30333102                self.chatEntry.grab_focus() 
    30343103                self.vbox.set_focus_child(self.chatEntry) 
     3104                 
     3105                self.UpdateColours() 
    30353106 
    30363107        def autojoin_check(self, widget, string): 
     
    30973168                "/rescan", "/tick", "/nsa", "/info"] 
    30983169                #"/rem ", "/cl", "/t", "/a", "/q", "/l", "/p", "/bs", "/rs", "/us", "/s", "/m", "/w", "/al", "/un", "/w" 
     3170                 
    30993171        def SayInChatRoom(self, user, line): 
    31003172                if len(self.lines) >= 400: 
     
    31213193                 
    31223194                        message = "\n-- ".join(message.split("\n")) 
    3123          
    3124                         self.lines.append(AppendLine(self.chatview, message, None)) 
     3195 
     3196                        self.lines.append(AppendLine(self.chatview, message, None, username=user, usertag=self.tag_users[user])) 
     3197                         
    31253198                #if self.Log.get_active(): 
    31263199                        #self.logfile = WriteLog(self.logfile, self.frame.np.config.sections["logging"]["logsdir"], self.room, line) 
     
    31673240                iter = self.usersmodel.append([img, username, hfiles, hspeed, status]) 
    31683241                self.users[username] = iter 
     3242                color = self.getUserStatusColor(status) 
     3243                if username in self.tag_users.keys(): 
     3244                        self.changecolour(self.tag_users[username], color) 
     3245                else: 
     3246                        self.tag_users[username] = self.makecolour(self.chatview.get_buffer(), color, username=username) 
    31693247         
    31703248        def UserLeftRoom(self, username): 
     
    31743252                self.usersmodel.remove(self.users[username]) 
    31753253                del self.users[username] 
     3254                if username in self.tag_users.keys(): 
     3255                        color = self.getUserStatusColor(-1) 
     3256                        self.changecolour(self.tag_users[username], color) 
    31763257                 
    31773258        def GetListStatus(self, user): 
     
    31913272                                action = _("%s has returned") 
    31923273                        AppendLine(self.RoomLog, action % user, None) 
    3193          
     3274                        if user in self.tag_users.keys(): 
     3275                                color = self.getUserStatusColor(status) 
     3276                                self.changecolour(self.tag_users[user], color) 
    31943277                        self.usersmodel.set(self.users[user], 0, img, 4, status) 
    31953278 
     3279        def makecolour(self, buffer, colour, username=None): 
     3280                colour = self.frame.Config["colors"][colour] 
     3281                font =  self.frame.Config["colors"]["chatfont"] 
     3282                if colour: 
     3283                        tag = buffer.create_tag(foreground = colour, font=font) 
     3284                else: 
     3285                        tag = buffer.create_tag( font=font) 
     3286                if username is not None: 
     3287 
     3288                        #tag.set_property("underline", pango.UNDERLINE_SINGLE) 
     3289                        tag.set_property("weight",  pango.WEIGHT_BOLD) 
     3290                        tag.connect("event", self.UserNameEvent, username) 
     3291                        tag.last_event_type = -1 
     3292                        #tag = buffer.create_tag( font=font) 
     3293                return tag 
     3294                 
     3295        def UserNameEvent(self, tag, widget, event, iter, user): 
     3296                if tag.last_event_type == gtk.gdk.BUTTON_PRESS and event.type == gtk.gdk.BUTTON_RELEASE and event.button == 1: 
     3297                        if user in self.users.keys(): 
     3298                                self.popup_menu.set_user(user) 
     3299                                items = self.popup_menu.get_children() 
     3300                                # Chat, Userlists use the normal popup system 
     3301                                num = 5 
     3302                                items[num].set_active(self.frame.Networking.config["buddies"].has_key(user)) 
     3303                                items[num+1].set_active(self.frame.Networking.config["banned"].has_key(user)) 
     3304                                items[num+2].set_active(self.frame.Networking.config["ignored"].has_key(user)) 
     3305                                items[num+3].set_active(self.frame.Networking.config["trusted"].has_key(user)) 
     3306                                self.popup_menu.popup(None, None, None, event.button, event.time) 
     3307                tag.last_event_type = event.type 
     3308        def UpdateColours(self): 
     3309                 
     3310                                 
     3311                buffer = self.chatview.get_buffer() 
     3312                self.tag_remote = self.makecolour(buffer, "chatremote") 
     3313                self.tag_local = self.makecolour(buffer, "chatlocal") 
     3314                self.tag_me = self.makecolour(buffer, "chatme") 
     3315                self.tag_hilite = self.makecolour(buffer, "chathilite") 
     3316                self.tag_users = {} 
     3317                for user in self.users: 
     3318                        status = self.usersmodel.get_value(self.users[user], 4) 
     3319                        color = self.getUserStatusColor(status) 
     3320                        self.tag_users[user] = self.makecolour(buffer, color, user) 
     3321 
     3322                buffer = self.RoomLog.get_buffer() 
     3323                self.tag_log = self.makecolour(buffer, "chatremote") 
     3324                 
     3325        def getUserStatusColor(self, status): 
     3326                if status == 1: 
     3327                        color = "useraway" 
     3328                elif status == 2: 
     3329                        color = "useronline" 
     3330                else: 
     3331                        color = "useroffline" 
     3332                return color 
     3333         
     3334        def changecolour(self, tag, colour): 
     3335                if self.frame.Config["colors"].has_key(colour): 
     3336                        color = self.frame.Config["colors"][colour] 
     3337                else: 
     3338                        color = "" 
     3339                font = self.frame.Config["colors"]["chatfont"] 
     3340                 
     3341                if color: 
     3342                        tag.set_property("foreground", color) 
     3343                        tag.set_property("font", font) 
     3344                        if colour in ["useraway", "useronline", "useroffline"]: 
     3345                                tag.set_property("weight",  pango.WEIGHT_BOLD) 
     3346                else: 
     3347                        tag.set_property("font", font) 
     3348                         
     3349        def ChangeColours(self): 
     3350                 
     3351                                 
     3352                self.changecolour(self.tag_remote, "chatremote") 
     3353                self.changecolour(self.tag_local, "chatlocal") 
     3354                self.changecolour(self.tag_me, "chatme") 
     3355                self.changecolour(self.tag_hilite, "chathilite") 
     3356                self.changecolour(self.tag_username, color) 
     3357                self.setStatus() 
     3358                 
    31963359        def OnPopupMenuRoom(self, widget, event, string, string2): 
    31973360                if event.button != 3: 
    31983361                        return 
    31993362                items = self.popup_menu.get_children() 
    3200                 if DEBUG == True: print string 
     3363                #if DEBUG == True: print string 
    32013364                # Chat, Userlists use the normal popup system 
    32023365                num = 5 
     
    33443507 
    33453508                self.frame.notebook_roomlist.add(self.Main) 
    3346  
     3509                 
    33473510                 
    33483511        def EnterRoom(self, widget, event): 
     
    37783941                for w in [ self.buddies, self.trusted, self.banned, self.ignored ]: 
    37793942                        gobject.idle_add(w.updateStatus, user, status) 
     3943                         
    37803944        def updateListIcon(self, user): 
    37813945                for w in [ self.buddies, self.trusted, self.banned, self.ignored ]: 
     
    47414905                        "now-playing-prefix": None, "browse_display_mode": "filesystem", \ 
    47424906                        "url reader": "firefox", "url custom prefix": ""}, \ 
    4743                         "colors": { "chatme":"FOREST GREEN", "chatremote":"","chatlocal":"BLUE", \ 
     4907                        "colors": { "chatme":"FOREST GREEN", "chatremote":"", "useronline":"BLACK", "useraway":"ORANGE","useroffline":"#aa0000", "chatlocal":"BLUE", \ 
    47444908                        "chathilite":"red", "search":"","searchq":"GREY", "chatfont": "" },\ 
    47454909                        "logging": { "logcollapsed": "no", "log_dir": "~/.murmur/logs/", "logrooms":  
  • murmur/trunk/sources/pymurmur/utils.py

    r399 r402  
    1717URL_RE = re.compile("(\\w+\\://[\\w\\.].+?)[\\s\\(\\)]|(www\\.\\w+\\.\\w+.*?)[\\s\\(\\)]|(mailto\\:\\w.+?)[\\s\\(\\)]") 
    1818PROTOCOL_HANDLERS = {} 
    19 CATCH_URLS = 0 
     19CATCH_URLS = 1 
    2020HUMANIZE_URLS = 0 
    2121         
     
    9898        tag.last_event_type = event.type 
    9999 
    100 def AppendLine(textview, line, tag = None, timestamp = "%H:%M:%S"): 
     100def AppendLine(textview, line, tag = None, timestamp = "%H:%M:%S", username=None, usertag=None): 
    101101        def _makeurltag(buffer, tag, url): 
    102102                props = {} 
     
    139139                match = URL_RE.search(line) 
    140140         
     141         
    141142        if line: 
    142                 _append(buffer, line, tag) 
     143                 
     144                if username != None and usertag != None: 
     145                        np = re.compile(username) 
     146                        match = np.search(line) 
     147                        if match != None: 
     148                                start = line[:match.start()] 
     149                                name = match.group()[:] 
     150                                line = line[match.end():] 
     151                                _append(buffer, start, tag) 
     152                                _append(buffer, name, usertag) 
     153                                _append(buffer, line, tag) 
     154                        else: 
     155                                _append(buffer, line, tag) 
     156                else: 
     157                        _append(buffer, line, tag) 
    143158         
    144159        if not hasattr(scrolledwindow, "need_scroll"):