Conjunto de mudanças 806 no repositório publico


Ignorar:
Timestamp:
03/10/2005 16:45:10 (14 anos atrás)
Autor:
ciciliati
Mensagem:

Adicionados métodos para CUT/COPY e PASTE.
Ainda têm problemas, especialmente na seqüência de disparo dos eventos SDE.

Localização:
SDE/trunk
Arquivos:
3 editados

Legenda:

Não Modificado
Adicionado
Removido
  • SDE/trunk/StrDoc.py

    r802 r806  
    4141    return instance
    4242
    43 class StrDoc(OrderedFolder,CatalogAware,ObjectManager,PropertyManager):
     43#class StrDoc(OrderedFolder,CatalogAware,ObjectManager,PropertyManager):
     44class StrDoc(OrderedFolder,CatalogAware):
    4445    "Classe de documentos estruturados"
    4546    meta_type = 'StructuredDocument'
     
    6465        newElem = self.manage_addProduct['StructuredDoc'].StrDocElem_add(request)
    6566        return newElem.id
     67
     68    def addChildFromClipboard (self,ch_position='',obj=''):
     69
     70        request = self.REQUEST
     71        session = request.SESSION
     72       
     73        if session.has_key('SDE_clip_key'):
     74            if session['SDE_clip_key']:
     75                if obj:
     76                    self=obj
     77                clip_type = session['SDE_clip_type']     
     78                self.manage_pasteObjects(session['SDE_clip_key'])
     79                session['SDE_clip_type'] = ''
     80                session['SDE_clip_key'] = ''
     81                session['SDE_clip_object_type'] = ''
     82                #if clip_type == 'CUT':
     83                #    pass   
     84                #elif clip_type == 'COPY':
     85                #    pass
     86                #    # No caso de cópia: recriar IDs, verificar se objetos-filho são diferentes
     87                #    #self.setNewIdForChildren(recursive=1,obj=self)
     88
     89        return
    6690
    6791    # *** checksum
     
    381405        """ Renderiza o documento em XML, em estrutura especial para edição.
    382406        'action'   parameters             description
    383         EDIT       p_id                   renders the sd_element whose id=p_id with the attribute editing='yes'
     407        EDIT       p_id                   renders the sd_element which has (id=p_id) with the attribute editing='yes'
    384408        MOVE_UP    p_path, p_id           move one position up the element identified by p_id located at p_path
    385409        MOVE_DOWN  p_path, p_id           move one position down the element identified by p_id located at p_path
     
    389413                                          in REQUEST object there shall be a form called 'form_edit' containing
    390414                                          a object (textarea) called 'txa_text' and several objects (text) named
    391                                           tat_??????, where ?????? is an attribute name (sde_attr) """
     415                                          tat_??????, where ?????? is an attribute name (sde_attr)
     416        CUT        p_path, p_id           mark as 'cut' the element identified by p_id located at p_path and put it and its subtree in the clipboard
     417        COPY       p_path, p_id           put a copy of the referred element and its subtree in the clipboard
     418        PASTE      p_path, p_pos          put the contents of the clipboard under the element p_path """
     419       
    392420        request = self.REQUEST
    393421        response = request.RESPONSE
     
    416444            e = self.restrictedTraverse(p_path + p_id)
    417445            e.move_down()
     446        elif (action in ['CUT','COPY']):
     447            e = self.restrictedTraverse(p_path + p_id)
     448            e.add_to_clipboard(action,request)
     449        elif (action == 'PASTE'):
     450            e = self.restrictedTraverse(p_path)
     451            e.addChildFromClipboard(int(p_pos),obj=e)
    418452        if (action == 'EDIT'):
    419453            id_edit = p_id
  • SDE/trunk/StrDocElem.py

    r802 r806  
    3333def StrDocElem_add(self,REQUEST):
    3434    "Método para adicionar um objeto StrDocElem"
     35    print "### DEBUG: StrDocElem_add: id do self: %s - %s" % (self.id,`self`)
     36    print "### DEBUG: StrDocElem_add: id do self.this(): %s - %s" % (self.this().id,`self.this()`)
    3537    request = REQUEST
    3638    RESPONSE =  request.RESPONSE
    3739    temp_id = self.newElemId()
    3840    request.set('id',temp_id)
    39     instance = StrDocElem(request)
     41    instance = StrDocElem(request,self.this())
    4042    instance.reindex_object()
     43       
     44    # add the instance to the ObjectManager
    4145    self._setObject(request.id,instance)
    4246    instance=getattr(self.this(),request.id)
    43     defelem = ""
    44     if request.has_key('type'):
    45         instance.manage_changeProperties(type=request.type)
    46         defelem=instance.definitionElement(obj=instance)
    47         for p in defelem.objectValues('StrDocAttrDef'):
    48             instance.manage_addProperty(id='@'+p.id+'@', value='', type='string')
    4947    if request.has_key('position'):
    5048        offset = request.position
     
    5452    if offset > 0:
    5553        self.manage_move_objects_down (request, temp_id, offset)
    56     if hasattr(defelem,"initial_text"):
    57         if defelem.initial_text != "":
    58             instance.manage_changeProperties(text=defelem.initial_text)
    59     if 'SDE_AfterInsert' in defelem.objectIds('Script (Python)'):
    60         defelem.SDE_AfterInsert(instance)
    6154    return instance
    6255
    63 class StrDocElem(OrderedFolder,CatalogAware,ObjectManager,PropertyManager):
     56class StrDocElem(OrderedFolder,CatalogAware):
    6457    "Classe de elementos de documentos estruturados"
    6558    meta_type = 'StrDocElement'
    6659    filtered_meta_types = []
    6760
    68     def __init__(self,REQUEST):
     61    def __init__(self,REQUEST,container):
    6962        self.id = REQUEST.id
    7063        self._setProperty("type",'')
    7164        self._setProperty("text",'')
     65        if REQUEST.has_key('type'):
     66            self.type = REQUEST['type']
     67            doc=container.document()
     68            print "### DEBUG - __init__ - doc: %s - %s" % (doc.id, `doc`)
     69            defpath=container.definitionPath()+'/'+self.type
     70            print "### DEBUG - defpath : %s " % defpath
     71            defelem=doc.definitionElement(element_path=defpath)
     72            print "### DEBUG - defelem : %s - %s " % (defelem.id, `defelem`)
     73            for p in defelem.objectValues('StrDocAttrDef'):
     74                self.manage_addProperty(id='@'+p.id+'@', value='', type='string')
     75            if hasattr(defelem,"initial_text"):
     76                if defelem.initial_text != "":
     77                    self.text = defelem.initial_text
    7278
    7379    # *** attributes
     
    100106        else:
    101107            return ""
    102 
     108           
     109    def setNewIdForChildren(self, recursive=1, obj=""):
     110        if obj:           
     111            self=obj
     112        for t_obj in self.objectValues():           
     113            OrderedFolder.manage_renameObject(self, t_obj.id, self.newElemId())
     114            if recursive:
     115                t_obj.setNewIdForChildren (recursive=recursive, obj=t_obj)
     116
     117    def _get_id(self, id):
     118        # This is a overriding of the CopyContainer._get_id method,
     119        # located in OFS/CopySupport.py
     120        new_id = id
     121        session=self.REQUEST.SESSION
     122        if session.has_key('SDE_clip_type'):
     123            if session['SDE_clip_type'] == 'COPY':
     124                new_id = self.newElemId()
     125        print "### DEBUG: _get_id: old=%s new=%s" % (id,new_id)
     126        return new_id
     127       
    103128    # *** manage_beforeDelete (EVENT)
    104129    def manage_beforeDelete (self, item, containeR):
    105         defElem = self.definitionElement(obj=self)
     130        defElem = item.definitionElement(obj=item)
    106131        if 'SDE_BeforeDelete' in defElem.objectIds('Script (Python)'):
    107132            defElem.SDE_BeforeDelete(item)
    108133        return
     134       
     135    # *** manage_afterAdd (EVENT)
     136    def manage_afterAdd (self, item, containeR):
     137        print "### DEBUG: AfterAdd para o item %s" % item.id
     138        defElem = item.definitionElement(obj=item)
     139        print "### DEBUG: id do defelem: %s" % defElem.id
     140        if 'SDE_AfterInsert' in defElem.objectIds('Script (Python)'):
     141            print "### DEBUG: Achou Python de evento"
     142            print defElem.SDE_AfterInsert(item)
     143        return       
     144
     145    # *** manage_afterClone (EVENT)
     146    def manage_afterClone (self, item):
     147        print "### DEBUG: AfterClone para o item %s" % item.id
     148        session=self.REQUEST.SESSION
     149        if session.has_key('SDE_clip_type'):
     150            if session['SDE_clip_type'] == 'COPY':
     151                self.setNewIdForChildren(recursive=1,obj=self)
     152        return
     153#        return self.manage_afterAdd (item, containeR=None)
     154
    109155
    110156    # *** parent
     
    198244    def renderXMLforEditing (self,indent=0, id_edit='', path='', prev='', next=''):
    199245        "Método de renderização XML"
     246       
     247        session = self.REQUEST.SESSION
    200248        printed=""
    201249        spaces = ''
     
    227275            if next.type == self.type:
    228276                str_movedn_attrib = 'yes'
    229 
    230         printed+= '%s<sd_element id="%s" type="%s" type_name="%s" editing="%s" path="%s" up="%s" down="%s">\n' % (spaces, id, self.type, defelem.name(), str_edit_attrib, path, str_moveup_attrib, str_movedn_attrib)
     277               
     278        str_canpaste_attrib = 'no'
     279        if session.has_key('SDE_clip_key'):
     280            if session['SDE_clip_key']:
     281                for c in chd:
     282                    if c[0] == session['SDE_clip_object_type']:
     283                        str_canpaste_attrib = 'yes'
     284                        break;
     285
     286        printed+= '%s<sd_element id="%s" type="%s" type_name="%s" editing="%s" path="%s" up="%s" down="%s" paste="%s">\n' % (spaces, id, self.type, defelem.name(), str_edit_attrib, path, str_moveup_attrib, str_movedn_attrib, str_canpaste_attrib)
    231287        if defelem.has_own_value:
    232288            printed+= '%s    <sde_text>%s</sde_text>\n' % (spaces, self.text)
     
    276332        printed+= '%s</sd_element>\n' % spaces
    277333        return printed
     334       
     335    def add_to_clipboard (self, op_type, REQUEST):
     336        """ Método que coloca uma referência do objeto na área de teransferência (clipboard).
     337            se op_type = 'CUT', quando a operação de "paste" for realizada, o objeto será movido,
     338            senão (se op_type='COPY') o objeto será copiado. """
     339       
     340        session=self.REQUEST.SESSION
     341        session['SDE_clip_object_type'] = self.type   
     342        if op_type == 'COPY':
     343            v_clip_key = self.parent().manage_copyObjects(self.id)
     344        elif op_type == 'CUT':
     345            v_clip_key = self.parent().manage_cutObjects(self.id)
     346        else:
     347            return 0
     348       
     349        session['SDE_clip_type'] = op_type
     350        session['SDE_clip_key'] = v_clip_key
     351       
     352        return
    278353
    279354    def move_up(self):
  • SDE/trunk/version.txt

    r802 r806  
    1 StructuredDoc-v0.0.2
     1StructuredDoc-v0.0.3
Note: Veja TracChangeset para ajuda no uso do visualizador de conjunto de mudanças.
 

The contents and data of this website are published under license:
Creative Commons 4.0 Brasil - Atribuir Fonte - Compartilhar Igual.