On Thu, Dec 23, 2010 at 08:56:15PM -0500, Art Hunkins wrote: > Aleksey: Thanks so much for your suggestions/corrections. And Walter: thanks > equally for posting these ideas to the wiki. > > Aleksey: Please take a look at this further refinement of the Chooser > method: > > def choose(self, widget): > chooser = ObjectChooser(parent=self, what_filter=mime.GENERIC_TYPE_AUDIO) > result = chooser.run() > if result == gtk.RESPONSE_ACCEPT: > self.jobject = chooser.get_selected_object() > self.path = str(self.jobject.get_file_path()) > else: > self.jobject = None > self.path = "0" > > It is essential that if the Journal is closed without a selection, that the > default values (for self.jobject and self.path) be reset. > > Also, the user needs to be able to change his mind - to make a second > selection, as well as to revert to the default. > > Is the above code a fairly good way of achieving this?
Sure. > Also, I'd like to find a way to limit the selected Journal object to an > *audio* file, one included in mime.GENERIC_TYPE_AUDIO - and (likewise) to > revert to default values if such a selection is not made. > > Do you see a fairly simple way of making such a "filter"? I'd rather not get > into specifying all specific file types (except, if feasible, to rule out > ogg speex). Unfortunately, it is impossible with current ObjectChooser implementation (there should be a ticket on bugs.sl.o with proposal how it might be implemented). > Once again, thanks for your insights. > > Art Hunkins > > ----- Original Message ----- > From: "Aleksey Lim" <alsr...@member.fsf.org> > To: "Art Hunkins" <abhun...@uncg.edu> > Cc: <Sugar-devel@lists.sugarlabs.org> > Sent: Wednesday, December 22, 2010 1:22 AM > Subject: Re: [Sugar-devel] Object Chooser (selecting user-created audio > objects from the Journal) > > > > On Tue, Dec 21, 2010 at 09:54:24PM -0500, Art Hunkins wrote: > >> I'd like to thank all those who helped me get Object Chooser in the > >> Journal > >> up and running in my FileMix activity. I'd also like to share my results, > >> in > >> case the code could be helpful to others. > >> > >> Excerpts follow: > >> > >> from sugar.graphics.objectchooser import ObjectChooser > >> from sugar import mime > >> > >> self.jname1 = "0" > >> self.jobject1 = 0 > >> > >> if os.path.exists("/etc/fedora-release"): > >> release = open("/etc/fedora-release").read() > >> if release.find("OLPC release 9 ") == -1: > >> # Insert here code relevent to Sugar 0.84 and higher > >> # I use this to only display Object Chooser callback buttons only for >= > >> 0.84 > >> # Clicking one of the displayed buttons calls the choose1 method > >> > >> def choose1(self, widget): > >> chooser = ObjectChooser(parent=self, > >> what_filter=mime.GENERIC_TYPE_AUDIO) > >> result = chooser.run() > >> if result == gtk.RESPONSE_ACCEPT: > >> jobject = chooser.get_selected_object() > >> if jobject and jobject.file_path: > >> self.jobject1 = jobject > >> self.jname1 = str(jobject.get_file_path()) > >> else: > >> self.jname1 = "0" > >> > >> > >> Random observations: > >> > >> 1) I exclude Sugar 0.82 for two reasons (which means, unfortunately, "no > >> user soundfiles for 0.82"): > > > > Another useful way to check sugar version is: > > > > try: > > from jarabe import config > > version = [int(i) for i in config.version.split('.')][:2] > > except ImportError: > > version = [0, 82] > > > > if version >= [0, 84]: > > ... > > > >> a) its version of Object Chooser does not allow filtering for the audio > >> mime type; > >> b) Sugar 0.82's Csound (5.08) - or more specifically its version of > >> libsndfile - does not handle ogg vorbis soundfiles, the type that the > >> Record > >> activity creates. Record is the most likely/accessible means that > >> children > >> would use to create their own soundfiles. (The whole idea behind using > >> Object Chooser here is to select user files that have been placed in the > >> Journal [as Record does by default] for performance in FileMix.) > >> c) In addition, earlier versions of Record (<v64 or so) create ogg SPEEX > >> soundfiles; even the recent versions of Csound (actually, libsndfile) do > >> not > >> handle this (lo-fi) format. > >> > >> I found that a search for "OLPC release 9 " in /etc/fedora-release > >> identifies all current 0.82 incarnations of Sugar of which I'm aware. > >> > >> 2) jname1 stores the soundfile name (complete path); jobject1 stores the > >> object itself. This is key to being able (in Csound) to locate and load > >> the > >> selected soundfile. jname1 is then a channel opened to send the named > >> soundfile to Csound. > > > > You can make code more elegant by using only jobject1 > > (and None initializer): > > > > self.jobject1 = None > > ... > > if result == gtk.RESPONSE_ACCEPT: > > ... > > self.jobject1 = jobject > > ... > > > > if self.jobject1 is not None: > > path = str(self.jobject1.get_file_path()) > > ... > > > >> 3) If the user closes the Object Chooser box instead of clicking on a > >> sound > >> object, the result is not accepted, and jname1 reverts to "0" - which is > >> a > >> flag (in Csound) to revert to the default soundfile included in FileMix. > >> > >> 4) The str() cast for self.jname1 converts the filename to the usual path > >> format readable by Csound (this too is required). > > > > Yeah, I guess it is dbus string object... maybe we need to this type > > cast in sugar-toolkit code (though in most cases this casting should > > happen implicitly). > > > >> > >> Art Hunkins > >> > >> _______________________________________________ > >> Sugar-devel mailing list > >> Sugar-devel@lists.sugarlabs.org > >> http://lists.sugarlabs.org/listinfo/sugar-devel > >> > > > > -- > > Aleksey > > -- Aleksey _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel