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

Prasenjit Kapat kapatp at gmail.com
Tue Aug 31 03:54:41 UTC 2010


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. 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.

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.)

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

> 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.

-- 
Prasenjit




More information about the Rkward-devel mailing list