Changeset 1652

Show
Ignore:
Timestamp:
12/05/06 18:17:05 (2 years ago)
Author:
eblot
Message:

RevtreePlugin:

  • Add 'timeline' view (along with a user option to select the graph style)
  • Fix up several issues w/ enhancers when selected branches have been filtered out

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • revtreeplugin/0.10/revtree/enhancer.py

    r1633 r1652  
    6161        for (srcchg, dstchg) in self._creations: 
    6262            svgsrcbr = self._svgrevtree.svgbranch(branchname=srcchg.branchname) 
     63            if svgsrcbr is None: 
     64                continue 
    6365            svgsrcchg = svgsrcbr.svgchangeset(srcchg) 
    6466            svgdstbr = self._svgrevtree.svgbranch(branchname=dstchg.branchname) 
     67            if svgdstbr is None: 
     68                continue 
    6569            svgdstchg = svgdstbr.svgchangeset(dstchg) 
    6670            op = SvgOperation(self._svgrevtree, svgsrcchg, svgdstchg, '#5faf5f') 
  • revtreeplugin/0.10/revtree/logenhancer.py

    r1633 r1652  
    5454        for branch in self._repos.branches().values(): 
    5555            svgbranch = self._svgrevtree.svgbranch(branch=branch) 
     56            if not svgbranch: 
     57                continue 
    5658            for chgset in branch.changesets(): 
    5759                msg = chgset.changeset.message.lower() 
     
    9496        for (srcchg, dstchg) in self._creations: 
    9597            svgsrcbr = self._svgrevtree.svgbranch(branchname=srcchg.branchname) 
     98            svgdstbr = self._svgrevtree.svgbranch(branchname=dstchg.branchname) 
     99            if not svgsrcbr or not svgdstbr: 
     100                continue 
    96101            svgsrcchg = svgsrcbr.svgchangeset(srcchg) 
    97             svgdstbr = self._svgrevtree.svgbranch(branchname=dstchg.branchname) 
    98102            svgdstchg = svgdstbr.svgchangeset(dstchg) 
    99103            op = SvgOperation(self._svgrevtree, svgsrcchg, svgdstchg, '#5faf5f') 
  • revtreeplugin/0.10/revtree/svgview.py

    r1633 r1652  
    3939    length = text and len(text) or 0 
    4040    return (1+length)*(UNIT/2.5) 
     41 
     42def plink(url): 
     43    """Create a javascript link to replace the parent window content""" 
     44    return "javascript:window.parent.location.href='%s'" % url 
    4145 
    4246             
     
    247251                              str(self._revision), FONT_SIZE, FONT_NAME) 
    248252        self._text.attributes['style'] = 'fill:%s' % self._textcolor.rgb() 
    249         self._link = SVG.link('%s/changeset/%d' % \ 
    250                               (self._parent.urlbase(), self._revision),  
     253        self._link = SVG.link(plink('%s/changeset/%d' % \ 
     254                              (self._parent.urlbase(), self._revision)),  
    251255                              elements=[self._widget, self._text]) 
    252256        if self._revision: 
     
    298302                              self._position[1]+self._h/2+UNIT/6, 
    299303                              self._title, FONT_SIZE, FONT_NAME) 
    300         self._link = SVG.link('%s/browser/%s' % \ 
    301                               (self._parent.urlbase(), self._title),  
     304        self._link = SVG.link(plink('%s/browser/%s' % \ 
     305                              (self._parent.urlbase(), self._title)),  
    302306                              elements=[self._widget, self._text]) 
    303307         
     
    308312class SvgBranch(object): 
    309313     
    310     def __init__(self, parent, branch, mode): 
     314    def __init__(self, parent, branch, style): 
    311315        self._parent = parent 
    312316        self._branch = branch 
     
    319323        self._source = branch.source() 
    320324        try: 
    321             self.get_slot = self.__getattribute__('get_%s_slot' % mode) 
     325            self.get_slot = self.__getattribute__('get_%s_slot' % style) 
    322326        except AttributeError: 
    323             raise AssertionError, "Unsupported branch mode: %s" % mod
     327            raise AssertionError, "Unsupported branch style: %s" % styl
    324328        pw = None 
    325329        transitions = [] 
     
    737741        self._enhancers = [] 
    738742        # Trunk branches 
    739         self.trunks = self.env.config.get('revtree', 'trunks', 'trunk').split(' ') 
     743        self.trunks = self.env.config.get('revtree', 'trunks',  
     744                                          'trunk').split(' ') 
    740745        # Dictionnary of branch widgets (branches as keys) 
    741746        self._svgbranches = {} 
     
    800805         
    801806    def create(self, revisions=None, branches=None, authors=None,  
    802                      hidetermbranch=False, mode='compact'): 
     807                     hidetermbranch=False, style='compact'): 
    803808        if revisions is not None: 
    804809            self.revrange = revisions 
     
    818823                if not [a for a in authors for x in b.authors() if a == x]: 
    819824                    continue 
    820             svgbranch = SvgBranch(self, b, mode) 
     825            svgbranch = SvgBranch(self, b, style) 
    821826            self._svgbranches[b] = svgbranch 
    822827            revisions.extend([c.rev for c in b.changesets()]) 
  • revtreeplugin/0.10/revtree/templates/revtree.cs

    r1633 r1652  
    99 
    1010<script type="text/javascript"> 
    11   var limrev = document.getElementById("limrev"); 
    12   var limperiod = document.getElementById("limperiod"); 
     11  var limrev = document.getElementById('limrev'); 
     12  var limperiod = document.getElementById('limperiod'); 
    1313  var updateActionFields = function() { 
    1414    enableControl('period', limperiod.checked); 
     
    7777 
    7878   <li> 
     79    <fieldset id="treestyle"> 
     80     <legend>Style</legend> 
     81      <div class="field"> 
     82       <input type="radio" id="compact" name="treestyle" value="compact" <?cs  
     83         if:revtree.treestyle == "compact" ?> checked="checked"<?cs /if ?>/> 
     84        <label for="compact">Compact</label> 
     85        <input type="radio" id="timeline" name="treestyle" value="timeline" <?cs  
     86          if:revtree.treestyle == "timeline" ?> checked="checked"<?cs /if ?>/> 
     87         <label for="compact">Timeline</label> 
     88      </div> 
     89   </li> 
     90 
     91   <li> 
    7992    <fieldset id="options"> 
    8093     <legend>Options</legend> 
  • revtreeplugin/0.10/revtree/web_ui.py

    r1633 r1652  
    3131    """User revtree properties""" 
    3232     
    33     def __init__(self, env, authname, revspan, timebase): 
     33    def __init__(self, env, authname, revspan, timebase, style): 
    3434        """Initialize the instance with default values""" 
    3535        self.env = env 
     
    4747        self['period'] = 14 
    4848        self['limits'] = 'limperiod' 
     49        self['treestyle'] = style 
    4950        self['branch'] = self.anybranch 
    5051        self['author'] = authname or self.anyauthor 
     
    5455        """Returns the sequence of supported fields""" 
    5556        return [ 'revmin', 'revmax', 'period', 'branch', 'author', 
    56                  'limits', 'hideterm'
     57                 'limits', 'hideterm', 'treestyle'
    5758         
    5859    def load(self, session): 
     
    127128        return int(self['hideterm']) == 1 
    128129         
     130    def get_style(self): 
     131        return self['treestyle'] 
     132         
    129133    def __getitem__(self, name): 
    130134        """getter (dictionary)""" 
     
    172176        revstore = RevtreeStore(self.env, req.authname, \ 
    173177                                (self.oldest, self.youngest), 
    174                                 self.timebase or int(time.time())) 
     178                                self.timebase or int(time.time()),  
     179                                self.style) 
    175180        revstore.load(req.session) 
    176181        revstore.populate(req.args) 
     
    197202            enhancer = Enhancer(repos, svgrevtree) 
    198203            svgrevtree.add_enhancer(enhancer) 
    199             # FIXME 
    200             mode = 'compact' 
    201204            #self.env.log.debug("REVISIONS %s" % [revstore.revrange]) 
    202205            #self.env.log.debug("BRANCH %s" % revstore.get_branches()) 
     
    205208            svgrevtree.create(revstore.revrange, revstore.get_branches(),  
    206209                              revstore.get_authors(),  
    207                               revstore.get_hidetermbranch(), mode) 
     210                              revstore.get_hidetermbranch(),  
     211                              revstore.get_style()) 
    208212            svgrevtree.build() 
    209213            svgrevtree.render() 
     
    310314        else: 
    311315            self.timebase = None 
     316        self.style = self.config.get('revtree', 'style', 'compact') 
     317        if self.style not in [ 'compact', 'timeline']: 
     318            raise TracError, "Unsupported style: %s" % self.style 
    312319 
    313320    def _get_periods(self):