~ubuntu-branches/ubuntu/lucid/exaile/lucid

« back to all changes in this revision

Viewing changes to plugins/moodbar/__init__.py

  • Committer: Bazaar Package Importer
  • Author(s): Andrew Starr-Bochicchio
  • Date: 2010-02-12 19:51:01 UTC
  • mfrom: (1.1.11 upstream)
  • Revision ID: james.westby@ubuntu.com-20100212195101-8jt3tculxcl92e6v
Tags: 0.3.1~b1-0ubuntu1
* New upstream release.
* Adjust exaile.install for new plugins.
* debian/control:
 - Drop unneeded python-dev Build-Dep.
 - Bump Standards-Version to 3.8.4 
* debian/rules: No empty po files to delete.

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the free software
16
16
# foundation, inc., 675 mass ave, cambridge, ma 02139, usa.
17
17
 
18
 
 
19
 
import cgi, gtk, gobject, os, os.path, subprocess
20
 
from xl import event, xdg
 
18
import moodbarprefs
 
19
import cgi, gtk, gobject, os, os.path, subprocess, colorsys
 
20
import inspect
 
21
from xl import event, xdg, settings
21
22
from xl.nls import gettext as _
 
23
from xlgui.prefs import widgets
 
24
from xl import common
 
25
import moodbarprefs
22
26
 
23
27
import logging
24
28
logger = logging.getLogger(__name__)
25
29
 
26
30
ExaileModbar = None
27
31
 
28
 
class ExModbar:
 
32
class ExModbar(object):
 
33
 
29
34
    #Setup and getting values------------------------------------------------
30
 
    
 
35
 
31
36
    def __init__(self):
32
37
         self.moodbar=''
33
38
         self.buff=''
42
47
         self.runed=False
43
48
         self.pid=0
44
49
         self.uptime=0
45
 
 
 
50
         self.ivalue=0
 
51
         self.qvalue=0
46
52
         self.moodsDir=os.path.join(xdg.get_cache_dir(), "moods")
47
 
         if not os.path.exists(self.moodsDir): 
 
53
         if not os.path.exists(self.moodsDir):
48
54
             os.mkdir(self.moodsDir)
49
55
 
 
56
    def __inner_preference(klass):
 
57
        """functionality copy from notyfication"""
 
58
        def getter(self):
 
59
            return settings.get_option(klass.name, klass.default or None)
 
60
 
 
61
        def setter(self, val):
 
62
            settings.set_option(klass.name, val)
 
63
 
 
64
        return property(getter, setter)
 
65
 
 
66
    defaultstyle = __inner_preference(moodbarprefs.defaultstyle)
 
67
    flat = __inner_preference(moodbarprefs.flat)
 
68
    theme = __inner_preference(moodbarprefs.theme)
 
69
    cursor = __inner_preference(moodbarprefs.cursor)
 
70
 
 
71
    darkness = __inner_preference(moodbarprefs.darkness)
 
72
    color = __inner_preference(moodbarprefs.color)
50
73
    def set_ex(self, ex):
51
74
         self.exaile=ex
52
75
 
55
78
         return progress_loc.width
56
79
 
57
80
    #Setup-------------------------------------------------------------------
58
 
   
 
81
 
59
82
    def changeBarToMod(self):
60
83
         place=self.pr.bar.get_parent()
61
84
         self.mod = gtk.DrawingArea()
78
101
              self.changeBarToMod()
79
102
              self.mod.seeking=False
80
103
              self.mod.connect("expose-event", self.drawMod)
81
 
              self.mod.add_events(gtk.gdk.BUTTON_PRESS_MASK) 
 
104
              self.mod.add_events(gtk.gdk.BUTTON_PRESS_MASK)
82
105
              self.mod.add_events(gtk.gdk.BUTTON_RELEASE_MASK)
83
106
              self.mod.add_events(gtk.gdk.POINTER_MOTION_MASK)
84
 
              self.mod.connect("button-press-event", self.modSeekBegin) 
 
107
              self.mod.connect("button-press-event", self.modSeekBegin)
85
108
              self.mod.connect("button-release-event", self.modSeekEnd)
86
 
              self.mod.connect("motion-notify-event", self.modSeekMotionNotify) 
 
109
              self.mod.connect("motion-notify-event", self.modSeekMotionNotify)
87
110
              self.brush = self.mod.window.new_gc()
88
 
              
 
111
 
 
112
 
89
113
              track = self.exaile.player.current
90
 
              
 
114
 
91
115
              self.lookformod(track)
92
116
 
93
117
    def destroy(self):
95
119
 
96
120
 
97
121
    #playing ----------------------------------------------------------------
98
 
   
 
122
 
99
123
    def lookformod(self,track):
100
 
         if not track or not track.is_local(): 
 
124
         if not track or not (track.is_local() or track.get_tag_raw('__length')):
 
125
             self.haveMod=False
101
126
             return
102
127
 
103
128
         self.playingTrack=str(track.get_loc())
108
133
         self.curpos=self.exaile.player.get_progress()
109
134
         if os.access(modLoc, 0):
110
135
             self.modwidth=0
111
 
             if not self.readMod(modLoc): 
 
136
             if not self.readMod(modLoc):
112
137
                 needGen=True
113
 
             self.updateplayerpos() 
 
138
             self.updateplayerpos()
114
139
         else: needGen=True
115
140
         if needGen:
116
141
             self.pid = subprocess.Popen(['/usr/bin/moodbar',
117
142
                 self.playingTrack, '-o', modLoc])
118
143
         self.haveMod=not needGen
119
 
       
 
144
 
120
145
         if self.modTimer: gobject.source_remove(self.modTimer)
121
 
         self.modTimer = gobject.timeout_add(1000, self.updateMod)
 
146
         self.modTimer = gobject.timeout_add_seconds(1, self.updateMod)
122
147
 
123
148
 
124
149
    def play_start(self, type, player, track):
135
160
    def updateMod(self):
136
161
         self.updateplayerpos()
137
162
         if not self.haveMod:
138
 
           logger.debug('Searching for mood...')
 
163
           logger.debug(_('Searching for mood...'))
139
164
           modLoc=self.moodsDir+'/'+ self.playingTrack.replace('/','-')+".mood"
140
165
           modLoc=modLoc.replace("'",'')
141
166
           if self.readMod(modLoc):
142
 
              logger.debug("Mood found.")
143
 
              self.haveMod=True 
 
167
              logger.debug(_("Mood found."))
 
168
              self.haveMod=True
144
169
              self.modwidth=0
145
 
         self.modTimer = gobject.timeout_add(1000, self.updateMod)
 
170
         self.modTimer = gobject.timeout_add_seconds(1, self.updateMod)
146
171
 
147
172
    def updateplayerpos(self):
148
173
         if self.modTimer: self.curpos=self.exaile.player.get_progress()
150
175
 
151
176
 
152
177
    #reading mod from file and update mood preview --------------------------
153
 
   
 
178
 
154
179
    def readMod(self, moodLoc):
155
180
       retur=True
156
181
       self.moodbar=''
157
 
       try:  
 
182
       try:
158
183
          if moodLoc=='':
159
 
             for i in range(3000): 
 
184
             for i in range(3000):
160
185
                  self.moodbar=self.moodbar+chr(255)
161
 
             return True 
 
186
             return True
162
187
          else:
163
 
             f=open(moodLoc,'rb')     
 
188
             f=open(moodLoc,'rb')
164
189
             for i in range(3000):
165
190
                 r=f.read(1)
166
191
                 if r=='':
168
193
                      retur=False
169
194
                 self.moodbar=self.moodbar+r
170
195
             f.close()
171
 
             return retur 
172
 
          
173
 
       except: 
174
 
          logger.debug('Could not read moodbar.')
 
196
             return retur
 
197
 
 
198
       except:
 
199
          logger.debug(_('Could not read moodbar.'))
175
200
          self.moodbar=''
176
201
          for i in range(3000):
177
202
              self.moodbar=self.moodbar+chr(0)
181
206
    def genBuff(self):
182
207
        width=self.get_size()
183
208
        self.modwidth=width
184
 
        b=''
 
209
        darkmulti=(1-self.darkness/10)
 
210
 
 
211
        #logger.info(darkmulti)
185
212
        hh=[0.2,0.4,0.7,0.8,0.9,1,1,0.98,0.93,0.85,0.80,0.80,0.80,
186
213
                0.85,0.93,0.98,1,1,0.9,0.8,0.7,0.6,0.4,0.2]
187
214
        #hh=[0.5,0.55,0.6,0.65,0.7,1,0.95,0.92,0.88,0.84,0.80,0.80,
188
 
                #0.80,0.84,0.88,0.92,0.95,1,0.7,0.65,0.6,0.55,0.5,0.45]
 
215
        #0.80,0.84,0.88,0.92,0.95,1,0.7,0.65,0.6,0.55,0.5,0.45]
189
216
        #hh=[0.2,0.4,0.7,0.8,0.9,1,1,1,1,1,1,1,1,1,1,1,1,1,0.9,0.8,
190
 
                # 0.7,0.6,0.4,0.2]
191
 
        for h in range(24):
192
 
             for x in range(width):
193
 
                   for i in range(3):
194
 
                         b=b+chr(int(ord(
195
 
                             self.moodbar[int(x*1000/width)*3+i])*hh[h]))
 
217
        # 0.7,0.6,0.4,0.2]
 
218
        self.defaultstyle_old =self.defaultstyle
 
219
        self.theme_old=self.theme
 
220
        self.flat_old=self.flat
 
221
        self.color_old =self.color
 
222
        self.darkness_old =self.darkness
 
223
        self.cursor_old=self.cursor
 
224
        gc = self.brush
 
225
        self.bgcolor = self.mod.style.bg[gtk.STATE_NORMAL]
 
226
        redf=self.bgcolor.red/255
 
227
        greenf=self.bgcolor.green/255
 
228
        bluef=self.bgcolor.blue/255
 
229
        colortheme=gtk.gdk.Color(self.color)
 
230
        c1,self.ivalue,self.qvalue=colorsys.rgb_to_yiq(float(colortheme.red)/256/256, float(colortheme.green)/256/256, float(colortheme.blue)/256/256)
 
231
        gc.foreground = self.bgcolor;
 
232
        gc.line_width=1
 
233
        self.pixmap = gtk.gdk.Pixmap(self.mod.window, width, 24)
 
234
        self.pixmap2 = gtk.gdk.Pixmap(self.mod.window, width, 24)
 
235
        self.pixmap.draw_rectangle(gc, True, 0, 0, self.modwidth, 24)
 
236
        self.pixmap2.draw_rectangle(gc, True, 0, 0, self.modwidth, 24)
 
237
        if self.flat:
 
238
             if self.theme:
 
239
                flatcolor1r=float(colortheme.red)/256/256
 
240
                flatcolor1g=float(colortheme.green)/256/256
 
241
                flatcolor1b=float(colortheme.blue)/256/256
 
242
                flatcolor2r=darkmulti*float(colortheme.red)/256/256
 
243
                flatcolor2g=darkmulti*float(colortheme.green)/256/256
 
244
                flatcolor2b=darkmulti*float(colortheme.blue)/256/256
 
245
             else:
 
246
                flatcolor1r=flatcolor1g=flatcolor1b=0.5
 
247
                flatcolor2r=flatcolor2g=flatcolor2b=0.5*darkmulti
 
248
        #render ---------------------------------------------------------
 
249
        for x in range(width):
 
250
        #reading color
 
251
           r=float(ord(self.moodbar[int(x*1000/width)*3]))/256
 
252
           g=float(ord(self.moodbar[int(x*1000/width)*3+1]))/256
 
253
           b=float(ord(self.moodbar[int(x*1000/width)*3+2]))/256
 
254
           if (self.theme or self.defaultstyle):
 
255
                          c1,c2,c3=colorsys.rgb_to_yiq(r, g, b)
 
256
 
 
257
           if (self.theme):
 
258
                c2=c2+self.ivalue
 
259
                if c2>1: c2=1
 
260
                if c2<-1: c2=-1
 
261
                c3=c3+self.qvalue
 
262
                if c3>1: c3=1
 
263
                if c3<-1: c3=-1
 
264
           if self.defaultstyle:
 
265
                r,g,b=colorsys.yiq_to_rgb(0.5,c2,c3)
 
266
                waluelength=int(c1*24)
 
267
           else:
 
268
                            if self.theme:
 
269
                                    r,g,b=colorsys.yiq_to_rgb(c1,c2,c3)
 
270
           if not self.defaultstyle:
 
271
                buff=''
 
272
                for h in range(24):
 
273
                   buff=buff+chr(int(r*255*hh[h]+redf*(1-hh[h])))+chr(int(g*255*hh[h]+greenf*(1-hh[h])))+chr(int(b*255*hh[h]+bluef*(1-hh[h])))
 
274
                self.pixmap.draw_rgb_image(gc, x, 0, 1, 24,
 
275
                         gtk.gdk.RGB_DITHER_NONE, buff, 3)
 
276
 
 
277
                if self.cursor:
 
278
                   buff2=''
 
279
                   for h in range(24*3):
 
280
                         buff2=buff2+chr(int(ord(buff[h])*(darkmulti+(1-darkmulti)*(1-hh[int(h/3)]))))
 
281
 
 
282
                   self.pixmap2.draw_rgb_image(gc, x, 0, 1, 24,
 
283
                         gtk.gdk.RGB_DITHER_NONE, buff2, 3)
 
284
 
 
285
           else:
 
286
                if self.flat:
 
287
                   gc.foreground = self.mod.get_colormap().alloc_color(
 
288
                      int(flatcolor1r*0xFFFF), int(flatcolor1g*0xFFFF), int(flatcolor1b*0xFFFF))
 
289
                else:
 
290
                   gc.foreground = self.mod.get_colormap().alloc_color(
 
291
                      int(r*0xFFFF), int(g*0xFFFF), int(b*0xFFFF))
 
292
                self.pixmap.draw_line(gc, x, 13-waluelength, x, 12+waluelength)
 
293
 
 
294
                if self.cursor:
 
295
                  if self.flat:
 
296
                     gc.foreground = self.mod.get_colormap().alloc_color(
 
297
                        int(flatcolor2r*0xFFFF), int(flatcolor2g*0xFFFF), int(flatcolor2b*0xFFFF))
 
298
                  else:
 
299
                     r,g,b=colorsys.yiq_to_rgb(0.5*darkmulti,c2,c3)
 
300
                     gc.foreground = self.mod.get_colormap().alloc_color(
 
301
                        int(r*0xFFFF), int(g*0xFFFF), int(b*0xFFFF))
 
302
                  self.pixmap2.draw_line(gc, x, 13-waluelength, x, 12+waluelength)
 
303
 
 
304
        #if not self.defaultstyle:
 
305
        #    self.pixmap2.draw_drawable(gc,self.pixmap, 0, 0, 0, 0, self.modwidth, 24)
 
306
        #    gc.foreground = self.mod.get_colormap().alloc_color(
 
307
        #                int(0xCCCC*darkmulti),  int(0xCCCC*darkmulti),  int(0xCCCC*darkmulti))
 
308
        #    gc.function=gtk.gdk.AND
 
309
        #    self.pixmap2.draw_rectangle(gc, True, 0, 0, self.modwidth, 24)
 
310
        #    gc.function=gtk.gdk.COPY
196
311
        return b
197
312
 
198
 
 
 
313
 
199
314
    #Drawing mood UI---------------------------------------------------------
200
 
  
 
315
 
201
316
    def drawMod(self,this,area):
202
 
        
 
317
         darkmulti=(1-self.darkness/10)
203
318
         self.uptime+=1
204
 
         gc = self.brush 
 
319
         gc = self.brush
 
320
         self.bgcolor = self.mod.style.bg[gtk.STATE_NORMAL]
 
321
         redf=self.bgcolor.red
 
322
         greenf=self.bgcolor.green
 
323
         bluef=self.bgcolor.blue
 
324
         #logger.info(greenf)
205
325
         this=self.mod
206
 
         gc.foreground = this.get_colormap().alloc_color(0x0000, 
 
326
         gc.foreground = this.get_colormap().alloc_color(0x0000,
207
327
                 0x0000, 0x0000)
208
328
         track = self.exaile.player.current
209
 
         
 
329
         if self.theme:
 
330
                flatcolor1r,flatcolor1g,flatcolor1b=colorsys.yiq_to_rgb(0.5,self.ivalue,self.qvalue)
 
331
                flatcolor2r,flatcolor2g,flatcolor2b=colorsys.yiq_to_rgb(0.5*darkmulti,self.ivalue,self.qvalue)
 
332
         else:
 
333
                flatcolor1r=flatcolor1g=flatcolor1b=0.5
 
334
                flatcolor2r=flatcolor2g=flatcolor2b=0.5*darkmulti
210
335
         try:
211
 
            if not self.get_size()==self.modwidth: 
 
336
 
 
337
            if not self.get_size()==self.modwidth:
212
338
                  self.buff=self.genBuff()
 
339
            if (not self.defaultstyle==self.defaultstyle_old or
 
340
                 not self.theme==self.theme_old or
 
341
                 not self.flat==self.flat_old or
 
342
                 not self.color==self.color_old or
 
343
                 not self.darkness==self.darkness_old or
 
344
                 not self.cursor==self.cursor_old):
 
345
                    self.buff=self.genBuff()
213
346
            if (self.haveMod):
214
 
                 this.window.draw_rgb_image(gc, 0, 0, self.modwidth, 24, 
215
 
                         gtk.gdk.RGB_DITHER_NONE, self.buff, self.modwidth*3)
 
347
                 this.window.draw_drawable(gc,self.pixmap, 0, 0, 0, 0, self.modwidth, 24)
 
348
 
216
349
            else:
217
 
               
218
 
               for i in range(5): 
219
 
                   gc.foreground = this.get_colormap().alloc_color(0xAAAA*i/5,
220
 
                              0xAAAA*i/5, 0xAAAA*i/5)
221
 
                   this.window.draw_rectangle(gc, True, 0, 0+i, 
 
350
              if not self.defaultstyle:
 
351
                for i in range(5):
 
352
                   gc.foreground = this.get_colormap().alloc_color(int(flatcolor1r*0xFFFF*i/5+redf*((5-float(i))/5)),
 
353
                              int(flatcolor1g*0xFFFF*i/5+greenf*((5-float(i))/5)), int(flatcolor1b*0xFFFF*i/5+bluef*((5-float(i))/5)) )
 
354
                   this.window.draw_rectangle(gc, True, 0, 0+i,
222
355
                           self.modwidth, 24-i*2)
223
356
 
224
 
               if self.modTimer and track.is_local():    
225
 
                   gc.foreground = this.get_colormap().alloc_color(0xBBBB, 
226
 
                           0xBBBB, 0xBBBB)
227
 
                   this.window.draw_rectangle(gc, True,  
228
 
                             (self.modwidth/10)*(self.uptime%10), 
 
357
              if self.modTimer and track.is_local():
 
358
                   gc.foreground = this.get_colormap().alloc_color(flatcolor2r*0xFFFF,
 
359
                           flatcolor2g*0xFFFF, flatcolor2b*0xFFFF)
 
360
                   this.window.draw_rectangle(gc, True,
 
361
                             (self.modwidth/10)*(self.uptime%10),
229
362
                             5, self.modwidth/10, 14)
230
 
               
231
 
      
 
363
              if self.defaultstyle:
 
364
                   gc.foreground = this.get_colormap().alloc_color(flatcolor1r*0xFFFF,
 
365
                           flatcolor1g*0xFFFF, flatcolor1b*0xFFFF)
 
366
                   this.window.draw_rectangle(gc, True,
 
367
                           0,12, self.modwidth, 2)
 
368
 
232
369
         except:
233
 
            for i in range(5):  
234
 
              gc.foreground = this.get_colormap().alloc_color(0xFFFF*i/5, 
 
370
            for i in range(5):
 
371
              gc.foreground = this.get_colormap().alloc_color(0xFFFF*i/5,
235
372
                      0x0000, 0x0000)
236
 
              this.window.draw_rectangle(gc, True, 0, 0+i, 
237
 
                      self.modwidth, 24-i*2)
238
 
            
239
 
            if track and track.is_local(): 
240
 
              self.lookformod(track)
241
 
            
 
373
              this.window.draw_rectangle(gc, True, 0, 0+i,
 
374
                     self.modwidth, 24-i*2)
 
375
 
 
376
            #if track and track.is_local():
 
377
            #self.lookformod(track)
 
378
 
242
379
            return False
243
 
            
 
380
 
244
381
         track = self.exaile.player.current
245
 
         if not track or not track.is_local(): return
 
382
         if not track or not (track.is_local() or \
 
383
                 track.get_tag_raw('__length')): return
246
384
 
247
385
         if self.modTimer:
248
 
            gc.foreground = this.get_colormap().alloc_color(0xFFFF, 
249
 
                    0xFFFF, 0xFFFF)
250
 
            gc.line_width=2
251
 
            this.window.draw_arc(gc, True, int(self.curpos*self.modwidth)-15, 
252
 
                    -5, 30, 30,  60*64, 60*64)
253
 
            gc.foreground = this.get_colormap().alloc_color(0x0000, 
 
386
            if self.cursor:
 
387
                if not self.haveMod:
 
388
                   if not self.defaultstyle:
 
389
                      for i in range(5):
 
390
                          gc.foreground = this.get_colormap().alloc_color(flatcolor2r*0xFFFF*i/5+int(redf*((5-float(i))/5)),
 
391
                              flatcolor2g*0xFFFF*i/5+int(greenf*((5-float(i))/5)), flatcolor2b*0xFFFF*i/5+int(bluef*((5-float(i))/5)) )
 
392
                          this.window.draw_rectangle(gc, True, 0, 0+i,
 
393
                                 int(self.curpos*self.modwidth), 24-i*2)
 
394
                   else:
 
395
                      gc.foreground = this.get_colormap().alloc_color(flatcolor2r*0xFFFF,
 
396
                           flatcolor2g*0xFFFF, flatcolor2b*0xFFFF)
 
397
                      this.window.draw_rectangle(gc, True,
 
398
                           0,12, int(self.curpos*self.modwidth), 2)
 
399
                else:
 
400
                    this.window.draw_drawable(gc,self.pixmap2, 0, 0, 0, 0, int(self.curpos*self.modwidth), 24)
 
401
 
 
402
 
 
403
            else:
 
404
                gc.foreground  = self.bgcolor;
 
405
                gc.line_width=2
 
406
                this.window.draw_arc(gc, True, int(self.curpos*self.modwidth)-15,
 
407
                        -5, 30, 30,  60*64, 60*64)
 
408
                gc.foreground = this.get_colormap().alloc_color(0x0000,
254
409
                    0x0000, 0x0000)
255
410
 
256
 
            this.window.draw_line(gc, int(self.curpos*self.modwidth), 10, 
 
411
                this.window.draw_line(gc, int(self.curpos*self.modwidth), 10,
257
412
                                      int(self.curpos*self.modwidth)-10, -5)
258
 
            this.window.draw_line(gc, int(self.curpos*self.modwidth), 10, 
 
413
                this.window.draw_line(gc, int(self.curpos*self.modwidth), 10,
259
414
                                      int(self.curpos*self.modwidth)+10, -5)
260
 
   
 
415
 
261
416
            length = self.exaile.player.current.get_duration()
262
417
            seconds = self.exaile.player.get_time()
263
418
            remaining_seconds = length - seconds
264
419
            text = ("%d:%02d / %d:%02d" %
265
 
               ( seconds // 60, seconds % 60, remaining_seconds // 60,
266
 
               remaining_seconds % 60))
267
 
   
 
420
                ( seconds // 60, seconds % 60, remaining_seconds // 60,
 
421
                remaining_seconds % 60))
 
422
            gc.foreground = this.get_colormap().alloc_color(0x0000,
 
423
                    0x0000, 0x0000)
268
424
            this.pangolayout.set_text(text)
269
 
            this.window.draw_layout(gc, self.modwidth/2-50, 
270
 
                    3, this.pangolayout)
271
 
            this.window.draw_layout(gc, self.modwidth/2-52, 
272
 
                    1, this.pangolayout)
273
 
            gc.foreground = this.get_colormap().alloc_color(0xFFFF, 
274
 
                    0xFFFF, 0xFFFF)
275
 
 
276
 
            this.window.draw_layout(gc, self.modwidth/2-51, 
277
 
                    2, this.pangolayout)
278
 
         
279
 
 
 
425
 
 
426
            this.window.draw_layout(gc, int(self.modwidth/2)-35,
 
427
                     4, this.pangolayout)
 
428
            this.window.draw_layout(gc, int(self.modwidth/2)-37,
 
429
                     2, this.pangolayout)
 
430
            this.window.draw_layout(gc, int(self.modwidth/2)-35,
 
431
                     2, this.pangolayout)
 
432
            this.window.draw_layout(gc, int(self.modwidth/2)-37,
 
433
                     4, this.pangolayout)
 
434
            gc.foreground = this.get_colormap().alloc_color(0xFFFF,
 
435
                     0xFFFF, 0xFFFF)
 
436
 
 
437
            this.window.draw_layout(gc, int(self.modwidth/2)-36,
 
438
                     3, this.pangolayout)
 
439
 
 
440
 
280
441
    #seeking-----------------------------------------------------------------
281
442
 
282
443
    def modSeekBegin(self,this,event):
287
448
        global exaile1
288
449
        self.seeking = False
289
450
        track = self.exaile.player.current
290
 
        if not track or not track.is_local(): return
 
451
        if not track or not (track.is_local() or \
 
452
                track.get_tag_raw('__length')): return
291
453
 
292
454
        mouse_x, mouse_y = event.get_coords()
293
455
        progress_loc = self.get_size()
294
456
        value = mouse_x / progress_loc
295
457
        if value < 0: value = 0
296
458
        if value > 1: value = 1
297
 
        
 
459
 
298
460
        self.curpos=value
299
461
        length = track.get_duration()
300
462
        self.mod.queue_draw_area(0, 0, progress_loc, 24)
301
463
        #redrawMod(self)
302
464
 
303
465
        seconds = float(value * length)
304
 
        self.exaile.player.seek(seconds)  
 
466
        self.exaile.player.seek(seconds)
305
467
 
306
468
    def modSeekMotionNotify(self,this,  event):
307
469
        if self.seeking:
308
470
            track = self.exaile.player.current
309
 
            if not track or not track.is_local(): return
 
471
            if not track or not (track.is_local() or \
 
472
                    track.get_tag_raw('__length')): return
310
473
 
311
474
            mouse_x, mouse_y = event.get_coords()
312
475
            progress_loc = self.get_size()
313
476
            value = mouse_x / progress_loc
314
477
            if value < 0: value = 0
315
478
            if value > 1: value = 1
316
 
        
317
 
            
 
479
 
 
480
 
318
481
            self.curpos=value
319
482
            self.mod.queue_draw_area(0, 0, progress_loc, 24)
320
 
    
 
483
 
321
484
 
322
485
    #------------------------------------------------------------------------
323
486
 
343
506
    global ExaileModbar
344
507
    track = ExaileModbar.exaile.player.current
345
508
    ExaileModbar.readMod('')
346
 
    ExaileModbar.setupUi()       
 
509
    ExaileModbar.setupUi()
347
510
    event.add_callback(ExaileModbar.play_start, 'playback_track_start')
348
511
    event.add_callback(ExaileModbar.play_end, 'playback_player_end')
349
512
 
355
518
    ExaileModbar.destroy()
356
519
    ExaileModbar = None
357
520
 
358
 
 
 
521
def get_prefs_pane():
 
522
    return moodbarprefs
359
523
 
360
524
#have errors from time to time:
361
525
#python: ../../src/xcb_lock.c:77: _XGetXCBBuffer: Assertion `((int) ((xcb_req) - (dpy->request)) >= 0)' failed.
365
529
#Xlib: sequence lost (0xe0000 > 0xd4add) in reply type 0x0!
366
530
#python: ../../src/xcb_io.c:176: process_responses: Assertion `!(req && current_request && !(((long) (req->sequence) - (long) (current_request)) <= 0))' failed.
367
531
 
368
 
 
 
532
#0.0.4 haven't errors
369
533
 
370
534
 
371
535