Changeset 374 for trunk/plugins

Show
Ignore:
Timestamp:
01/20/05 13:09:26 (4 years ago)
Author:
asterix
Message:

emoticon binder : we can assotiate string to images
bindings are saved in config file

Location:
trunk/plugins/gtkgui
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/plugins/gtkgui/config.py

    r372 r374  
    265265                        del self.plugin.config['msg%i' % i] 
    266266                        i += 1 
     267                #Emoticons 
     268                model = self.emot_tree.get_model() 
     269                iter = model.get_iter_first() 
     270                emots = [] 
     271                while iter: 
     272                        emots.append(model.get_value(iter, 0)) 
     273                        emots.append(model.get_value(iter, 1)) 
     274                        iter = model.iter_next(iter) 
     275                self.plugin.config['emoticons'] = string.join(emots, '\t') 
    267276                #trayicon 
    268277                if self.chk_trayicon.get_active(): 
     
    320329                        i += 1 
    321330 
     331        def image_is_ok(self, image): 
     332                if not os.path.exists(image): 
     333                        return 0 
     334                img = gtk.Image() 
     335                try: 
     336                        img.set_from_file(image) 
     337                except: 
     338                        return 0 
     339                if img.get_storage_type() == gtk.IMAGE_PIXBUF: 
     340                        pix = img.get_pixbuf() 
     341                else: 
     342                        return 0 
     343                if pix.get_width() > 24 or pix.get_height() > 24: 
     344                        return 0 
     345                return 1 
     346 
     347        def load_emots(self): 
     348                emots = {} 
     349                split_line = string.split(self.plugin.config['emoticons'], '\t') 
     350                for i in range(0, len(split_line)/2): 
     351                        if not self.image_is_ok(split_line[2*i+1]): 
     352                                continue 
     353                        emots[split_line[2*i]] = split_line[2*i+1] 
     354                return emots 
     355 
     356        def fill_emot_treeview(self): 
     357                model = self.emot_tree.get_model() 
     358                model.clear() 
     359                emots = self.load_emots() 
     360                for i in emots: 
     361                        iter = model.append() 
     362                        model.set(iter, 0, i, 1,emots[i]) 
     363 
    322364        def on_msg_cell_edited(self, cell, row, new_text): 
    323365                model = self.msg_tree.get_model() 
     366                iter = model.get_iter_from_string(row) 
     367                model.set_value(iter, 0, new_text) 
     368 
     369        def on_emot_cell_edited(self, cell, row, new_text): 
     370                model = self.emot_tree.get_model() 
    324371                iter = model.get_iter_from_string(row) 
    325372                model.set_value(iter, 0, new_text) 
     
    338385                model.set(iter, 0, 'msg', 1, 'message') 
    339386 
     387        def on_button_emoticons_clicked(self, widget, data=None): 
     388                (model, iter) = self.emot_tree.get_selection().get_selected() 
     389                if not iter: 
     390                        return 
     391                file = model.get_value(iter, 1) 
     392                dialog = gtk.FileChooserDialog("Choose image", 
     393                                                        None, 
     394                                                        gtk.FILE_CHOOSER_ACTION_OPEN, 
     395                                                        (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, 
     396                                                        gtk.STOCK_OPEN, gtk.RESPONSE_OK)) 
     397                dialog.set_default_response(gtk.RESPONSE_OK) 
     398                filter = gtk.FileFilter() 
     399                filter.set_name("All files") 
     400                filter.add_pattern("*") 
     401                dialog.add_filter(filter) 
     402 
     403                filter = gtk.FileFilter() 
     404                filter.set_name("Images") 
     405                filter.add_mime_type("image/png") 
     406                filter.add_mime_type("image/jpeg") 
     407                filter.add_mime_type("image/gif") 
     408                filter.add_pattern("*.png") 
     409                filter.add_pattern("*.jpg") 
     410                filter.add_pattern("*.gif") 
     411                filter.add_pattern("*.tif") 
     412                filter.add_pattern("*.xpm") 
     413                dialog.add_filter(filter) 
     414                dialog.set_filter(filter) 
     415 
     416                file = os.path.join(os.getcwd(), file) 
     417                dialog.set_filename(file) 
     418                file = ''        
     419                ok = 0 
     420                while(ok == 0): 
     421                        response = dialog.run() 
     422                        if response == gtk.RESPONSE_OK: 
     423                                file = dialog.get_filename() 
     424                                if self.image_is_ok(file): 
     425                                        ok = 1 
     426                        else: 
     427                                ok = 1 
     428                dialog.destroy() 
     429                if file: 
     430                        self.xml.get_widget('entry_emoticons').set_text(file) 
     431                        self.xml.get_widget('image_emoticon').set_from_file(file) 
     432                        model.set_value(iter, 1, file) 
     433                         
    340434        def on_delete_msg_button_clicked(self, widget, data=None): 
    341435                (model, iter) = self.msg_tree.get_selection().get_selected() 
     
    344438                buf.set_text('') 
    345439                self.xml.get_widget('delete_msg_button').set_sensitive(False) 
     440                         
     441        def on_button_new_emoticon_clicked(self, widget, data=None): 
     442                model = self.emot_tree.get_model() 
     443                iter = model.append() 
     444                model.set(iter, 0, 'smeiley', 1, '') 
     445 
     446        def on_button_remove_emoticon_clicked(self, widget, data=None): 
     447                (model, iter) = self.emot_tree.get_selection().get_selected() 
     448                if not iter: 
     449                        return 
     450                model.remove(iter) 
    346451 
    347452        def on_msg_textview_changed(self, widget, data=None): 
     
    354459                model.set_value(iter, 1, buf.get_text(first_iter, end_iter)) 
    355460         
     461        def on_treeview_emoticons_cursor_changed(self, widget, data=None): 
     462                (model, iter) = self.emot_tree.get_selection().get_selected() 
     463                if not iter: 
     464                        return 
     465                img_str = model.get_value(iter, 1) 
     466                self.xml.get_widget('entry_emoticons').set_text(img_str) 
     467                self.xml.get_widget('image_emoticon').set_from_file(img_str) 
     468 
    356469        def on_chk_toggled(self, widget, widgets): 
    357470                """set or unset sensitivity of widgets when widget is toggled""" 
     
    414527                st = self.plugin.config['useemoticons'] 
    415528                self.xml.get_widget('use_emoticons_checkbutton').set_active(st) 
     529                self.xml.get_widget('button_new_emoticon').set_sensitive(st) 
     530                self.xml.get_widget('button_remove_emoticon').set_sensitive(st) 
     531                self.xml.get_widget('treeview_emoticons').set_sensitive(st) 
     532                self.xml.get_widget('entry_emoticons').set_sensitive(st) 
     533                self.xml.get_widget('button_emoticons').set_sensitive(st) 
     534                self.xml.get_widget('image_emoticon').set_sensitive(st) 
     535 
     536                #emoticons 
     537                self.emot_tree = self.xml.get_widget('treeview_emoticons') 
     538                model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) 
     539                self.emot_tree.set_model(model) 
     540                col = gtk.TreeViewColumn('name') 
     541                self.emot_tree.append_column(col) 
     542                renderer = gtk.CellRendererText() 
     543                renderer.connect('edited', self.on_emot_cell_edited) 
     544                renderer.set_property('editable', True) 
     545                col.pack_start(renderer, True) 
     546                col.set_attributes(renderer, text=0) 
     547                self.fill_emot_treeview() 
    416548                 
    417549                #Autopopup 
     
    511643                self.xml.signal_connect('on_msg_treeview_cursor_changed', \ 
    512644                        self.on_msg_treeview_cursor_changed) 
     645                self.xml.signal_connect('on_treeview_emoticons_cursor_changed', \ 
     646                        self.on_treeview_emoticons_cursor_changed) 
     647                self.xml.signal_connect('on_button_emoticons_clicked', \ 
     648                        self.on_button_emoticons_clicked) 
    513649                self.xml.signal_connect('on_new_msg_button_clicked', \ 
    514650                        self.on_new_msg_button_clicked) 
    515651                self.xml.signal_connect('on_delete_msg_button_clicked', \ 
    516652                        self.on_delete_msg_button_clicked) 
     653                self.xml.signal_connect('on_button_new_emoticon_clicked', \ 
     654                        self.on_button_new_emoticon_clicked) 
     655                self.xml.signal_connect('on_button_remove_emoticon_clicked', \ 
     656                        self.on_button_remove_emoticon_clicked) 
    517657                self.xml.signal_connect('on_chk_autopopup_toggled', \ 
    518658                        self.on_chk_toggled, [self.chk_autoppaway]) 
     
    521661                self.xml.signal_connect('on_chk_autoxa_toggled', \ 
    522662                        self.on_chk_toggled, [self.spin_autoxatime]) 
     663                self.xml.signal_connect('on_use_emoticons_checkbutton_toggled', \ 
     664                        self.on_chk_toggled, [self.xml.get_widget('button_new_emoticon'), 
     665                                        self.xml.get_widget('button_remove_emoticon'), 
     666                                        self.xml.get_widget('treeview_emoticons'), 
     667                                        self.xml.get_widget('entry_emoticons'), 
     668                                        self.xml.get_widget('button_emoticons'), 
     669                                        self.xml.get_widget('image_emoticon')]) 
    523670                self.xml.signal_connect('on_lookfeel_button_clicked', \ 
    524671                        self.on_lookfeel_button_clicked) 
  • trunk/plugins/gtkgui/gtkgui.glade

    r372 r374  
    41824182              <child> 
    41834183                <widget class="GtkVBox" id="vbox47"> 
     4184                  <property name="border_width">5</property> 
    41844185                  <property name="visible">True</property> 
    41854186                  <property name="homogeneous">False</property> 
     
    41974198                      <property name="inconsistent">False</property> 
    41984199                      <property name="draw_indicator">True</property> 
     4200                      <signal name="toggled" handler="on_use_emoticons_checkbutton_toggled" last_modification_time="Wed, 19 Jan 2005 23:02:04 GMT"/> 
    41994201                    </widget> 
    42004202                    <packing> 
     
    42114213                <packing> 
    42124214                  <property name="padding">0</property> 
    4213                   <property name="expand">True</property> 
     4215                  <property name="expand">False</property> 
    42144216                  <property name="fill">True</property> 
    42154217                </packing> 
     
    42284230 
    42294231              <child> 
    4230                 <placeholder/> 
     4232                <widget class="GtkHBox" id="hbox2903"> 
     4233                  <property name="border_width">5</property> 
     4234                  <property name="visible">True</property> 
     4235                  <property name="homogeneous">False</property> 
     4236                  <property name="spacing">0</property> 
     4237 
     4238                  <child> 
     4239                    <widget class="GtkVBox" id="vbox49"> 
     4240                      <property name="visible">True</property> 
     4241                      <property name="homogeneous">False</property> 
     4242                      <property name="spacing">5</property> 
     4243 
     4244                      <child> 
     4245                        <widget class="GtkButton" id="button_new_emoticon"> 
     4246                          <property name="visible">True</property> 
     4247                          <property name="can_focus">True</property> 
     4248                          <property name="label">gtk-add</property> 
     4249                          <property name="use_stock">True</property> 
     4250                          <property name="relief">GTK_RELIEF_NORMAL</property> 
     4251                          <property name="focus_on_click">True</property> 
     4252                          <signal name="clicked" handler="on_button_new_emoticon_clicked" last_modification_time="Wed, 19 Jan 2005 22:25:07 GMT"/> 
     4253                        </widget> 
     4254                        <packing> 
     4255                          <property name="padding">0</property> 
     4256                          <property name="expand">False</property> 
     4257                          <property name="fill">False</property> 
     4258                        </packing> 
     4259                      </child> 
     4260 
     4261                      <child> 
     4262                        <widget class="GtkButton" id="button_remove_emoticon"> 
     4263                          <property name="visible">True</property> 
     4264                          <property name="can_focus">True</property> 
     4265                          <property name="label">gtk-remove</property> 
     4266                          <property name="use_stock">True</property> 
     4267                          <property name="relief">GTK_RELIEF_NORMAL</property> 
     4268                          <property name="focus_on_click">True</property> 
     4269                          <signal name="clicked" handler="on_button_remove_emoticon_clicked" last_modification_time="Wed, 19 Jan 2005 22:57:48 GMT"/> 
     4270                        </widget> 
     4271                        <packing> 
     4272                          <property name="padding">0</property> 
     4273                          <property name="expand">False</property> 
     4274                          <property name="fill">False</property> 
     4275                        </packing> 
     4276                      </child> 
     4277 
     4278                      <child> 
     4279                        <widget class="GtkScrolledWindow" id="scrolledwindow25"> 
     4280                          <property name="visible">True</property> 
     4281                          <property name="can_focus">True</property> 
     4282                          <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
     4283                          <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property> 
     4284                          <property name="shadow_type">GTK_SHADOW_IN</property> 
     4285                          <property name="window_placement">GTK_CORNER_TOP_LEFT</property> 
     4286 
     4287                          <child> 
     4288                            <widget class="GtkTreeView" id="treeview_emoticons"> 
     4289                              <property name="visible">True</property> 
     4290                              <property name="can_focus">True</property> 
     4291                              <property name="headers_visible">False</property> 
     4292                              <property name="rules_hint">False</property> 
     4293                              <property name="reorderable">False</property> 
     4294                              <property name="enable_search">True</property> 
     4295                              <signal name="cursor_changed" handler="on_treeview_emoticons_cursor_changed" last_modification_time="Tue, 18 Jan 2005 22:12:10 GMT"/> 
     4296                            </widget> 
     4297                          </child> 
     4298                        </widget> 
     4299                        <packing> 
     4300                          <property name="padding">0</property> 
     4301                          <property name="expand">True</property> 
     4302                          <property name="fill">True</property> 
     4303                        </packing> 
     4304                      </child> 
     4305                    </widget> 
     4306                    <packing> 
     4307                      <property name="padding">0</property> 
     4308                      <property name="expand">True</property> 
     4309                      <property name="fill">True</property> 
     4310                    </packing> 
     4311                  </child> 
     4312 
     4313                  <child> 
     4314                    <widget class="GtkVBox" id="vbox48"> 
     4315                      <property name="border_width">5</property> 
     4316                      <property name="visible">True</property> 
     4317                      <property name="homogeneous">False</property> 
     4318                      <property name="spacing">5</property> 
     4319 
     4320                      <child> 
     4321                        <widget class="GtkHBox" id="hbox2904"> 
     4322                          <property name="visible">True</property> 
     4323                          <property name="homogeneous">False</property> 
     4324                          <property name="spacing">5</property> 
     4325 
     4326                          <child> 
     4327                            <widget class="GtkEntry" id="entry_emoticons"> 
     4328                              <property name="visible">True</property> 
     4329                              <property name="can_focus">True</property> 
     4330                              <property name="editable">False</property> 
     4331                              <property name="visibility">True</property> 
     4332                              <property name="max_length">0</property> 
     4333                              <property name="text" translatable="yes"></property> 
     4334                              <property name="has_frame">True</property> 
     4335                              <property name="invisible_char">*</property> 
     4336                              <property name="activates_default">False</property> 
     4337                            </widget> 
     4338                            <packing> 
     4339                              <property name="padding">0</property> 
     4340                              <property name="expand">True</property> 
     4341                              <property name="fill">True</property> 
     4342                            </packing> 
     4343                          </child> 
     4344 
     4345                          <child> 
     4346                            <widget class="GtkButton" id="button_emoticons"> 
     4347                              <property name="visible">True</property> 
     4348                              <property name="can_focus">True</property> 
     4349                              <property name="label" translatable="yes">...</property> 
     4350                              <property name="use_underline">True</property> 
     4351                              <property name="relief">GTK_RELIEF_NORMAL</property> 
     4352                              <property name="focus_on_click">True</property> 
     4353                              <signal name="clicked" handler="on_button_emoticons_clicked" last_modification_time="Wed, 19 Jan 2005 20:47:01 GMT"/> 
     4354                            </widget> 
     4355                            <packing> 
     4356                              <property name="padding">0</property> 
     4357                              <property name="expand">False</property> 
     4358                              <property name="fill">False</property> 
     4359                              <property name="pack_type">GTK_PACK_END</property> 
     4360                            </packing> 
     4361                          </child> 
     4362                        </widget> 
     4363                        <packing> 
     4364                          <property name="padding">0</property> 
     4365                          <property name="expand">False</property> 
     4366                          <property name="fill">True</property> 
     4367                        </packing> 
     4368                      </child> 
     4369 
     4370                      <child> 
     4371                        <widget class="GtkImage" id="image_emoticon"> 
     4372                          <property name="visible">True</property> 
     4373                          <property name="xalign">0.5</property> 
     4374                          <property name="yalign">0.5</property> 
     4375                          <property name="xpad">0</property> 
     4376                          <property name="ypad">0</property> 
     4377                        </widget> 
     4378                        <packing> 
     4379                          <property name="padding">0</property> 
     4380                          <property name="expand">True</property> 
     4381                          <property name="fill">True</property> 
     4382                        </packing> 
     4383                      </child> 
     4384                    </widget> 
     4385                    <packing> 
     4386                      <property name="padding">0</property> 
     4387                      <property name="expand">True</property> 
     4388                      <property name="fill">True</property> 
     4389                    </packing> 
     4390                  </child> 
     4391                </widget> 
     4392                <packing> 
     4393                  <property name="padding">0</property> 
     4394                  <property name="expand">True</property> 
     4395                  <property name="fill">True</property> 
     4396                </packing> 
    42314397              </child> 
    42324398            </widget> 
  • trunk/plugins/gtkgui/gtkgui.py

    r373 r374  
    17351735                                browseAgent_Window(self.plugin, account) 
    17361736 
     1737        def image_is_ok(self, image): 
     1738                if not os.path.exists(image): 
     1739                        return 0 
     1740                img = gtk.Image() 
     1741                try: 
     1742                        img.set_from_file(image) 
     1743                except: 
     1744                        return 0 
     1745                if img.get_storage_type() == gtk.IMAGE_PIXBUF: 
     1746                        pix = img.get_pixbuf() 
     1747                else: 
     1748                        return 0 
     1749                if pix.get_width() > 24 or pix.get_height() > 24: 
     1750                        return 0 
     1751                return 1 
     1752 
    17371753        def mkemoticons(self): 
    17381754                """initialize emoticons array""" 
    1739                 emots = {':-)' : 'smile.png', 
    1740                                         ':)' : 'smile.png', 
    1741                                         ';-)' : 'wink.png', 
    1742                                         ';)' : 'wink.png', 
    1743                                         ':-p' : 'tongue.png', 
    1744                                         ':-P' : 'tongue.png', 
    1745                                         ':p' : 'tongue.png', 
    1746                                         ':P' : 'tongue.png', 
    1747                                         ':d' : 'biggrin.png', 
    1748                                         ':D' : 'biggrin.png', 
    1749                                         ':-d' : 'biggrin.png', 
    1750                                         ':-D' : 'biggrin.png', 
    1751                                         ':>' : 'biggrin.png', 
    1752                                         ':->' : 'biggrin.png', 
    1753                                         ':(' : 'unhappy.png', 
    1754                                         ':-(' : 'unhappy.png', 
    1755                                         ';(' : 'cry.png', 
    1756                                         ';-(' : 'cry.png', 
    1757                                         ':\'(' : 'cry.png', 
    1758                                         ';\'-(' : 'cry.png', 
    1759                                         ':-O' : 'oh.png', 
    1760                                         ':-o' : 'oh.png', 
    1761                                         ':O' : 'oh.png', 
    1762                                         ':o' : 'oh.png', 
    1763                                         ':-@' : 'angry.png', 
    1764                                         ':@' : 'angry.png', 
    1765                                         ':-$' : 'blush.png', 
    1766                                         ':$' : 'blush.png', 
    1767                                         ':-|' : 'stare.png', 
    1768                                         ':|' : 'stare.png', 
    1769                                         ':-S' : 'frowing.png', 
    1770                                         ':-s' : 'frowing.png', 
    1771                                         ':S' : 'frowing.png', 
    1772                                         ':s' : 'frowing.png', 
    1773                                         'B-)' : 'coolglasses.png', 
    1774                                         'B)' : 'coolglasses.png', 
    1775                                         '8-)' : 'coolglasses.png', 
    1776                                         '8)' : 'coolglasses.png', 
    1777                                         '(H)' : 'coolglasses.png', 
    1778                                         '(h)' : 'coolglasses.png', 
    1779                                         ':-[' : 'bat.png', 
    1780                                         ':[' : 'bat.png', 
    1781                                         '(l)' : 'heart.png', 
    1782                                         '(L)' : 'heart.png', 
    1783                                         '(u)' : 'brheart.png', 
    1784                                         '(U)' : 'brheart.png', 
    1785                                         '(y)' : 'yes.png', 
    1786                                         '(Y)' : 'yes.png', 
    1787                                         '(n)' : 'no.png', 
    1788                                         '(N)' : 'no.png', 
    1789                                         '(z)' : 'boy.png', 
    1790                                         '(Z)' : 'boy.png', 
    1791                                         '(@)' : 'pussy.png', 
    1792                                         '(})' : 'hugleft.png', 
    1793                                         '({)' : 'hugright.png', 
    1794                                         '(6)' : 'devil.png', 
    1795                                         '(r)' : 'rainbow.png', 
    1796                                         '(R)' : 'rainbow.png', 
    1797                                         '(w)' : 'brflower.png', 
    1798                                         '(W)' : 'brflower.png', 
    1799                                         '(f)' : 'flower.png', 
    1800                                         '(F)' : 'flower.png', 
    1801                                         '(p)' : 'photo.png', 
    1802                                         '(P)' : 'photo.png', 
    1803                                         '(t)' : 'phone.png', 
    1804                                         '(T)' : 'phone.png', 
    1805                                         '(*)' : 'star.png', 
    1806                                         '(8)' : 'music.png', 
    1807                                         '(i)' : 'lamp.png', 
    1808                                         '(I)' : 'lamp.png', 
    1809                                         '(b)' : 'beer.png', 
    1810                                         '(B)' : 'beer.png', 
    1811                                         '(d)' : 'drink.png', 
    1812                                         '(D)' : 'drink.png', 
    1813                                         '(c)' : 'coffee.png', 
    1814                                         '(C)' : 'coffee.png', 
    1815                                         '(%)' : 'cuffs.png', 
    1816                                         '(e)' : 'mail.png', 
    1817                                         '(E)' : 'mail.png', 
    1818                                         '(k)' : 'kiss.png', 
    1819                                         '(K)' : 'kiss.png' 
    1820                                         } 
    1821                 path = 'plugins/gtkgui/emoticons/' 
    18221755                self.emoticons = {} 
    18231756                self.begin_emot = "" 
    1824                 for e in emots: 
    1825                         file = path + emots[e] 
    1826                         if not os.path.exists(file): 
     1757                split_line = string.split(self.plugin.config['emoticons'], '\t') 
     1758                for i in range(0, len(split_line)/2): 
     1759                        file = split_line[2*i+1] 
     1760                        if not self.image_is_ok(file): 
    18271761                                continue 
    18281762                        pix = gtk.gdk.pixbuf_new_from_file(file) 
    1829                         self.emoticons[e] = pix 
    1830                         if not e[0] in self.begin_emot: 
    1831                                 self.begin_emot += e[0] 
     1763                        self.emoticons[split_line[2*i]] = pix 
     1764                        if not split_line[2*i][0] in self.begin_emot: 
     1765                                self.begin_emot += split_line[2*i][0] 
    18321766 
    18331767        def mkpixbufs(self): 
     
    26932627                        'mergeaccounts': 0,\ 
    26942628                        'useemoticons': 1,\ 
     2629                        'emoticons':':-)\tplugins/gtkgui/emoticons/smile.png\t(@)\tplugins/gtkgui/emoticons/pussy.png\t8)\tplugins/gtkgui/emoticons/coolglasses.png\t:(\tplugins/gtkgui/emoticons/unhappy.png\t:)\tplugins/gtkgui/emoticons/smile.png\t(})\tplugins/gtkgui/emoticons/hugleft.png\t:$\tplugins/gtkgui/emoticons/blush.png\t(Y)\tplugins/gtkgui/emoticons/yes.png\t:-@\tplugins/gtkgui/emoticons/angry.png\t:-D\tplugins/gtkgui/emoticons/biggrin.png\t(U)\tplugins/gtkgui/emoticons/brheart.png\t(F)\tplugins/gtkgui/emoticons/flower.png\t:-[\tplu