Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
Zope
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
Zope
Commits
aa7c3ff4
Commit
aa7c3ff4
authored
Apr 24, 1998
by
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added Cut(Move) support for principia objects.
parent
a605fb5a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
132 additions
and
20 deletions
+132
-20
lib/python/OFS/CopySupport.py
lib/python/OFS/CopySupport.py
+60
-16
lib/python/OFS/Moniker.py
lib/python/OFS/Moniker.py
+54
-2
lib/python/OFS/ObjectManager.py
lib/python/OFS/ObjectManager.py
+17
-2
lib/python/OFS/main.dtml
lib/python/OFS/main.dtml
+1
-0
No files found.
lib/python/OFS/CopySupport.py
View file @
aa7c3ff4
"""Copy interface"""
__version__
=
'$Revision: 1.1
1
$'
[
11
:
-
2
]
__version__
=
'$Revision: 1.1
2
$'
[
11
:
-
2
]
import
Globals
,
Moniker
,
rPickle
,
tempfile
from
cPickle
import
loads
,
dumps
...
...
@@ -23,10 +23,21 @@ class CopyContainer:
# Return true if clipboard data is valid.
try
:
moniker
=
rPickle
.
loads
(
unquote
(
self
.
REQUEST
[
'clip_data'
]))
except
:
return
0
# Check for old versions of cookie so users dont need to
# restart browser after upgrading - just expire the old
# cookie.
if
not
hasattr
(
moniker
,
'op'
):
self
.
REQUEST
[
'RESPONSE'
].
setCookie
(
'clip_data'
,
'deleted'
,
path
=
'%s'
%
self
.
REQUEST
[
'SCRIPT_NAME'
],
expires
=
'Wed, 31-Dec-97 23:59:59 GMT'
)
self
.
REQUEST
[
'validClipData'
]
=
0
return
0
v
=
self
.
REQUEST
[
'validClipData'
]
=
moniker
.
assert
()
return
v
def
pasteFromClipboard
(
self
,
clip_id
=
''
,
clip_data
=
''
,
REQUEST
=
None
):
def
pasteFromClipboard
(
self
,
clip_id
=
''
,
clip_data
=
''
,
REQUEST
=
None
):
""" """
if
not
clip_data
:
return
eNoData
...
...
@@ -39,22 +50,44 @@ class CopyContainer:
try
:
self
.
_checkId
(
clip_id
)
except
:
return
self
.
pasteDialog
(
self
,
REQUEST
,
bad
=
1
,
moniker
=
(
moniker
,))
return
self
.
manage_paste
(
moniker
,
clip_id
,
REQUEST
)
def
manage_paste
(
self
,
moniker
,
clip_id
,
REQUEST
=
None
):
""" """
try
:
obj
=
moniker
.
bind
()
except
:
return
eNotFound
obj
=
obj
.
_getCopy
(
self
)
return
self
.
manage_paste
(
clip_id
,
obj
,
REQUEST
)
if
moniker
.
op
==
0
:
# Copy operation
obj
=
obj
.
_getCopy
(
self
)
obj
.
_setId
(
clip_id
)
self
.
_setObject
(
clip_id
,
obj
)
obj
.
_postCopy
(
self
)
if
REQUEST
is
not
None
:
return
self
.
manage_main
(
self
,
REQUEST
,
update_menu
=
1
)
return
''
if
moniker
.
op
==
1
:
# Move operation
prev_id
=
Moniker
.
absattr
(
obj
.
id
)
obj
.
aq_parent
.
_delObject
(
prev_id
)
while
hasattr
(
obj
,
'aq_self'
):
obj
=
obj
.
aq_self
obj
=
obj
.
__of__
(
self
)
self
.
_setObject
(
clip_id
,
obj
)
if
REQUEST
is
not
None
:
# Remove cookie after a move
REQUEST
[
'RESPONSE'
].
setCookie
(
'clip_data'
,
'deleted'
,
path
=
'%s'
%
REQUEST
[
'SCRIPT_NAME'
],
expires
=
'Wed, 31-Dec-97 23:59:59 GMT'
)
return
self
.
manage_main
(
self
,
REQUEST
,
update_menu
=
1
,
validClipData
=
0
)
return
''
def
manage_paste
(
self
,
clip_id
,
obj
,
REQUEST
=
None
):
""" """
obj
=
obj
.
_getCopy
(
self
)
obj
.
_setId
(
clip_id
)
self
.
_setObject
(
clip_id
,
obj
)
obj
.
_postCopy
(
self
)
if
REQUEST
is
not
None
:
return
self
.
manage_main
(
self
,
REQUEST
,
update_menu
=
1
)
return
''
Globals
.
default__class_init__
(
CopyContainer
)
...
...
@@ -86,10 +119,21 @@ class CopySource:
def
copyToClipboard
(
self
,
REQUEST
):
""" """
# Set a cookie containing pickled moniker
try
:
moniker
=
self
.
_getMoniker
()
try
:
m
=
self
.
_getMoniker
()
except
:
return
eNotSupported
m
.
op
=
0
REQUEST
[
'RESPONSE'
].
setCookie
(
'clip_data'
,
quote
(
dumps
(
m
,
1
)),
path
=
'%s'
%
REQUEST
[
'SCRIPT_NAME'
])
def
cutToClipboard
(
self
,
REQUEST
):
""" """
# Set a cookie containing pickled moniker
try
:
m
=
self
.
_getMoniker
()
except
:
return
eNotSupported
m
.
op
=
1
REQUEST
[
'RESPONSE'
].
setCookie
(
'clip_data'
,
quote
(
dumps
(
m
oniker
,
1
)),
quote
(
dumps
(
m
,
1
)),
path
=
'%s'
%
REQUEST
[
'SCRIPT_NAME'
])
...
...
lib/python/OFS/Moniker.py
View file @
aa7c3ff4
...
...
@@ -8,13 +8,13 @@ Object monikers
"""
__version__
=
'$Revision: 1.
2
$'
[
11
:
-
2
]
__version__
=
'$Revision: 1.
3
$'
[
11
:
-
2
]
import
Globals
class
Moniker
:
class
Old
Moniker
:
""" """
def
__init__
(
self
,
obj
=
None
,
p
=
1
):
if
obj
is
None
:
return
...
...
@@ -44,6 +44,58 @@ class Moniker:
return
obj
class
Moniker
:
""" """
def
__init__
(
self
,
obj
=
None
,
op
=
0
):
if
obj
is
None
:
return
pd
=
[]
ob
=
obj
while
1
:
if
not
hasattr
(
ob
,
'_p_oid'
):
break
pd
.
append
(
ob
.
_p_oid
)
if
not
hasattr
(
ob
,
'aq_parent'
):
break
ob
=
ob
.
aq_parent
pd
.
reverse
()
self
.
pd
=
pd
self
.
jr
=
obj
.
_p_jar
.
name
self
.
op
=
op
def
id
(
self
):
return
absattr
(
self
.
bind
().
id
)
def
mtype
(
self
):
return
absattr
(
self
.
bind
().
meta_type
)
def
assert
(
self
):
# Return true if the named object exists
if
self
.
jr
is
None
:
jar
=
Globals
.
Bobobase
.
_jar
else
:
jar
=
Globals
.
SessionBase
[
self
.
jr
].
jar
for
n
in
self
.
pd
:
if
not
jar
.
has_key
(
n
):
return
0
return
1
def
bind
(
self
):
# Return the real object named by this moniker
if
self
.
jr
is
None
:
jar
=
Globals
.
Bobobase
.
_jar
else
:
jar
=
Globals
.
SessionBase
[
self
.
jr
].
jar
ob
=
None
for
n
in
self
.
pd
:
o
=
jar
[
n
]
if
ob
is
not
None
:
o
=
o
.
__of__
(
ob
)
ob
=
o
return
ob
def
exact
(
self
,
other
):
# Check against another moniker to see if it
# refers to the exact same object in the exact
# same acquisition context.
return
self
.
jr
==
other
.
jr
and
self
.
pd
==
other
.
pd
def
absattr
(
attr
):
...
...
lib/python/OFS/ObjectManager.py
View file @
aa7c3ff4
__doc__
=
"""Object Manager
$Id: ObjectManager.py,v 1.4
0 1998/04/15 14:58:11 jim
Exp $"""
$Id: ObjectManager.py,v 1.4
1 1998/04/24 16:11:09 brian
Exp $"""
__version__
=
'$Revision: 1.4
0
$'
[
11
:
-
2
]
__version__
=
'$Revision: 1.4
1
$'
[
11
:
-
2
]
import
Persistence
,
App
.
Management
,
Acquisition
,
App
.
Undo
,
Globals
from
Globals
import
HTMLFile
,
HTMLFile
...
...
@@ -299,6 +299,17 @@ class ObjectManager(
'Paste' uses the parameters 'clip_id' and 'clip_data' to paste.
'Delete' removes the objects specified in 'ids'.
"""
if
submit
==
'Cut'
:
c
=
len
(
ids
)
if
(
c
<=
0
)
or
(
c
>
1
):
return
MessageDialog
(
title
=
'Invalid Selection'
,
message
=
'Please select one and only one item to move'
,
action
=
'./manage_main'
,)
obj
=
getattr
(
self
,
ids
[
0
])
err
=
obj
.
cutToClipboard
(
REQUEST
)
return
err
or
self
.
manage_main
(
self
,
REQUEST
,
validClipData
=
1
)
if
submit
==
'Copy'
:
c
=
len
(
ids
)
if
(
c
<=
0
)
or
(
c
>
1
):
...
...
@@ -313,6 +324,7 @@ class ObjectManager(
if
submit
==
'Paste'
:
return
self
.
pasteFromClipboard
(
clip_id
,
clip_data
,
REQUEST
)
if
submit
==
'Delete'
:
if
not
ids
:
return
MessageDialog
(
title
=
'No items specified'
,
...
...
@@ -537,6 +549,9 @@ class ObjectManager(
##############################################################################
#
# $Log: ObjectManager.py,v $
# Revision 1.41 1998/04/24 16:11:09 brian
# Added Cut(Move) support for principia objects.
#
# Revision 1.40 1998/04/15 14:58:11 jim
# Don't show confirmation after add or delete.
#
...
...
lib/python/OFS/main.dtml
View file @
aa7c3ff4
...
...
@@ -46,6 +46,7 @@
<TD></TD>
<TD COLSPAN="2">
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="Cut">
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="Copy">
<!--#if validClipData-->
<INPUT TYPE="SUBMIT" NAME="submit" VALUE="Paste">
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment