Example #1
0
 def createConnector(self, xy):
     gf = Graphics.Connector(xy[0],
                             xy[1],
                             canvas=self.canvas,
                             zoom=self.getZoom(),
                             eventHandler=self.mainHandler)
     self.appendGF(gf)
     self.undoStack.append((self.undo_create, [[gf]]))
     return gf
Example #2
0
    def openOLD(self):
        if (0):
            return []

        elif (1):
            fileName = os.path.join(self.modelPath,
                                    'graph_' + self.className + '.gf1')
            if (os.path.exists(fileName)):
                f = open(fileName, 'r')
            else:
                return []

            try:
                gfList = pickle.load(f)
            except ImportError:
                print "Failed to load pickled graphic data"
                return []

            # Get the scripting stuff out of the way...
            self.scripting = gfList[0]
            if (self.scripting.getRunTimeChange()):
                self.menuBar.getModelMenu().entryconfigure(
                    0, label="Changes at run-time ENABLED")
            else:
                self.menuBar.getModelMenu().entryconfigure(
                    0, label="Changes at run-time DISABLED")

            for gf in gfList[1:]:
                gf.setCanvas(self.canvas)
                gf.setEventHandler(self.mainHandler)
            return gfList[1:]

        elif (0):
            return [
                Graphics.Rectangle(50,
                                   50,
                                   90,
                                   90,
                                   canvas=self.canvas,
                                   outline="black",
                                   fill="blue",
                                   width=2,
                                   eventHandler=self.mainHandler),
                Graphics.Oval(50,
                              50,
                              90,
                              90,
                              canvas=self.canvas,
                              outline="black",
                              fill="green",
                              eventHandler=self.mainHandler),
                Graphics.Text(70,
                              90,
                              canvas=self.canvas,
                              zoom=1.00,
                              eventHandler=self.mainHandler,
                              text="text",
                              fill="red"),
                Graphics.Connector(100,
                                   100,
                                   canvas=self.canvas,
                                   zoom=1.00,
                                   eventHandler=self.mainHandler),
                Graphics.Polygon([50, 50, 90, 90, 32, 2],
                                 canvas=self.canvas,
                                 outline="green",
                                 fill="purple",
                                 width=2,
                                 eventHandler=self.mainHandler),
                Graphics.Line([50, 10, 50, 50, 132, 50],
                              canvas=self.canvas,
                              fill="black",
                              eventHandler=self.mainHandler),
                Graphics.Composite([
                    Graphics.Rectangle(50,
                                       20,
                                       140,
                                       100,
                                       canvas=self.canvas,
                                       outline="black",
                                       fill="yellow",
                                       width=2,
                                       eventHandler=self.mainHandler),
                    Graphics.Rectangle(50,
                                       50,
                                       100,
                                       120,
                                       canvas=self.canvas,
                                       outline="black",
                                       fill="purple",
                                       width=2,
                                       eventHandler=self.mainHandler),
                    Graphics.Oval(70,
                                  20,
                                  40,
                                  90,
                                  canvas=self.canvas,
                                  outline="black",
                                  fill="green",
                                  width=2,
                                  eventHandler=self.mainHandler),
                    Graphics.Oval(50,
                                  50,
                                  40,
                                  20,
                                  canvas=self.canvas,
                                  outline="black",
                                  fill="gray",
                                  width=2,
                                  eventHandler=self.mainHandler)
                ],
                                   canvas=self.canvas,
                                   zoom=100,
                                   eventHandler=self.mainHandler)
            ]
Example #3
0
    def open(self):
        """ Tries to open an existing graphical form in the AToM3 format and to reproduce it on canvas """

        fileName = os.path.normpath(
            os.path.join(self.modelPath, 'graph_' + self.className + '.py'))
        if (not os.path.exists(fileName)): return []

        nameClass = "graph_" + self.className
        dc = Tkinter.Canvas(self.root)

        # File is already loaded
        if nameClass in sys.modules.keys():
            del sys.modules[nameClass]

        # Make sure we can reach the path and import from it
        sys.path.append(self.modelPath)

        # Load it in memory
        try:
            exec "import graph_" + self.className + "\n"
            sys.path = sys.path[:-1]
        except SyntaxError:  #  class Name not valid
            sys.path = sys.path[:-1]
            print "Syntax Error, Could not open graphical file", self.className
            self.debug()
            return []
        except IOError:  # could not open file (?)
            sys.path = sys.path[:-1]
            print "IO Error, Could not open graphical file", self.className
            self.debug()
            return []
        except ImportError:  # could not open file...
            print "Import Error, Could not open graphical file", self.className
            self.debug()
            sys.path = sys.path[:-1]
            return []

        try:
            # obtain the class object
            className = eval('graph_' + self.className + '.graph_' +
                             self.className)
        except:
            print 'WARNING:', 'graph_'+self.className+'.graph_'+self.className, \
                  'not found'
            return []
        new_obj = className(0, 0)  # create an instance of the new class
        new_obj.DrawObject(dc)  # draw the object

        # Get the constraints
        constraintList = []
        for constraint in new_obj.constraintList:
            constraintList.append(constraint.getValue())
        self.scripting.setConstraintList(constraintList)
        self.scripting.setRunTimeChange(new_obj.ChangesAtRunTime)

        GFlist = []

        # List with the handles of all the shapes drawn
        handleList = []
        for handle in dc.find_withtag(new_obj.tag):
            if (not handle in handleList):
                handleList.append(handle)

        # Get the connectors in self.connectors
        for handle in new_obj.connectors:
            x0, y0, x1, y1 = dc.coords(handle)
            if (new_obj.namedConnectors.has_key(handle)):
                name = new_obj.namedConnectors[handle]
                gf = Graphics.NamedConnector(x0,
                                             y0,
                                             canvas=self.canvas,
                                             eventHandler=self.mainHandler,
                                             name=name)
            else:
                gf = Graphics.Connector(x0,
                                        y0,
                                        canvas=self.canvas,
                                        eventHandler=self.mainHandler)
            GFlist.append(gf)

        # Get the drawn semantic attributes...
        handleAttributeDict = dict()
        for attribute in new_obj.attr_display.keys():
            handleAttributeDict[new_obj.attr_display[attribute]] = attribute

        # Get the image dict, if any
        if (hasattr(new_obj, 'imageDict')):
            Graphics.Image.IMAGE_DICT = new_obj.imageDict

        # Get the GraphicalForm objects
        objectNumberPattern = re.compile('\Agf(\d*)\Z')
        for graphicalForm in new_obj.graphForms:

            handle = graphicalForm.getHandler()
            objectNumber = int(
                objectNumberPattern.search(graphicalForm.getName()).group(1))
            coords = dc.coords(handle)
            objectType = dc.type(handle)

            # Attribute  --- Special Text
            if (handleAttributeDict.has_key(handle)):
                attribute = handleAttributeDict[handle]

                fontObject = graphicalForm.getFont()
                if (fontObject):
                    if (fontObject.cget('weight') == 'bold'): bold = True
                    else: bold = False
                    if (fontObject.cget('slant') == 'bold'): italic = True
                    else: italic = False
                    GFlist.append(
                        Graphics.Attribute(
                            coords[0],
                            coords[1],
                            canvas=self.canvas,
                            eventHandler=self.mainHandler,
                            fill=dc.itemcget(handle, "fill"),
                            text=attribute,
                            anchor=dc.itemcget(handle, "anchor"),
                            family=fontObject.cget('family'),
                            size=int(float(fontObject.cget('size'))),
                            bold=bold,
                            savedNumber=objectNumber,
                            width=int(float(dc.itemcget(handle, "width"))),
                            italic=italic,
                            underline=int(float(
                                fontObject.cget('underline')))))

                # Backward compatibility with graphical appearences that don't have
                # a font object. NOTE: Font type & size info is neccessarily lost.
                else:
                    GFlist.append(
                        Graphics.Attribute(
                            coords[0],
                            coords[1],
                            canvas=self.canvas,
                            eventHandler=self.mainHandler,
                            fill=dc.itemcget(handle, "fill"),
                            text=attribute,
                            width=int(float(dc.itemcget(handle, "width"))),
                            anchor=dc.itemcget(handle, "anchor"),
                            savedNumber=objectNumber))

            elif (objectType == 'text'):

                fontObject = graphicalForm.getFont()
                if (fontObject):
                    if (fontObject.cget('weight') == 'bold'): bold = True
                    else: bold = False
                    if (fontObject.cget('slant') == 'bold'): italic = True
                    else: italic = False
                    GFlist.append(
                        Graphics.Text(
                            coords[0],
                            coords[1],
                            canvas=self.canvas,
                            eventHandler=self.mainHandler,
                            fill=dc.itemcget(handle, "fill"),
                            text=dc.itemcget(handle, "text"),
                            anchor=dc.itemcget(handle, "anchor"),
                            family=fontObject.cget('family'),
                            size=int(float(fontObject.cget('size'))),
                            bold=bold,
                            savedNumber=objectNumber,
                            width=int(float(dc.itemcget(handle, "width"))),
                            italic=italic,
                            underline=int(float(
                                fontObject.cget('underline')))))

                # Backward compatibility with graphical appearences that don't have
                # a font object. NOTE: Font type & size info is neccessarily lost.
                else:
                    GFlist.append(
                        Graphics.Text(coords[0],
                                      coords[1],
                                      canvas=self.canvas,
                                      eventHandler=self.mainHandler,
                                      fill=dc.itemcget(handle, "fill"),
                                      text=dc.itemcget(handle, "text"),
                                      width=int(
                                          float(dc.itemcget(handle, "width"))),
                                      anchor=dc.itemcget(handle, "anchor"),
                                      savedNumber=objectNumber))

            elif (objectType == 'line'):

                if (dc.itemcget(handle, "smooth") == 'bezier'): smooth = True
                else: smooth = False
                GFlist.append(
                    Graphics.Line(coords,
                                  canvas=self.canvas,
                                  eventHandler=self.mainHandler,
                                  fill=dc.itemcget(handle, "fill"),
                                  stipple=dc.itemcget(handle, "stipple"),
                                  arrow=dc.itemcget(handle, "arrow"),
                                  capstyle=dc.itemcget(handle, "capstyle"),
                                  joinstyle=dc.itemcget(handle, "joinstyle"),
                                  smooth=smooth,
                                  savedNumber=objectNumber,
                                  width=int(float(dc.itemcget(handle,
                                                              "width")))))

            elif (objectType == 'polygon'):

                if (dc.itemcget(handle, "smooth") == 'bezier'): smooth = True
                else: smooth = False
                GFlist.append(
                    Graphics.Polygon(coords,
                                     canvas=self.canvas,
                                     eventHandler=self.mainHandler,
                                     fill=dc.itemcget(handle, "fill"),
                                     stipple=dc.itemcget(handle, "stipple"),
                                     smooth=smooth,
                                     outline=dc.itemcget(handle, "outline"),
                                     savedNumber=objectNumber,
                                     width=int(
                                         float(dc.itemcget(handle, "width")))))

            elif (objectType == 'oval'):
                x0, y0, x1, y1 = coords
                GFlist.append(
                    Graphics.Oval(x0,
                                  y0,
                                  x1,
                                  y1,
                                  canvas=self.canvas,
                                  eventHandler=self.mainHandler,
                                  fill=dc.itemcget(handle, "fill"),
                                  outline=dc.itemcget(handle, "outline"),
                                  width=int(float(dc.itemcget(handle,
                                                              "width"))),
                                  savedNumber=objectNumber,
                                  stipple=dc.itemcget(handle, "stipple")))

            elif (objectType == 'rectangle'):

                x0, y0, x1, y1 = coords
                GFlist.append(
                    Graphics.Rectangle(x0,
                                       y0,
                                       x1,
                                       y1,
                                       canvas=self.canvas,
                                       eventHandler=self.mainHandler,
                                       fill=dc.itemcget(handle, "fill"),
                                       outline=dc.itemcget(handle, "outline"),
                                       width=int(
                                           float(dc.itemcget(handle,
                                                             "width"))),
                                       savedNumber=objectNumber,
                                       stipple=dc.itemcget(handle, "stipple")))

            elif (objectType == 'image'):

                fileName = graphicalForm.getImageFilename()
                if (not Graphics.Image.IMAGE_DICT.has_key(fileName)):
                    print "ERROR: could not load image " + fileName + "... SKIPPED"
                    continue
                '''
          pathName = ''
          for path in sys.path:
            if( not os.path.isdir( path ) ): continue
            if( pathName ): break
            for file in os.listdir( path ):
              if( file == fileName ):
                pathName = os.path.join( path, fileName )
                break
      
          if( not fileName ): 
            print "ERROR: could not load image " + fileName + "... SKIPPED"
            continue
          '''
                GFlist.append(
                    Graphics.Image(coords[0],
                                   coords[1],
                                   canvas=self.canvas,
                                   eventHandler=self.mainHandler,
                                   savedNumber=objectNumber,
                                   filename=fileName))

            else:
                print "WARNING: Attempted to load unsupported objectType: " + str(
                    objectType)

        #print GFlist
        dc.destroy()
        return GFlist