Changeset 2516

Show
Ignore:
Timestamp:
2006-10-07 03:21:13 (2 years ago)
Author:
scott
Message:

Now clip info is updated on Enter while reviewing.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • keystroke/trunk/keystroke.py

    r2515 r2516  
    207207      self.start_time.set_text(previous['start']) 
    208208      self.end_time.set_text(previous['end']) 
     209      self.clip_text.set_text(self.scriptview.get_clip_text(previous['start'],previous['track'])) 
    209210      self.progress.props.fraction = float(to_ms(previous["start"]))/self.pipeline_duration 
    210211    else: 
     
    220221      self.start_time.set_text(next['start']) 
    221222      self.end_time.set_text(next['end']) 
     223      self.clip_text.set_text(self.scriptview.get_clip_text(next['start'],next['track'])) 
    222224    elif self.end_time.get_text()!="xx:xx:xx.xxx": 
    223225      self.seek(self.end_time.get_text()) 
     
    247249    data = self.scriptview.export_buffer() 
    248250    self.textsource.clear() 
    249     print "PUSH TEXT" 
    250251    for clip in data["subtitle-en"]: 
    251252      desc = clip[2] 
     
    258259    #Handles clip to text buffer, formatting and pipeline control. 
    259260    if self.show_keystrokes: print "Enter" 
     261    current_time = self.pipeline.query_position(gst.FORMAT_TIME)[0]/gst.MSECOND 
    260262    if (self.pipeline.get_state()[1] == gst.STATE_PLAYING): 
    261263      self.pipeline.set_state(gst.STATE_PAUSED); 
    262264      current_time = self.pipeline.query_position(gst.FORMAT_TIME)[0]/gst.MSECOND 
    263       self.end_time.set_text(format_time(current_time)) 
     265      if self.mode=="transcribe": 
     266        self.end_time.set_text(format_time(current_time)) 
     267      elif self.mode=="review": 
     268        current = self.scriptview.current(current_time) 
     269        self.scriptview.highlight(current["start"]) 
     270        self.start_time.set_text(current['start']) 
     271        self.end_time.set_text(current['end']) 
     272        self.clip_text.set_text(self.scriptview.get_clip_text(current['start'],current['track'])) 
    264273      self.progress.props.text = self.current_file + ": Paused." 
    265274      if self.pipeline_duration==10: 
    266275        self.pipeline_duration = self.pipeline.query_duration(gst.FORMAT_TIME)[0]/gst.MSECOND 
    267276      self.progress.props.fraction = float(current_time)/self.pipeline_duration 
    268     elif self.pipeline.get_state()[1] == gst.STATE_PAUSED and self.mode=='transcribe': 
    269       text = self.clip_text.get_text() 
    270       if text[:1] == ")" or (text.find(":")==-1 and text != "") and self.start_time.get_text() != 'xx:xx:xx.xxx': 
    271         self.scriptview.add(self.start_time.get_text(),self.end_time.get_text(),text.strip().strip(")"),"default") 
    272       elif text != "" and self.start_time.get_text() != 'xx:xx:xx.xxx': 
    273         # If using the last type def make sure doesn't have ';' instead of intended ':' 
    274         if text.find(":")==-1 and text.find(";")!=-1: 
    275           dialog = gtk.Dialog("Did you mean...", self.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_NO, gtk.RESPONSE_NO, gtk.STOCK_YES, gtk.RESPONSE_YES)) 
    276           label = gtk.Label("It looks like you may have intended to have a new speaker but mistakenly typed a semi-colon (;) instead of a colon (:).  Would you like to change the semi-colon to a colon in, '"+text+"'?") 
    277           label.set_line_wrap(True) 
    278           dialog.vbox.pack_start(label, True, False, 0) 
    279           dialog.set_default_response(gtk.RESPONSE_YES) 
    280           label.show() 
    281           if dialog.run() == gtk.RESPONSE_YES: 
    282             text = text.replace(";", ":", 1) 
    283           dialog.destroy()       
    284         if text.find(":")!=-1: 
    285           speaker = text[:text.find(":")+1] 
    286         else: 
    287           speaker = None 
    288         self.scriptview.add(self.start_time.get_text(),self.end_time.get_text(),text.strip().strip(")"),"default",speaker) 
    289       elif text != "": 
    290         self.scriptview.add(self.start_time.get_text(),self.end_time.get_text(),text.strip()) 
    291       self.clip_text.set_text("") 
    292       self.start_time.set_text(format_time(self.pipeline.query_position(gst.FORMAT_TIME)[0]/gst.MSECOND)) 
    293       self.end_time.set_text("xx:xx:xx.xxx") 
     277    elif self.pipeline.get_state()[1] == gst.STATE_PAUSED:    
     278      if self.mode=="transcribe": 
     279        text = self.clip_text.get_text() 
     280        if text[:1] == ")" or (text.find(":")==-1 and text != "") and self.start_time.get_text() != 'xx:xx:xx.xxx': 
     281          self.scriptview.add(self.start_time.get_text(),self.end_time.get_text(),text.strip().strip(")"),"default") 
     282        elif text != "" and self.start_time.get_text() != 'xx:xx:xx.xxx': 
     283          # If using the last type def make sure doesn't have ';' instead of intended ':' 
     284          if text.find(":")==-1 and text.find(";")!=-1: 
     285            dialog = gtk.Dialog("Did you mean...", self.window, gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, (gtk.STOCK_NO, gtk.RESPONSE_NO, gtk.STOCK_YES, gtk.RESPONSE_YES)) 
     286            label = gtk.Label("It looks like you may have intended to have a new speaker but mistakenly typed a semi-colon (;) instead of a colon (:).  Would you like to change the semi-colon to a colon in, '"+text+"'?") 
     287            label.set_line_wrap(True) 
     288            dialog.vbox.pack_start(label, True, False, 0) 
     289            dialog.set_default_response(gtk.RESPONSE_YES) 
     290            label.show() 
     291            if dialog.run() == gtk.RESPONSE_YES: 
     292              text = text.replace(";", ":", 1) 
     293            dialog.destroy()       
     294          if text.find(":")!=-1: 
     295            speaker = text[:text.find(":")+1] 
     296          else: 
     297            speaker = None 
     298          self.scriptview.add(self.start_time.get_text(),self.end_time.get_text(),text.strip().strip(")"),"default",speaker) 
     299        elif text != "": 
     300          self.scriptview.add(self.start_time.get_text(),self.end_time.get_text(),text.strip()) 
     301        self.clip_text.set_text("") 
     302        self.start_time.set_text(format_time(self.pipeline.query_position(gst.FORMAT_TIME)[0]/gst.MSECOND)) 
     303        self.end_time.set_text("xx:xx:xx.xxx") 
     304      elif self.mode=="review": 
     305        pass 
     306        #FIXME this is where to put clip update code. 
    294307      self.scriptview.scroll_to_bottom(self.mode) 
    295308      self.pipeline.set_state(gst.STATE_PLAYING); 
    296       self.progress.props.text = self.current_file + ": Playing." 
    297     elif self.pipeline.get_state()[1] == gst.STATE_PAUSED: 
    298       self.start_time.set_text(format_time(self.pipeline.query_position(gst.FORMAT_TIME)[0]/gst.MSECOND)) 
    299       self.end_time.set_text("xx:xx:xx.xxx") 
    300       self.pipeline.set_state(gst.STATE_PLAYING); 
    301       self.progress.props.text = self.current_file + ": Playing." 
     309      self.progress.props.text = self.current_file + ": Playing."  
    302310    return 
    303311     
  • keystroke/trunk/scriptview.py

    r2515 r2516  
    128128    while x<len(self.__times[self.__current_track]['start']) and time>=to_ms(self.__times[self.__current_track]['start'][x]): 
    129129      x += 1 
    130     return x-1 
     130    if not time > to_ms(self.__times[self.__current_track]['end'][-1]): 
     131      return {"start":self.__times[self.__current_track]['start'][x-1],"end":self.__times[self.__current_track]['end'][x-1],"track":self.__current_track,"index":x-1} 
     132    else: 
     133      return None 
    131134   
    132135  def next(self,time): 
     
    134137       time.  If the current clip is the end then return None.""" 
    135138    current = self.current(time) 
     139    current = current['index'] 
    136140    if current+1<len(self.__times[self.__current_track]['start']): 
    137       return {"start":self.__times[self.__current_track]['start'][current+1],"end":self.__times[self.__current_track]['end'][current+1],"index":current+1} 
     141      return {"start":self.__times[self.__current_track]['start'][current+1],"end":self.__times[self.__current_track]['end'][current+1],"track":self.__current_track,"index":current+1} 
    138142    else: 
    139143      return None 
     
    143147       given time.  If the current clip is the first then return None.""" 
    144148    current = self.current(time) 
     149    current = current['index'] 
    145150    if current>0: 
    146       return {"start" : self.__times[self.__current_track]['start'][current-1],"end" : self.__times[self.__current_track]['end'][current-1],"index":current-1} 
     151      return {"start" : self.__times[self.__current_track]['start'][current-1],"end" : self.__times[self.__current_track]['end'][current-1],"track":self.__current_track,"index":current-1} 
    147152    else: 
    148153      return None 
     
    160165    self.__text.apply_tag(self.__tag_current, start_iter, end_iter) 
    161166    self.__textView.scroll_to_mark(mark,0.1) 
    162     return 
    163167     
    164168  def get_textview(self): 
     
    240244    print "Switched to " + keys[new_track%len(keys)] + "." 
    241245    self.__current_track = keys[new_track%len(keys)] 
     246   
     247  def get_clip_text(self,time,track): 
     248    """This highlights the text for the clip with the given start time.  Also 
     249       note that it will remove any other highlights.""" 
     250    mark = self.__text.get_mark(track + "-" + time) 
     251    start_iter = self.__text.get_iter_at_mark(mark) 
     252    if not start_iter.begins_tag(self.__tag_clip): 
     253      start_iter.forward_to_tag_toggle(self.__tag_clip) 
     254    end_iter = start_iter.copy() 
     255    end_iter.forward_to_tag_toggle(self.__tag_clip) 
     256    return self.__text.get_text(start_iter, end_iter)