]> SALOME platform Git repositories - samples/pylight.git/commitdiff
Salome HOME
Merge Python 3 porting.
authorrnv <rnv@opencascade.com>
Thu, 22 Jun 2017 16:30:51 +0000 (19:30 +0300)
committerrnv <rnv@opencascade.com>
Thu, 22 Jun 2017 16:30:51 +0000 (19:30 +0300)
1  2 
src/PYLIGHTGUI/PYLIGHTGUI.py

index 03e8dbd5d94f8899300a6ff1b4bf0fcf3c52bdbb,3fabc1d504fa53bf2c3926b3de273467c0ba924f..54e5744512e4c1d4f4c54afcade3efd1a6ee0f4a
@@@ -40,14 -40,10 +40,14 @@@ sg = libSALOME_Swig.SALOMEGUI_Swig(
  # Used to store actions, menus, toolbars, etc...
  ################################################
  
 +# data model
 +__data_model__ = None
 +
  class GUIcontext:
  
      # constructor
      def __init__( self ):
 +        global __data_model__
          # Load File action
          sgPyQt.createAction(dict_actions["loadfile"], "Load text File", "Load text file")
          # Save File action
          sgPyQt.createMenu( dict_actions["eraseLine"],   menuPyLight, 10 );
  
          # Create DataModel
 -        self.DM = PYLIGHT_DataModel.PYLIGHT_DataModel()
 -
 +        if __data_model__ is None:
 +            __data_model__ = PYLIGHT_DataModel.PYLIGHT_DataModel()
 +            pass
 +            
          pass # def __init__( self )
  
      pass # class GUIcontext
  # Global variables and functions
  ################################################
  
 -###
 -# get active study ID
 -###
 -def _getStudyId():
 -    return sgPyQt.getStudyId()
 -
  # verbosity level
  __verbose__ = None
  
@@@ -120,49 -120,81 +120,49 @@@ def verbose()
          pass
      return __verbose__
  
 -# study-to-context map
 -__study2context__   = {}
 -# current context
 -__current_context__ = None
 -
 -###
 -# get current GUI context
 -###
 -def _getContext():
 -    global __current_context__
 -    return __current_context__
 -
 -###
 -# set and return current GUI context
 -# study ID is passed as parameter
 -###
 -def _setContext( studyID ):
 -    global __study2context__, __current_context__
 -    if studyID not in __study2context__:
 -        __study2context__[studyID] = GUIcontext()
 -        pass
 -    __current_context__ = __study2context__[studyID]
 -    return __current_context__
 -
  ################################################
  
  # Create actions and menus
  def initialize():
-     if verbose(): print "PYLIGHTGUI::initialize()"
+     if verbose(): print("PYLIGHTGUI::initialize()")
      return
  
  # called when module is activated
  # returns True if activating is successfull and False otherwise
  def activate():
-     if verbose() : print "PYLIGHTGUI.activate()"
 -    if verbose() : print("PYLIGHTGUI.activate() : study : %d" % _getStudyId())
 -    ctx = _setContext( _getStudyId() )
++    if verbose() : print("PYLIGHTGUI.activate()")
 +    GUIcontext()
      return True
  
  # called when module is deactivated
  def deactivate():
-     if verbose() : print "PYLIGHTGUI.deactivate()"
 -    if verbose() : print("PYLIGHTGUI.deactivate() : study : %d" % _getStudyId())
 -    pass
 -
 -# called when active study is changed
 -# active study ID is passed as parameter
 -def activeStudyChanged( studyID ):
 -    if verbose() : print("PYLIGHTGUI.activeStudyChanged(): study : %d" % studyID)
 -    ctx = _setContext( _getStudyId() )
++    if verbose() : print("PYLIGHTGUI.deactivate()")
      pass
  
  # Process GUI action
  def OnGUIEvent(commandID):
-     if verbose() : print "PYLIGHTGUI::OnGUIEvent : commandID = %d" % commandID
-     if dict_command.has_key( commandID ):
+     if verbose() : print("PYLIGHTGUI::OnGUIEvent : commandID = %d" % commandID)
+     if commandID in dict_command:
          try:
              dict_command[commandID]()
          except:
              traceback.print_exc()
      else:
-        if verbose() : print "The command is not implemented: %d" % commandID
+        if verbose() : print("The command is not implemented: %d" % commandID)
      pass
  
  # Customize popup menu
  def createPopupMenu(popup, context):
-     if verbose() : print "PYLIGHTGUI.createPopupMenu(): context = %s" % context
 +    global __data_model__
+     if verbose() : print("PYLIGHTGUI.createPopupMenu(): context = %s" % context)
  
      if context != 'ObjectBrowser':
          return
      
 -    studyId = _getStudyId()
 -    ctx = _setContext( studyId )
      selcount = sg.SelectedCount()
      if selcount == 1:
          entry = sg.getSelected( 0 )
 -        obj = ctx.DM.getObject(entry)
 +        obj = __data_model__.getObject(entry)
          if obj is not None:
              if obj.getText() != "\n":
                  # Line is selected
  
  # For saving data in the study
  def saveFiles(prefix):
-     if verbose(): print "PYLIGHTGUI::saveFile()"
 +    global __data_model__
 -    ctx = _setContext( _getStudyId() )
+     if verbose(): print("PYLIGHTGUI::saveFile()")
      postfix = "PYLIGHT.txt"
      filename = prefix+postfix
 -    ctx.DM.saveFile(filename)
 +    __data_model__.saveFile(filename)
      return postfix
  
  # For restore data from the study
  def openFiles(filelist):
-     if verbose(): print "PYLIGHTGUI::openFile()"
 +    global __data_model__
 -    ctx = _setContext( _getStudyId() )
+     if verbose(): print("PYLIGHTGUI::openFile()")
      filename =  filelist[0]
      filename.append(filelist[1])
 -    ctx.DM.loadFile(filename)
 +    __data_model__.loadFile(filename)
      return True
  
  # Loading a text file
  def loadfile():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      aFilter = "Text files (*.txt)"
      filename = QFileDialog.getOpenFileName(sgPyQt.getDesktop(), "Open text file", "", aFilter, "Choose a text file to open")
  
      if isinstance(filename,tuple) and len(filename) >=2:
         filename = filename[0]
  
-     filename = unicode(filename)
      if len(filename) == 0:
          return
      
      if os.access(str(filename),os.R_OK):
 -        ctx.DM.loadFile(filename)
 +        __data_model__.loadFile(filename)
      else:
          QMessageBox.warning(sgPyQt.getDesktop(),
                              "Error!",
                              "Can not read file:\n%s"%(filename))
          pass
 -    sg.updateObjBrowser(True)
 +    sg.updateObjBrowser()
      pass
  
  # Saving a text file
  def savefile():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      aFilter = "Text files (*.txt)"
      filename = QFileDialog.getSaveFileName(sgPyQt.getDesktop(),"Save text file", "", aFilter, "Choose a text file to save")
  
      if isinstance(filename,tuple) and len(filename) >=2:
          filename = filename[0]
  
-     filename = unicode(filename)
      if filename.endswith(".txt") == 0:
          filename+=".txt"
          pass
      fn = filename
      # Get directory name and check access
      if os.access(str(fn[:fn.rindex(os.path.sep)]), os.W_OK):
 -        ctx.DM.saveFile(filename)
 +        __data_model__.saveFile(filename)
      else:
          QMessageBox.warning(sgPyQt.getDesktop(),
                              "Error!",
@@@ -257,7 -285,7 +253,7 @@@ def insertLine()
      '''
      Insert new line in the selected paragraph.
      '''
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      #Get result
      res = QInputDialog.getText(sgPyQt.getDesktop(),
                                 "Add new line",
      # Nb selected objects
      selcount = sg.SelectedCount()
      # Nb object in the Data Model
 -    paragrCount = len(ctx.DM.getParagraphs())
 +    paragrCount = len(__data_model__.getParagraphs())
  
      # Create first paragraph
      if paragrCount == 0:
 -        ctx.DM.createObject()
 +        __data_model__.createObject()
          # If line not empty create first line
          if text != "\n":
 -            ctx.DM.createObject(text,ctx.DM.getParagraphs()[0])
 -        sg.updateObjBrowser(True)
 +            __data_model__.createObject(text,__data_model__.getParagraphs()[0])
 +        sg.updateObjBrowser()
          return
      # Create paragraph
      if text == "\n":
 -        ctx.DM.createObject()
 -        sg.updateObjBrowser(True)
 +        __data_model__.createObject()
 +        sg.updateObjBrowser()
          return
      else:
          if selcount == 0:
              return
          if selcount == 1:
              entry = sg.getSelected( 0 )
 -            obj = ctx.DM.getObject(entry)
 +            obj = __data_model__.getObject(entry)
              if obj is not None:
                  # Create line
                  if(obj.getText() == "\n"):
 -                    ctx.DM.createObject(text,entry)
 -                    sg.updateObjBrowser(True);
 +                    __data_model__.createObject(text,entry)
 +                    sg.updateObjBrowser();
                      return
                  else:
                      QMessageBox.warning(sgPyQt.getDesktop(),
          
  # Edit selected line
  def editLine():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      if sg.SelectedCount() == 1:
          entry = sg.getSelected( 0 )
 -        obj = ctx.DM.getObject(entry)
 +        obj = __data_model__.getObject(entry)
-         if(obj.getText() != "\n"):
+         if(obj is not None and obj.getText() != "\n"):
              #Get text line
              res = QInputDialog.getText(sgPyQt.getDesktop(),
                                         "Edit line",
          QMessageBox.information(sgPyQt.getDesktop(),
                                  'Info',
                                  'Please, select one line!')
 -    sg.updateObjBrowser(True);
 +    sg.updateObjBrowser();
      pass
  
  # Remove selected lines
  def removeLine():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      selcount = sg.SelectedCount()
      onlyLines = True
      lines = []
      while selcount != 0:
          entry = sg.getSelected( selcount - 1)
          #Check what only lines selected
-         if __data_model__.getObject(entry).getText() == "\n":
 -        obj = ctx.DM.getObject(entry)
++        obj = __data_model__.getObject(entry)
+         if obj is None:
+             continue
+         if obj.getText() == "\n":
              onlyLines = False
              break
          lines.append(entry)
                  renderer.RemoveActor(actor)
                  pass
              pass
 -        ctx.DM.removeObjects(lines)
 -        sg.updateObjBrowser(True)
 +        __data_model__.removeObjects(lines)
 +        sg.updateObjBrowser()
          pass
      pass
  
  # Remove all lines from all paragraphs
  def clearAll():
 -    ctx = _setContext( _getStudyId() )
 -    paragraphs = ctx.DM.getParagraphs()
 +    global __data_model__
 +    paragraphs = __data_model__.getParagraphs()
      for paragr in paragraphs:
          lines = sgPyQt.getChildren(paragr)
 -        ctx.DM.removeObjects(lines)
 +        __data_model__.removeObjects(lines)
          renderer=libSalomePy.getRenderer()
          for l in lines:
              actor = getActor(l)
                  renderer.RemoveActor(actor)
                  pass
              pass
 -    sg.updateObjBrowser(True)
 +    sg.updateObjBrowser()
      pass
  
  # Display the selected line
  def displayLine():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      if sg.SelectedCount() != 1:
          return
      entry = sg.getSelected(0)
-     text = __data_model__.getObject(entry).getText()
+     obj = ctx.DM.getObject(entry)
+     if obj is None:
+         QMessageBox.information(sgPyQt.getDesktop(),
+                                 'Info',
+                                 'Please, select line!')
+         return
+     text = obj.getText()
      if text == "\n":
          return
      renderer=libSalomePy.getRenderer()
      txtPr = vtk.vtkTextProperty()
      txtPr.SetFontSize(30)
      actor.SetTextProperty(txtPr)
-     for act in  dict_actors.values():
+     for act in  list(dict_actors.values()):
          renderer.RemoveActor(act)
      renderer.AddActor(actor)
      pass
  
  # Clear remove all lines under selected paragraph
  def clearParagraph():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      lines = sgPyQt.getChildren(sg.getSelected(0))
 -    ctx.DM.removeObjects(lines)
 -    sg.updateObjBrowser(True)
 +    __data_model__.removeObjects(lines)
 +    sg.updateObjBrowser()
      pass
  
  # Erase the selected line
  def eraseLine():
 -    ctx = _setContext( _getStudyId() )
 +    global __data_model__
      if sg.SelectedCount() != 1:
          return
      entry = sg.getSelected(0)
-     text = __data_model__.getObject(entry).getText()
 -    obj = ctx.DM.getObject(entry)
++    obj = __data_model__.getObject(entry)
+     if obj is None:
+         QMessageBox.information(sgPyQt.getDesktop(),
+                                 'Info',
+                                 'Please, select line!')
+         return
+     text = obj.getText()
      if text == "\n":
          return
      renderer=libSalomePy.getRenderer()
  # Return vtkActor by entry
  def getActor(entry):
      entry = str(entry)
-     if dict_actors.has_key(entry):
+     if entry in dict_actors:
          return dict_actors[entry]
      return None