[rkward-devel] altering rk.graph.on and rk.graph.off

Stefan Rödiger stefan_roediger at gmx.de
Tue Aug 31 17:54:21 UTC 2010


Am Dienstag 31 August 2010, 05:54:41 schrieb Prasenjit Kapat:
> Hi Stefan,
> 
> On Mon, Aug 30, 2010 at 8:23 PM, Stefan Rödiger <stefan_roediger at gmx.de> 
wrote:
> > Hi Prasenjit,
> > 
> > I simply love the stuff you do. Never thought of it, now I won't miss it.
> > It is so convenient, smart and useful.
> 
> Thanks ;) I wish it was implemented in a better by R. Consider this
> example (nothing to do with rkward:
> 
> # print device list and the currently active device:
> f <- function () {print (dev.list ()); print (dev.cur ())}
> 
> x11 ()
> f ()
> plot (0,0)
> png (file = "tmpplot_dev3.png", width = 400)
> f ()
> plot (rnorm (100), rnorm (100))
> pdf (file = "tmpplot_dev4.pdf", width = 4)
> f ()
> dev.off () # closed pdf, x11 is now active !!
> f ()
> dev.off () # closes x11!! png is now active
> f ()
> dev.off () # closes png, FINALLY!
> 
> The problem, is that dev.prev () and dev.next () are implemented in a
> cyclical numeric order. In this sense,
> dev.off (which = dev.prev ())
> might make more sense, than, the currently implemented:
> dev.off (which = dev.next ())
> yet, the main problem would persist.
> 
> But in implementing a "linked list" of active devices would pose some
> logical problems (what happens if you close the previously active
> device as opposed to closing the current device?), and hence, I think,
> the simplistic dev.prev and dev.next exists. In that sense, my "fix"
> is buggy. Hmm...
> 
> > Thomas asked for feedback some weeks ago which I will try to address
> > later.
> 
> See if you can use the latest svn code.
> 
> > One stupid question. Right now it is possible to copy the preview plot to
> > the output. I wonder if it is possible to embed the corresponding code
> > too (since the user might be used to that in RKWard behaviour in
> > RKWard)?
> 
> Nice idea.

glad to hear

> I am guessing it should be easy to do, without the syntax
> highlighting. Looking at plugin/rkstandardcomponentgui.cpp, just
> sending  "code_property->Preprocess () + code_property->calculate () +
> code_property->printout ()" to .rk.cat.output () would do it. Of
> course, a button on the GUI somewhere.
> 

go for it ;)

> The button action will be more appropriate on the plugin dialog box
> rather than on the screen device window. (All though, I have arguments
> in favor of device window as well.)

why not both (at least for testing)?

> 
> I'll refrain from tinkering with that part of the code! Let Thomas come
> back.
> 

okay

> > Regards
> > Stefan
> > 
> > Am Samstag 28 August 2010, 03:22:44 schrieb Prasenjit Kapat:
> >> Hi,
> >> 
> >> I've modified the rk.graph.on () and rk.graph.off () functions
> >> slightly in trunk. Since many might be using these functions (as it is
> >> used in a lot of plugins), here is a little explanation:
> >> 
> >> As you may know, in R, after dev.off () closes the current device,
> >> dev.next () is set as active. This applies to RKWard as well. But,
> >> when
> >> 
> >> rk.graph.on (); ....; rk.graph.off (); # dev.off () is called inside
> >> rk.graph.off ()
> >> 
> >> is executed (in some form or the other), dev.next () is not
> >> necessarily the device that was active before rk.graph.on () was
> >> called. This creates a little confusion (at least to me, see [1]
> >> below) especially when copying a device to output via "Device > Copy
> >> device to output." Hence the fix.
> >> 
> >> For those following the trunk, let me know if you see any regressions
> >> or non-intuitive behavior. Of course, this only affects rk.graph.on
> >> and rk.graph.off and DOES NOT alter the usual (R's) behavior of
> >> dev.off ().
> >> 
> >> Regards,
> >> --
> >> Prasenjit
> >> 
> >> [1]
> >> x11 ()
> >> plot (0,0)
> >> x11 ()
> >> plot (1:10,1:10)
> >> dev.copy (device = rk.graph.on); rk.graph.off ()
> >> dev.off (); # closes the wrong device, w/o the fix.





More information about the Rkward-devel mailing list