Bug 96256 - Ability to quickly copy a plot
Summary: Ability to quickly copy a plot
Status: RESOLVED FIXED
Alias: None
Product: kst
Classification: Applications
Component: general (show other bugs)
Version: 1.x
Platform: Compiled Sources Linux
: NOR wishlist
Target Milestone: ---
Assignee: kst
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-01-03 22:50 UTC by Andrew Walker
Modified: 2005-03-18 18:34 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Walker 2005-01-03 22:50:40 UTC
Version:            (using KDE KDE 3.2.1)
Installed from:    Compiled From Sources
OS:                Linux

It would be useful to have the ability to quickly copy an existing plot and place it in a specified window. There are numerous scenarios where the user would want different views of the same data. Oftem times the quickest way to achieve this is to copy an existing plot and then make modifications to the copy.

This could be achieved by the standard Ctrl-C Ctrl-V method, drag and drop copy, or menu item.
Comment 1 Andrew Walker 2005-01-12 00:16:43 UTC
1) This isn't implemented yet. Copy and Paste would obviously
not use the same functions as the menu item Copy.
2) It depends on _parent as we have to set _parent. Once _parent
is removed it can be removed here too.
3) DnD would be much the same as Copy and Paste.
4) The "action" copy was never used, but if its going to be we can
easily create a new method for the current copyObject()
5) Don't think I agree with this.
6) This seems to repeat 1)

The current implementation does what I set out to do. Make a quick
copy of a plot which can then be moved to the desired location.
As ever, once a new feature is in there are numerous proposals to
how it could be better and/or bigger. My plan (as mentioned in the
original bug report) was to also add Copy/Paste and DnD. This remains
to be done and so the bug remains open (96256).

-----Original Message-----
From: George Staikos [mailto:staikos@kde.org]
Sent: Tuesday, January 11, 2005 2:38 PM
To: kst@kde.org
Subject: [Kst] Concerns with current copy implementation



I'm a bit concerned about the design/implementation of the current copy
code.
It's good that it's in layout mode now, but I think the architecture is a
bit
off.  Here's why:

1) Copy&Paste is not usable with the new functions added since they
immediately do the copy and paste.
2) It depends too heavily on _parent, which we're trying to remove.  It can
be
implemented efficiently without it.
3) It would be useful for DnD too if implemented differently (as I
suggested,
something like KstViewObjectPtr duplicate() const;)
4) It mixes the "action" copy with the concept of copying a view object,
which
is abstract and reusable elsewhere.
5) Copy as an action should be toplevel.  There's no need to propagate it
lower.  Only duplication of object properties is object-implementation
specific.  I think Copy is a KstTopLevelView/KstViewWindow/KstApp action.
6) We actually need something more abstract for the concept of "copying"
since
we sometimes don't want to create objects or duplicate until the "paste"
happens.  This is particularly the case for DnD and traditional Copy+Paste.
Also useful for Undo/Redo I think.  This is why KstViewObjects have the
byte-stream encoding mechanism, and I think this is probably the proper way
to implement all of this stuff.

--
George Staikos
KDE Developer				http://www.kde.org/
Staikos Computing Services Inc.		http://www.staikos.net/
_______________________________________________
Kst mailing list
Kst@kde.org
https://mail.kde.org/mailman/listinfo/kst

Comment 2 George Staikos 2005-01-12 01:55:39 UTC
On Tuesday 11 January 2005 18:16, Andrew Walker wrote:
> 1) This isn't implemented yet. Copy and Paste would obviously
> not use the same functions as the menu item Copy.

   Then we have redundant actions, which means this implementation is wrong.

> 2) It depends on _parent as we have to set _parent. Once _parent
> is removed it can be removed here too.

 That statement isn't supported by this code:

+void KstPlotGroup::copyObject() {
+  KstApp::inst()->document()->setModified();
+  if (_parent) {
+    _parent->appendChild(new KstPlotGroup(*this), true);
+  }
+  QTimer::singleShot(0, KstApp::inst(), SLOT(updateDialogs()));
+}

> 3) DnD would be much the same as Copy and Paste.

   And DnD is already implemented and uses different mechanisms - the byte 
stream for remote dragging, and should use the duplicate() method I refer to 
for local dragging.

> 4) The "action" copy was never used, but if its going to be we can
> easily create a new method for the current copyObject()

   By action, I meant the "action of copying", not the KAction "copy".

> 5) Don't think I agree with this.

   What is there to disagree with if you still believe your comments in #2?  
You can't get access to _parent if the action is below _parent...  It is 
mandatory if there is no _parent.  Furthermore, copy is entirely a global 
action.  There is a clipboard and it is global.  Reimplementing copy in each 
object is redundant and unclean.

> 6) This seems to repeat 1)

   No, 6 is saying that simply not duplicating "immediately" is not enough, 
but we actually need an alternative implementation to the binary object too.

> The current implementation does what I set out to do. Make a quick
> copy of a plot which can then be moved to the desired location.
> As ever, once a new feature is in there are numerous proposals to
> how it could be better and/or bigger. My plan (as mentioned in the
> original bug report) was to also add Copy/Paste and DnD. This remains
> to be done and so the bug remains open (96256).

   And this is where the problem lies.  Hacking in a feature wherever it is 
easiest just to get the feature in is wrong.  It creates a maintenance 
problem and destroys the design and architecture that we already spent so 
much time on.  I designed the view objects architecture, I documented the way 
it works, and I even made suggestions before this latest code went in.  This 
code doesn't mesh with that architecture.  If you want or need to hack in 
features in an ad-hoc manner, that is what a branch is for (see: what was 
done for Planck in November).  The fact that you don't agree that the code in 
CVS fixes the bug even supports this.  It doesn't belong in CVS right now.  
If I committed everything I wrote into CVS before it was ready Kst would be 
very unstable.  It's not good behavior.  In fact, it stomps on a feature done 
by others - the design of view objects.  Killing one feature for the sake of 
saving time on another is equally wrong.

   Please, let's take design and collaboration seriously.  Kst has to last and 
has to be maintainable, and this is not the way to do it.

Comment 3 Andrew Walker 2005-01-12 18:34:36 UTC
You obviously feel strongly about this and are more than a
little upset. Feel free to implement it any way you choose.
As long as the current functionality remains I'm not overly
concerned with the implementation details.

Andrew

Comment 4 George Staikos 2005-03-18 03:20:34 UTC
*** Bug has been marked as fixed ***.
Comment 5 Andrew Walker 2005-03-18 18:34:31 UTC
CVS commit by arwalker: 

Re-enable Edit...Copy functionality after changes to plotmimesource.cpp

CCMAIL: 96256@bugs.kde.org


  M +1 -14     kst.cpp   1.292
  M +5 -0      kstviewwidget.cpp   1.72


--- kdeextragear-2/kst/kst/kst.cpp  #1.291:1.292
@@ -1683,18 +1683,5 @@ void KstApp::slotCopy() {
     KstViewWindow *vw = dynamic_cast<KstViewWindow*>(activeWindow());
     if (vw) {
-      KstTopLevelViewPtr tlv = vw->view();
-      if (tlv) {
-        QStringList plotList;
-        
-        for (KstViewObjectList::Iterator i = tlv->selectionList().begin(); 
-                                        i != tlv->selectionList().end(); ++i) {
-          plotList.append((*i)->tagName());
-        }
-      
-        if (plotList.size() > 0) {
-          PlotMimeSource *newplots = new PlotMimeSource(vw->caption(), plotList);
-          QApplication::clipboard()->setData(newplots, QClipboard::Clipboard);
-        }
-      }    
+      QApplication::clipboard()->setData(vw->view()->widget()->dragObject(), QClipboard::Clipboard);
     }
   }

--- kdeextragear-2/kst/kst/kstviewwidget.cpp  #1.71:1.72
@@ -58,4 +58,9 @@ QDragObject *KstViewWidget::dragObject()
       plots.append(_view->pressTarget()->tagName());
       vol.append(_view->pressTarget());
+    } else {
+      for (size_t i=0; i<_view->children().size(); i++) {
+        plots.append(_view->children()[i]->tagName());
+        vol.append(_view->children()[i]);
+      }
     }
   } else {