/[gzz]/gzz/metacode/uml.py
ViewVC logotype

Diff of /gzz/metacode/uml.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16 by tjl, Wed Aug 28 14:22:38 2002 UTC revision 1.17 by tjl, Thu Aug 29 09:18:59 2002 UTC
# Line 97  class namedEl: Line 97  class namedEl:
97          return self.repl(s)          return self.repl(s)
98    
99  class mpsequence:  class mpsequence:
100        def getVarForY(self, before, after):
101            """Get a variable name for a Y coordinate.
102            Padding before and after.
103            """
104            v1 = randomVar()
105            v2 = randomVar()
106            yvar = self.yvar
107            self.ycode += """
108                numeric %(v1)s, %(v2)s;
109                %(v2)s = %(yvar)s - %(before)s - %(after)s;
110                %(v1)s = %(yvar)s - %(before)s;
111            """ % locals()
112            self.yvar = v2
113            return v1;
114      class call:      class call:
115          def __init__(self, parent, sourcename, toks, l):          def __init__(self, parent, sourcex, toks, l):
116              self.var = randomVar()              self.var = randomVar()
117              self.parent = parent              self.parent = parent
118              self.sourcename = sourcename              self.targetx = "(xpart(%s.c))" % (toks[1])
119              self.targetname = toks[1]              self.targetname = toks[1]
120                if toks[1] not in parent.seqobjs:
121                    parent.seqobjs.append(toks[1])
122                if sourcex == None:
123                    # self.sourcex = "(" + self.targetx + " - 100)"
124                    self.sourcex = "-50"
125                else:
126                    self.sourcex = sourcex
127              if len(toks) > 2:              if len(toks) > 2:
128                  self.text = " ".join(toks[2:])                  self.text = " ".join(toks[2:])
             self.list = parent.parseContents(self.targetname, l)  
         def setupCode(self):  
             if self.sourcename:  
                 srcx = "xpart("+self.sourcename + ".c)"  
             else:  
                 srcx = " %%.xd - 100 "  
             dstx = "xpart("+self.targetname + ".c)"  
             srcx, dstx = [self.repl(i) for i in [srcx, dstx]]  
             s = self.repl("""  
                 numeric %%.yu, %%.yl, %%.xs, %%.xd;  
                 %%.xs = %(srcx)s;  
                 %%.xd = %(dstx)s;  
             """) % locals()  
             return s + " ".join([e.setupCode() for e in self.list])  
         def drawCode_meas(self):  
             yprev = self.parent.yvar  
             if yprev:  
                 s = self.repl("""  
                     %%.yu = %(yprev)s - 30;  
                 """) % locals()  
129              else:              else:
130                  s = ""                  self.text = "\"\""
131              self.parent.yvar = self.var + ".yu"              self.list = parent.parseContents(self.targetx, l)
132              s += " ".join([e.drawCode_meas() for e in self.list])          def setupCode(self):
133              yprev = self.parent.yvar              return " ".join([e.setupCode() for e in self.list])
134              s += self.repl("""          def measure(self):
135                  %%.yl = %(yprev)s - 15;              self.yu = self.parent.getVarForY(10,10)
136              """) % locals()              for e in self.list:
137              self.parent.yvar = self.var + ".yl"                  e.measure()
138              return self.repl(s)              self.yl = self.parent.getVarForY(0, 20)
139            def drawCode_measure(self):
140                s = """
141                    sequencecallmeasure(%(sourcex)s, %(targetx)s, %(yu)s, %(yl)s, %(text)s);
142                """ % self.__dict__;
143                return s + " ".join([e.drawCode_measure() for e in self.list])
144          def drawCode_draw(self):          def drawCode_draw(self):
145              wid = 5              s = """
146              if hasattr(self,"text"):                  sequencecall(%(sourcex)s, %(targetx)s, %(yu)s, %(yl)s, %(text)s);
147                  text = self.repl(              """ % self.__dict__;
148                      """ label.top("""+self.text+""",(0.5[%%.xd,%%.xs],%%.yu));"""              return s + " ".join([e.drawCode_draw() for e in self.list])
149                      )  
150              else:      class create(call):
151                  text = ""          def measure(self):
152              return self.repl("""              self.yu = self.parent.getVarForY(10,10)
153                  know(%%.yu);              for e in self.list:
154                  drawarrow (%%.xs,%%.yu) -- (%%.xd,%%.yu)                  e.measure()
155                      withpen sequencecallpen;              self.yl = self.parent.getVarForY(20, 20)
156                  drawarrow (%%.xd,%%.yl) -- (%%.xs,%%.yl) dashed evenly          def drawCode_measure(self):
157                      withpen sequencecallpen;              s = """
158                  draw (%%.xd-%(wid)s, %%.yu) --                  sequencecreatemeasure(%(sourcex)s, %(targetname)s, %(yu)s, %(yl)s, %(text)s);
159                      (%%.xd-%(wid)s, %%.yl) --              """ % self.__dict__;
160                      (%%.xd+%(wid)s, %%.yl) --              return s + " ".join([e.drawCode_measure() for e in self.list])
161                      (%%.xd+%(wid)s, %%.yu) --  cycle  
162                      withpen sequenceactivepen;          def drawCode_draw(self):
163                  %(text)s              s = """
164              """)%locals() + " ".join([e.drawCode_draw() for e in self.list])                  sequencecreate(%(sourcex)s, %(targetname)s, %(yu)s, %(yl)s, %(text)s);
165          def repl(self, s):              """ % self.__dict__;
166              s = s.replace("%%", self.var)              return s + " ".join([e.drawCode_draw() for e in self.list])
167              return s  
168            
169    
170      def __init__(self, var, s, l):      def __init__(self, var, s, l):
171            self.seqobjs = []
172          toks = s.split(" ");          toks = s.split(" ");
173          s = toks[0]          s = toks[0]
174          self.var = var or s          self.var = var or s
175          self.name = s          self.name = s
176          self.list = self.parseContents(None, l)          self.list = self.parseContents(None, l)
177            self.ycode = ""
178                    
179      def parseContents(self, sourceName, list):      def parseContents(self, sourceName, list):
180          l = []          l = []
# Line 173  class mpsequence: Line 183  class mpsequence:
183              s = toks[0]              s = toks[0]
184              if s == "call":              if s == "call":
185                  l.append(self.call(self,  sourceName, toks, el[1:]))                  l.append(self.call(self,  sourceName, toks, el[1:]))
186              elif s == "return":              elif s == "create":
187                    l.append(self.create(self,  sourceName, toks, el[1:]))
188                elif s == "return" or s == "delete":
189                  pass                  pass
190              else:              else:
191                  assert 0, "Must have call or return"                  assert 0, "Must have call or return, not '"+s+"'"
192          return l          return l
193      def setupCode(self):      def setupCode(self):
194          return self.repl(          return self.repl(
195              " ".join([e.setupCode() for e in self.list])              " ".join([e.setupCode() for e in self.list])
196              )              )
197      def drawCode(self):      def drawCode(self):
198          self.yvar = None          self.yvar = randomVar()
199          m = " ".join([e.drawCode_meas() for e in self.list])          self.ycode = "numeric %(yvar)s; %(yvar)s = -50;" % self.__dict__;
200            for e in self.list:
201                e.measure()
202            m = self.ycode
203            m += " ".join([e.drawCode_measure() for e in self.list])
204            m += " ".join([
205                "sequencedrawlifeline(%s, %s);" % (so, self.yvar)
206                    for so in self.seqobjs
207            ])
208          m += " ".join([e.drawCode_draw() for e in self.list])          m += " ".join([e.drawCode_draw() for e in self.list])
209          return self.repl(m)          return self.repl(m)
210      def repl(self, s):      def repl(self, s):
# Line 292  class mpseqobject(simpleEl): Line 312  class mpseqobject(simpleEl):
312      def setupCode(self):      def setupCode(self):
313          s = """          s = """
314              picture %%.titl, %%.pict;              picture %%.titl, %%.pict;
315                picture %%.ghost.pict;
316              %%.titl = classTitle("%name%");              %%.titl = classTitle("%name%");
317              %%.pict = %%.titl;              %%.pict = %%.titl;
318              addto %%.pict doublepath bbox %%.titl;              addto %%.pict doublepath bbox %%.titl;
319                %%.ghost.pict = %%.titl;
320              picmeasurements(%%);              picmeasurements(%%);
321                picmeasurements(%%.ghost);
322                xpart(%%.c) = xpart(%%.ghost.c);
323                """
324            return self.repl(s)
325        def drawCode(self):
326            s = """
327                if not known(ypart(%%.c)):
328                    ypart(%%.c) = ypart(%%.ghost.c);
329                fi
330                drawmeasuredpic(%%);
331              """              """
332          return self.repl(s)          return self.repl(s)
333    
334    
335    
336    
337  class mpcomponent(simpleEl):  class mpcomponent(simpleEl):
338      def setupCode(self):      def setupCode(self):
339          s = """          s = """

Legend:
Removed from v.1.16  
changed lines
  Added in v.1.17

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26