From: Jim L. <jc...@au...> - 2010-06-05 08:30:05
|
Hi, I would like to be able to have some of my ROX apps use drag-and-drop to set where generated results are to be saved. Alas I am still clueless about Python. And my programs tend to be in 'C'. So I'd welcome some help with the following. I have found the tutorial example at http://roscidus.com/desktop/Tutorials/Saving and that makes sense. (It is also a lot easier than my struggles to work out how to use this on a more 'primitive' level with GTK+ in 'C' ! :-) ) However the above isn't quite want I need for two reasons. 1) It generates a limited amount of data first, then saves it using the drag-and-drop. 2) The entire example is in Python. I want to be able to do as follows. When the ROX app is started it presents a drag-and-drop save box so the user can give the file a name and drop its icon onto the filer window for the directory where the user wants the results to be saved. The icon should have the correct filetype. (e.g. Wave or Veusz as relevant). The app then passes this name to an executable which I have written in 'C' and compiled with GCC. Thus letting me do all the number-bashing using code I'm more familiar with (and am tendeding to produce by modifying existing 'C' code from my Iyonix). I assume that Python can use the drag and drop to return the full pathname of the file to which later saving is to be made. I also assume it can pass this as a variable using the normal 'command and environment' method'. But being clueless I have no idea how to do this for a ROX app. I've looked at various 'tutorials' and 'guides' on the web for Python but not found what I am after. So I'm asking here as I suspect this is where I'm most likely to find someone who already knows the answers. :-) I have now put up some ROX apps for sound at http://www.audiomisc.co.uk/software/index.html some of these do save data, but by a method that is rather crude and inflexible since it takes the output location from a 'settings' file the user has to edit before use. So I'd prefer the above as I suspect users will find it rather easier and more convenient. Thanks, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Stephen W. <st...@ke...> - 2010-06-05 08:56:15
|
Jim Lesurf <jc...@au...> wrote: > Hi, > > I would like to be able to have some of my ROX apps use drag-and-drop to > set where generated results are to be saved. Alas I am still clueless about > Python. And my programs tend to be in 'C'. So I'd welcome some help with > the following. > > I have found the tutorial example at > > http://roscidus.com/desktop/Tutorials/Saving > > and that makes sense. (It is also a lot easier than my struggles to work > out how to use this on a more 'primitive' level with GTK+ in 'C' ! :-) ) > > However the above isn't quite want I need for two reasons. > > 1) It generates a limited amount of data first, then saves it using the > drag-and-drop. > > 2) The entire example is in Python. What you want is ROX-CLib http://roscidus.com/desktop/ROX-CLib and the GtkSavebox widget it provides. The AppFactory source code contains an example of using GtkSavebox, see the begin_save() function. -- Stephen Watson http://www.kerofin.demon.co.uk/ If you read this on a mailing list, send any reply back to the list and not to me. Not even CC. Given cash, I speak the truth |
From: Jim L. <jc...@au...> - 2010-06-05 13:18:50
|
In article <gem...@ke...>, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: > > Hi, > > > > I would like to be able to have some of my ROX apps use drag-and-drop > > to set where generated results are to be saved. [snip] > What you want is ROX-CLib http://roscidus.com/desktop/ROX-CLib and the > GtkSavebox widget it provides. Thanks for pointing this out to me, alas, it seems to be showing my lack of understanding yet again!... I've just been trying to use the latest version from the above. Attempts to use it open an xterm that - I assume - is trying to build or compile the relevant support. But this fails. I get a lost list of 'checking' items. Some seem to be looking for f77 (i.e. fortran... eh??) and report a 'no'. Then it gets to saying I don't have GCC 4... This also says 'no'. I then get told that pkg-config is missing and I can get this from the development downloads from gtk.org. Then the process fails to continue. Puzzled for various reasons. Firstly the apparent reference to fortran. I guess I am totally misunderstanding that! Then, I *do* have GCC. Version 4.3.3 according to gcc -dumpversion. Then, I've visited gtk.org but can't find what I am supposed to download or install. I've tried using search phrases on that site (and with synaptic) like 'pkg-config' and variations on gtk+. But can't identify what I'd need. I think I do have gtk+ on the machine since I think other programs use it. So I guess what is missing is some specific aspects of the development support. But I am currently puzzled. Also, whilst reporting, can I please check the following? Am I correct to think that a user would not need to install ROX-CLib to be able to use what I compiled using it? Or does using it mean the program I write will only work OK for ROX users who have (unlike myself at this point! :-) ) successfully installed ROX-CLib? My worry here is that although I want if I can to make the apps easier to use, I want to avoid other barriers to use. At present non-ROX users can exec my AppRun followed by any relevant input filenames. Thanks, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Stephen W. <st...@ke...> - 2010-06-06 10:38:06
|
Jim Lesurf <jc...@au...> wrote: > In article <gem...@ke...>, Stephen > Watson <st...@ke...> wrote: > > Jim Lesurf <jc...@au...> wrote: > > > > Hi, > > > > > > I would like to be able to have some of my ROX apps use drag-and-drop > > > to set where generated results are to be saved. > [snip] > > > What you want is ROX-CLib http://roscidus.com/desktop/ROX-CLib and the > > GtkSavebox widget it provides. > > Thanks for pointing this out to me, alas, it seems to be showing my lack of > understanding yet again!... > > I've just been trying to use the latest version from the above. Attempts to > use it open an xterm that - I assume - is trying to build or compile the > relevant support. But this fails. > > I get a lost list of 'checking' items. Some seem to be looking for f77 > (i.e. fortran... eh??) and report a 'no'. Then it gets to saying I don't > have GCC 4... This also says 'no'. > > I then get told that pkg-config is missing and I can get this from the > development downloads from gtk.org. Then the process fails to continue. That should have been installed with the gtk-devel packages with your distro. If it's working then pkg-config --modversion gtk+-2.0 will print your version of GTK. > Puzzled for various reasons. > > Firstly the apparent reference to fortran. I guess I am totally > misunderstanding that! That's just standard autoconf output where it tries to figure out everything about your development environment. It may be safely ignored. > Then, I *do* have GCC. Version 4.3.3 according to gcc -dumpversion. That bit is optional, and the test seems to get confused by the current output from gcc --version, so just ignore it for now. > Then, I've visited gtk.org but can't find what I am supposed to download or > install. I've tried using search phrases on that site (and with synaptic) > like 'pkg-config' and variations on gtk+. But can't identify what I'd need. > > I think I do have gtk+ on the machine since I think other programs use it. > So I guess what is missing is some specific aspects of the development > support. But I am currently puzzled. Are you installing GTK from source? If not, which distro are you using as pkg-config must be a dependency of gtk-devel (and most of the other -devel packages). If you are installing from source, please reconsider. It's not for the faint of heart, or the inexperienced. If you have been developing with GTK already, how have you managed to link it in? > Also, whilst reporting, can I please check the following? Am I correct to > think that a user would not need to install ROX-CLib to be able to use what > I compiled using it? Or does using it mean the program I write will only > work OK for ROX users who have (unlike myself at this point! :-) ) > successfully installed ROX-CLib? My worry here is that although I want if I > can to make the apps easier to use, I want to avoid other barriers to use. > At present non-ROX users can exec my AppRun followed by any relevant input > filenames. It acts like a shared library by default, so the end users must have it installed. You could try linking to the static library, then they wouldn't need to install ROX-CLib, but I've not tried that to see if it works. -- Stephen Watson http://www.kerofin.demon.co.uk/ If you read this on a mailing list, send any reply back to the list and not to me. Not even CC. That's wierd, new teeth! |
From: Jim L. <jc...@au...> - 2010-06-06 13:53:27
|
In article <gem...@ke...>, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: > > In article <gem...@ke...>, > > Stephen Watson <st...@ke...> wrote: > > > Jim Lesurf <jc...@au...> wrote: > > to > > use it open an xterm that - I assume - is trying to build or compile > > the relevant support. But this fails. > > > > I get a lost list of 'checking' items. Some seem to be looking for f77 > > (i.e. fortran... eh??) and report a 'no'. Then it gets to saying I > > don't have GCC 4... This also says 'no'. > > > > I then get told that pkg-config is missing and I can get this from the > > development downloads from gtk.org. Then the process fails to continue. > That should have been installed with the gtk-devel packages with your > distro. If it's working then pkg-config --modversion gtk+-2.0 will > print your version of GTK. It gives me "The program 'pkg-config' is not currently installed" and tells me to use sudo apt-get install to get it. [snip bits to ignore] > > Then, I've visited gtk.org but can't find what I am supposed to > > download > or > > install. I've tried using search phrases on that site (and with > > synaptic) like 'pkg-config' and variations on gtk+. But can't identify > > what I'd > need. > > > > I think I do have gtk+ on the machine since I think other programs use > > it. So I guess what is missing is some specific aspects of the > > development support. But I am currently puzzled. > Are you installing GTK from source? If not, which distro are you using > as pkg-config must be a dependency of gtk-devel (and most of the other > -devel packages). If you are installing from source, please reconsider. > It's not for the faint of heart, or the inexperienced. I'm not installing from source. I am using Xubuntu 9.04. I've assumed GTK+ was already installed since I assumed some of the apps I've been using depend on it. There is a gtk-2.0 directory in my user ./config directory. And items like a directory /usr/lib/gtk-2.0. > If you have been developing with GTK already, how have you managed to > link it in? I haven't done any gtk developing. So I assume the problem is that I lack pkg-config for that reason. However when I either click on the directory for ROX-Clib, or use the command for AppRun detailed in the notes I get what I reported which seems to need pkg-config. So I assume this means I need to install pkg-config. My concern at that point was the other 'no' items as I wondered if there were loads of other things I'd need as well. > > Also, whilst reporting, can I please check the following? Am I correct > > to think that a user would not need to install ROX-CLib to be able to > > use > what > > I compiled using it? Or does using it mean the program I write will > > only work OK for ROX users who have (unlike myself at this point! :-) > > ) successfully installed ROX-CLib? My worry here is that although I > > want if > I > > can to make the apps easier to use, I want to avoid other barriers to > > use. At present non-ROX users can exec my AppRun followed by any > > relevant input filenames. > It acts like a shared library by default, so the end users must have it > installed. You could try linking to the static library, then they > wouldn't need to install ROX-CLib, but I've not tried that to see if it > works. Given this I am wondering if it might be simpler for me to revert to my 'Plan A'. This would be that I found out how to write a simple AppRun in Python that A) detected when the app icon was clicked or an input file was dropped on it. B) Gave me a savebox to drag and drop so I could use that to place and name the output file. C) then passed that name (and the name of the input file) to the executable compiled 'C' to recover the names and do the actual processing, and then save the file contents. I assume that would then work with the normal ROX desktops without user needing ROX-Clib? My problem, though, is being clueless about Python. The 'tutorials' I've found on the web really don't explain this to me. This may be because most Linux users don't think in RO-like terms of having output file destinations defined by drag-and-drop of an output file icon. (The examples seem obsessed with 'tree views' which are a PITA from my RO-like preference! :-) ) The closest I've got so far is to look at the 'Archive' app to see how that does input and output drag-and-drop in the hope I can use the same kind of code to get and pass the input/output filenames to my own compiled code. If someone could explain this as well, I'd welcome the help! At present I am looking at the code and trying to disentangle what does what! :-) Slainte, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Stephen W. <st...@ke...> - 2010-06-06 16:49:39
|
Jim Lesurf <jc...@au...> wrote: > In article <gem...@ke...>, Stephen > Watson <st...@ke...> wrote: > > Jim Lesurf <jc...@au...> wrote: > > > > In article <gem...@ke...>, > > > Stephen Watson <st...@ke...> wrote: > > > > Jim Lesurf <jc...@au...> wrote: > > > > to > > > use it open an xterm that - I assume - is trying to build or compile > > > the relevant support. But this fails. > > > > > > I get a lost list of 'checking' items. Some seem to be looking for f77 > > > (i.e. fortran... eh??) and report a 'no'. Then it gets to saying I > > > don't have GCC 4... This also says 'no'. > > > > > > I then get told that pkg-config is missing and I can get this from the > > > development downloads from gtk.org. Then the process fails to continue. > > > That should have been installed with the gtk-devel packages with your > > distro. If it's working then pkg-config --modversion gtk+-2.0 will > > print your version of GTK. > > It gives me "The program 'pkg-config' is not currently installed" and tells > me to use sudo apt-get install to get it. Well, that would be your answer then. > [snip bits to ignore] > > > > Then, I've visited gtk.org but can't find what I am supposed to > > > download > > or > > > install. I've tried using search phrases on that site (and with > > > synaptic) like 'pkg-config' and variations on gtk+. But can't identify > > > what I'd > > need. > > > > > > I think I do have gtk+ on the machine since I think other programs use > > > it. So I guess what is missing is some specific aspects of the > > > development support. But I am currently puzzled. > > > Are you installing GTK from source? If not, which distro are you using > > as pkg-config must be a dependency of gtk-devel (and most of the other > > -devel packages). If you are installing from source, please reconsider. > > It's not for the faint of heart, or the inexperienced. > > I'm not installing from source. I am using Xubuntu 9.04. I've assumed GTK+ > was already installed since I assumed some of the apps I've been using > depend on it. There is a gtk-2.0 directory in my user ./config directory. > And items like a directory /usr/lib/gtk-2.0. Distros tend to split libraries into two packages: Y and Y-devel. Y contains the shared libraries and some other files, Y-devel the header files and static libraries. You only need pkg-config if you're using the Y-devel package because pkg-config is used to locate the header files and libraries. You probably have the gtk package installed, but not gtk-devel (or whatever Xubuntu calls them). > > If you have been developing with GTK already, how have you managed to > > link it in? > > I haven't done any gtk developing. So I assume the problem is that I lack > pkg-config for that reason. > > However when I either click on the directory for ROX-Clib, or use the > command for AppRun detailed in the notes I get what I reported which seems > to need pkg-config. So I assume this means I need to install pkg-config. My > concern at that point was the other 'no' items as I wondered if there were > loads of other things I'd need as well. > > > > Also, whilst reporting, can I please check the following? Am I correct > > > to think that a user would not need to install ROX-CLib to be able to > > > use > > what > > > I compiled using it? Or does using it mean the program I write will > > > only work OK for ROX users who have (unlike myself at this point! :-) > > > ) successfully installed ROX-CLib? My worry here is that although I > > > want if > > I > > > can to make the apps easier to use, I want to avoid other barriers to > > > use. At present non-ROX users can exec my AppRun followed by any > > > relevant input filenames. > > > It acts like a shared library by default, so the end users must have it > > installed. You could try linking to the static library, then they > > wouldn't need to install ROX-CLib, but I've not tried that to see if it > > works. > > Given this I am wondering if it might be simpler for me to revert to my > 'Plan A'. This would be that I found out how to write a simple AppRun in > Python that > > A) detected when the app icon was clicked or an input file was dropped on > it. > > B) Gave me a savebox to drag and drop so I could use that to place and name > the output file. > > C) then passed that name (and the name of the input file) to the executable > compiled 'C' to recover the names and do the actual processing, and then > save the file contents. > > I assume that would then work with the normal ROX desktops without user > needing ROX-Clib? They would need ROX-Lib instead. -- Stephen Watson http://www.kerofin.demon.co.uk/ If you read this on a mailing list, send any reply back to the list and not to me. Not even CC. Stranded here on planet earth / It's not much but it could be worse |
From: Thomas L. <ta...@gm...> - 2010-06-06 18:13:09
|
On 6 June 2010 17:49, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: [...] >> I assume that would then work with the normal ROX desktops without user >> needing ROX-Clib? > > They would need ROX-Lib instead. Yes. BTW, if you express the dependency using Zero Install then you can use Zero2Bundle to make a static bundle (i.e. your program + ROX-Lib): http://roscidus.com/desktop/Zero2Bundle That would also allow people who prefer to use shared libraries to use it that way (via AddApp), and would let GNOME and KDE users use it too (nautilus at least supports drag-and-drop saving these days). For example, you should be able to make a static bundle of Edit with this command (all one line): 0launch --not-before=0.2 http://rox.sourceforge.net/2006/interfaces/Zero2Bundle.xml http://rox.sourceforge.net/2005/interfaces/Edit If you look inside the resulting "Edit" app dir, you'll see subdirectories called "Edit" and "ROX-Lib2" containing the two components. Note: the bundle doesn't require Zero Install to run, only to create it. -- Dr Thomas Leonard ROX desktop / Zero Install GPG: 9242 9807 C985 3C07 44A6 8B9A AE07 8280 59A5 3CC1 GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA |
From: Jim L. <jc...@au...> - 2010-06-07 07:47:04
|
In article <gem...@ke...>, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: > > > > It gives me "The program 'pkg-config' is not currently installed" and > tells > > me to use sudo apt-get install to get it. > Well, that would be your answer then. [snip] > Distros tend to split libraries into two packages: Y and Y-devel. Y > contains the shared libraries and some other files, Y-devel the header > files and static libraries. You only need pkg-config if you're using > the Y-devel package because pkg-config is used to locate the header > files and libraries. [snip] > > Given this I am wondering if it might be simpler for me to revert to > > my 'Plan A'. This would be that I found out how to write a simple > > AppRun in Python that > > > > A) detected when the app icon was clicked or an input file was dropped > > on it. > > > > B) Gave me a savebox to drag and drop so I could use that to place and > name > > the output file. > > > > C) then passed that name (and the name of the input file) to the > executable > > compiled 'C' to recover the names and do the actual processing, and > > then save the file contents. > > > > I assume that would then work with the normal ROX desktops without > > user needing ROX-Clib? > They would need ROX-Lib instead. Yes, fair enough. :-) However I think what surprises me here is that so far as I can recall ROX-Lib installed without any problems. Yet IIUC CLib seems to require even users of developed apps that use it to install a 'development' item (pkg-config) which seems absent from a distro as common as Xubuntu. Anyway, thinking about this I feel I do prefer (if it is possible and I can work out how to do it) to use the approach of using python (and ROX-Lib) to provide the drag-and-drop, and have it then call the object I've compiled from 'C'. One reason for this is I want the main code to be easily accessible by non-ROX users via a terminal or just issuing the usual sort of <object> <variable> command. Another is that I've played with the python example at http://roscidus.com/desktop/Tutorials/Saving and it works quite nicely for A and B above. So I'm hoping that there is a simple way to extract the full pathname of the file created by the drag-and-drop and then pass that on to launching the main code. Is there not a method for reading this name from the class of object for 'box'. etc? Either way I clearly have a lot to learn! So me feeling of preferring python here may well be a mistake on my part. But I am tending to feel I should learn more about python anyway, so that is another reason for seeing if that route is possible. So if anyone can advise on how to extract the pathname of the saved file from the SaveBox (as above example) and then how to issue the command, I'd welcome the help. In the meantime I'll keep experimenting and trying to learn. Thanks, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Stephen W. <st...@ke...> - 2010-06-07 16:56:26
|
Jim Lesurf <jc...@au...> wrote: > In article <gem...@ke...>, Stephen > Watson <st...@ke...> wrote: > > Jim Lesurf <jc...@au...> wrote: > > > I assume that would then work with the normal ROX desktops without > > > user needing ROX-Clib? > > > They would need ROX-Lib instead. > > Yes, fair enough. :-) However I think what surprises me here is that so > far as I can recall ROX-Lib installed without any problems. That is the advantage of Python. > Yet IIUC CLib > seems to require even users of developed apps that use it to install a > 'development' item (pkg-config) which seems absent from a distro as common > as Xubuntu. Only because you're using a source release which requires that you compile it, the same as if you downloaded a source release of ROX-Filer. Of course using a binary release has other problems, mainly that I can only produce binary releases for my version of SuSE. > Anyway, thinking about this I feel I do prefer (if it is possible and I can > work out how to do it) to use the approach of using python (and ROX-Lib) to > provide the drag-and-drop, and have it then call the object I've compiled > from 'C'. > > One reason for this is I want the main code to be easily accessible by > non-ROX users via a terminal or just issuing the usual sort of <object> > <variable> command. > > Another is that I've played with the python example at > http://roscidus.com/desktop/Tutorials/Saving > > and it works quite nicely for A and B above. So I'm hoping that there is a > simple way to extract the full pathname of the file created by the > drag-and-drop and then pass that on to launching the main code. Is there > not a method for reading this name from the class of object for 'box'. etc? As I recall, the ROX-Lib version expects the call back to create the target file before returning and throws an exception if it doesn't. You'll need to catch that if you're deferring file creation to a different process. > Either way I clearly have a lot to learn! So me feeling of preferring > python here may well be a mistake on my part. But I am tending to feel I > should learn more about python anyway, so that is another reason for seeing > if that route is possible. > > So if anyone can advise on how to extract the pathname of the saved file > from the SaveBox (as above example) and then how to issue the command, I'd > welcome the help. In the meantime I'll keep experimenting and trying to > learn. > > Thanks, > > Jim > -- Stephen Watson http://www.kerofin.demon.co.uk/ If you read this on a mailing list, send any reply back to the list and not to me. Not even CC. Do you mind not farting while I'm saving the world? |
From: Jim L. <jc...@au...> - 2010-06-07 17:33:35
|
In article <gem...@ke...>, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: [snip lots] > > > > Another is that I've played with the python example at > > http://roscidus.com/desktop/Tutorials/Saving > > > > and it works quite nicely for A and B above. So I'm hoping that there > > is a simple way to extract the full pathname of the file created by > > the drag-and-drop and then pass that on to launching the main code. Is > > there not a method for reading this name from the class of object for > > 'box'. > etc? > As I recall, the ROX-Lib version expects the call back to create the > target file before returning and throws an exception if it doesn't. > You'll need to catch that if you're deferring file creation to a > different process. What I've been hoping is that there would be a method that lets me extract the full-path filename used by SaveBox. The idea being that the python could create a 'placeholder' file with some brief contents. But I would then know the destination file the user wants, so the following program would overwrite that with what was actually desired as output. i.e. after the python part does its 'save' and the file appears the python rox loop quits by passing on a system command in the command environment for the compiled item, telling it the destination file name. (Hope that explanation makes sense!) However I've experimented with the SaveBox example and it looks like it runs straight though the python into the mainloop before you even get to drag and drop the icon! Once it goes into mainloop I have no idea (at present) how you would then recover the filename. Did this experiment by using an AppRun that opens a terminal and then runs the SaveBox example in the terminal. I then put some print statements into the python and these all print to the terminal window *before* I actually drag and drop the icon offerred by the SaveBox. So I am now wondering if what I want is simply impossible using the ROX-Lib SaveBox. My problem here is that I still know very little about python. I understand the various simple examples that tend to appear at the start of basic tutorials, etc. But have no real understanding of the ROX-Lib. Given that it aims to make user working RO-like I'd expect the save box method for file output is the preferred GUI. So I'd assumed what I wanted would be simple. But... If someone can explain if what I wish is possible (and how!) with ROX-Lib I'd be grateful. Similarly, if it can be explained that what I had in mind is simply impossible that would be useful as it means I can abandon the idea! :-) Failing that, I'll revert to a mix of slowly learning a bit more about python and leave my own simple ROX apps with the fairly crude methods I use at present. I guess that if at some future point I gain the necessary understanding I can return to this and improve the file saving process to be more drag-and-drop friendly. :-) BTW I have nothing against the idea that a program will tend to produce info for saving *before* the save. So I can see that the python example as it stands makes sense for many cases. But some of my programs tend to have to generate large output files. Biggest so far is 2.7GB. That's unusual, but many are in the range up to about 800MB. Given this, I'm reluctant to go down the route of trying to generate this all in RAM first just so I can use the existing SaveBox example as my method. Could make life awkward. :-) Thanks, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Thomas L. <ta...@gm...> - 2010-06-07 17:45:39
|
On 7 June 2010 17:56, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: > >> In article <gem...@ke...>, Stephen >> Watson <st...@ke...> wrote: >> > Jim Lesurf <jc...@au...> wrote: >> > > I assume that would then work with the normal ROX desktops without >> > > user needing ROX-Clib? >> >> > They would need ROX-Lib instead. >> >> Yes, fair enough. :-) However I think what surprises me here is that so >> far as I can recall ROX-Lib installed without any problems. > > That is the advantage of Python. > >> Yet IIUC CLib >> seems to require even users of developed apps that use it to install a >> 'development' item (pkg-config) which seems absent from a distro as common >> as Xubuntu. > > Only because you're using a source release which requires that you compile > it, the same as if you downloaded a source release of ROX-Filer. Of course > using a binary release has other problems, mainly that I can only produce > binary releases for my version of SuSE. Out of interest, why is it that the ROX-Filer binary seems to work everywhere, but ROX-CLib can only work on SUSE? >> Anyway, thinking about this I feel I do prefer (if it is possible and I > can >> work out how to do it) to use the approach of using python (and ROX-Lib) > to >> provide the drag-and-drop, and have it then call the object I've compiled >> from 'C'. >> >> One reason for this is I want the main code to be easily accessible by >> non-ROX users via a terminal or just issuing the usual sort of <object> >> <variable> command. >> >> Another is that I've played with the python example at >> http://roscidus.com/desktop/Tutorials/Saving >> >> and it works quite nicely for A and B above. So I'm hoping that there is a >> simple way to extract the full pathname of the file created by the >> drag-and-drop and then pass that on to launching the main code. Is there >> not a method for reading this name from the class of object for 'box'. > etc? > > As I recall, the ROX-Lib version expects the call back to create the target > file before returning and throws an exception if it doesn't. You'll need to > catch that if you're deferring file creation to a different process. Note that you may be asked to save to a temporary file (e.g. when transferring data to another program), so it's important not to return until the file is written. Archive shows how to do it, although it's a bit complicated because it supports so many different operations and because it reads and writes at the same time. One quick way to get started would be to add your own format to Archive/formats.py. Each format is just a shell command that produces the output. e.g. this line Archive('zip', "zip -qr - '%s'", 'application/zip'), means that if the user chooses the "create zip" option then we run the command "zip -qr - <name>". You could add your own command here. To add your own code, you have a choice of which method to provide: def save_to_file(self, path): or def save_to_stream(self, stream): In your case, as you need the name, choose the first. -- Dr Thomas Leonard ROX desktop / Zero Install GPG: 9242 9807 C985 3C07 44A6 8B9A AE07 8280 59A5 3CC1 GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA |
From: Jim L. <jc...@au...> - 2010-06-08 09:12:24
|
In article <AAN...@ma...>, Thomas Leonard <ta...@gm...> wrote: > On 7 June 2010 17:56, Stephen Watson <st...@ke...> wrote: > > Jim Lesurf <jc...@au...> wrote: [snip] > >> > >> and it works quite nicely for A and B above. So I'm hoping that there > >> is a simple way to extract the full pathname of the file created by > >> the drag-and-drop and then pass that on to launching the main code. > >> Is there not a method for reading this name from the class of object > >> for 'box'. > > etc? > > > > As I recall, the ROX-Lib version expects the call back to create the > > target file before returning and throws an exception if it doesn't. > > You'll need to catch that if you're deferring file creation to a > > different process. > Note that you may be asked to save to a temporary file (e.g. when > transferring data to another program), so it's important not to return > until the file is written. > Archive shows how to do it, although it's a bit complicated because it > supports so many different operations and because it reads and writes at > the same time. Being able to read and write at the same time is also something I'd like to be able to do using dnd since a number of my programs read though one (often long) wave file and write out results or a modified WAV file as they go. > One quick way to get started would be to add your own format to > Archive/formats.py. Each format is just a shell command that produces > the output. e.g. this line > Archive('zip', "zip -qr - '%s'", 'application/zip'), > means that if the user chooses the "create zip" option then we run the > command "zip -qr - <name>". You could add your own command here. > To add your own code, you have a choice of which method to provide: > def save_to_file(self, path): or def save_to_stream(self, stream): > In your case, as you need the name, choose the first. Ah! :-) Thanks very much for the above. That is very helpful. I have been looking at Archive but it has been making blood emerge from my forehead trying to understand it as I currently know so little about python and ROX-Lib. The above looks like it will help me a great deal in finding how to adapt the code to do the kinds of things I have in mind. Excellent. :-) Slainte, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Stephen W. <st...@ke...> - 2010-06-08 06:04:17
|
Jim Lesurf <jc...@au...> wrote: > In article <gem...@ke...>, Stephen > Watson <st...@ke...> wrote: > > Jim Lesurf <jc...@au...> wrote: > > [snip lots] > > > > > > Another is that I've played with the python example at > > > http://roscidus.com/desktop/Tutorials/Saving > > > > > > and it works quite nicely for A and B above. So I'm hoping that there > > > is a simple way to extract the full pathname of the file created by > > > the drag-and-drop and then pass that on to launching the main code. Is > > > there not a method for reading this name from the class of object for > > > 'box'. > > etc? > > > As I recall, the ROX-Lib version expects the call back to create the > > target file before returning and throws an exception if it doesn't. > > You'll need to catch that if you're deferring file creation to a > > different process. > > What I've been hoping is that there would be a method that lets me extract > the full-path filename used by SaveBox. The idea being that the python > could create a 'placeholder' file with some brief contents. But I would > then know the destination file the user wants, so the following program > would overwrite that with what was actually desired as output. i.e. after > the python part does its 'save' and the file appears the python rox loop > quits by passing on a system command in the command environment for the > compiled item, telling it the destination file name. (Hope that explanation > makes sense!) > > However I've experimented with the SaveBox example and it looks like it > runs straight though the python into the mainloop before you even get to > drag and drop the icon! Once it goes into mainloop I have no idea (at > present) how you would then recover the filename. Show the code. -- Stephen Watson http://www.kerofin.demon.co.uk/ If you read this on a mailing list, send any reply back to the list and not to me. Not even CC. Strange as I seem I'm getting stranger by the minute |
From: Jim L. <jc...@au...> - 2010-06-08 09:12:24
|
In article <gem...@ke...>, Stephen Watson <st...@ke...> wrote: > Jim Lesurf <jc...@au...> wrote: > > However I've experimented with the SaveBox example and it looks like > > it runs straight though the python into the mainloop before you even > > get to drag and drop the icon! Once it goes into mainloop I have no > > idea (at present) how you would then recover the filename. > Show the code. It is based on the example I've taken from the ROX tutorials. At present the version I have is inside a directory with an AppRun containing #! /bin/sh exec xfce4-terminal --hold --execute `dirname $0`/Run.py And the Run.py file contains #!/usr/bin/env python import findrox; findrox.version(1, 9, 8) import rox from rox import saving print "start" text = """well blow me it works""" class Lipsum(saving.Saveable): def save_to_stream(self, stream): print >>stream, text box = saving.SaveBox(Lipsum(), 'Lipsum', 'text/plain') print "before box show" box.show() print "done!" rox.mainloop() At this point all I did was add some print statements so I could see the progress though the code and then ran the above in a terminal where the results would be printed. I found that all the words start before show box done appeared apparently at the same time as the SaveBox popped up on the desktop. The Savebox then let me drag-and-drop the icon and this created a file with the expected contents. The deduction this lead me to is that box.show() pops up the box and the execution of the code then proceeds into the rox.mainloop() *before* a file is given a name (by drag and drop) and saved. Thus from my ignorant POV at present the code 'vanishes into rox.mainloop()' before I can extract the name of the file that was determined for the drag and drop save. I have been hoping there was something like 'box.getfilename()'. i.e. a method called something like 'getfilename' that would attach to the box process and let me find out the name before the code went into mainloop. But since I know little about python (and even less about ROX-Lib) this may be a fantasy on my part! FWIW I've also used the above for some other modified examples just to play with python and learn. But they haven't shed any light on the main point that is of practical interest to me at present - to be able to use dnd to get a file and filename for subsequent data saving. Slainte, Jim -- Electronics http://www.st-and.ac.uk/~www_pa/Scots_Guide/intro/electron.htm Armstrong Audio http://www.audiomisc.co.uk/Armstrong/armstrong.html Audio Misc http://www.audiomisc.co.uk/index.html |
From: Tony H. <h...@re...> - 2010-06-08 13:47:53
|
On Tue, 08 Jun 2010 09:47:06 +0100 Jim Lesurf <jc...@au...> wrote: > I have been hoping there was something like 'box.getfilename()'. i.e. a > method called something like 'getfilename' that would attach to the box > process and let me find out the name before the code went into mainloop. > But since I know little about python (and even less about ROX-Lib) this may > be a fantasy on my part! As SaveBox() derives from gtk.Dialog you could either use the run() method instead of show() or connect to its "response" signal. I haven't followed the thread closely enough to understand exactly what you're trying to do - something to do with getting a filename instead of doing an actual save? - but it looks like you could override Saveable.save_to_file() for that. -- TH * http://www.realh.co.uk |