def __init__(self): #os.system("pwd") if os.path.exists(self.gladeFile): theFile = self.gladeFile elif os.path.exists("gui/"+self.gladeFile): theFile = "gui/"+self.gladeFile else: theFile = os.path.join( distutils.sysconfig.PREFIX, 'share', 'pbrain', self.gladeFile) self.widgets = gtk.glade.XML (theFile) self.widgets.signal_autoconnect(GladeHandlers.__dict__) #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/') self.outDim = 256, 256 self.viewer = vtk.vtkImageViewer() self.preview = GtkGLExtVTKRenderWindow() self.preview.set_size_request(self.outDim[0], self.outDim[1]) self.preview.show() self.renderer = self.viewer.GetRenderer() self.preview.GetRenderWindow().AddRenderer(self.renderer) self['vboxPreview'].pack_start(self.preview, False, False) self['vboxPreview'].reorder_child(self.preview, 1)
class WidgetsWrapper: gladeFile = 'image_reader.glade' def __init__(self): #os.system("pwd") if os.path.exists(self.gladeFile): theFile = self.gladeFile elif os.path.exists("gui/"+self.gladeFile): theFile = "gui/"+self.gladeFile else: theFile = os.path.join( distutils.sysconfig.PREFIX, 'share', 'pbrain', self.gladeFile) self.widgets = gtk.glade.XML (theFile) self.widgets.signal_autoconnect(GladeHandlers.__dict__) #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/') self.outDim = 256, 256 self.viewer = vtk.vtkImageViewer() self.preview = GtkGLExtVTKRenderWindow() self.preview.set_size_request(self.outDim[0], self.outDim[1]) self.preview.show() self.renderer = self.viewer.GetRenderer() self.preview.GetRenderWindow().AddRenderer(self.renderer) self['vboxPreview'].pack_start(self.preview, False, False) self['vboxPreview'].reorder_child(self.preview, 1) # Gives us the ability to do: widgets['widget_name'].action() def __getitem__(self, key): return self.widgets.get_widget(key) def get_params(self): print "WidgetsWrapper.get_params()!" if widgets['radiobuttonDim256'].get_active(): dim = 256, 256 elif widgets['radiobuttonDim512'].get_active(): dim = 512, 512 elif widgets['radiobuttonDimOther'].get_active(): dim = (widgets['entryDim1'].get_text(), widgets['entryDim2'].get_text()) if widgets['radiobuttonBytes1'].get_active(): readerClass = 'vtkBMPReader' elif widgets['radiobuttonBytes2'].get_active(): readerClass = 'vtkImageReader2' elif widgets['radiobuttonBytes3'].get_active(): readerClass = 'vtkDICOMImageReader' elif widgets['radiobuttonBytes5'].get_active(): readerClass = 'vtkNiftiImageReader' else: readerClass = None if widgets['radiobuttonOrderBig'].get_active(): order = 'big endian' elif widgets['radiobuttonOrderLittle'].get_active(): order = 'little endian' else: order = None p = Params() p.order = order p.readerClass = readerClass p.dimensions = dim p.dir = widgets['entryDir'].get_text() p.prefix = widgets['entryPrefix'].get_text() p.extension = widgets['entryExt'].get_text() p.pattern = widgets['entryPattern'].get_text() p.first = widgets['entryFirst'].get_text() p.last = widgets['entryLast'].get_text() p.dfov = widgets['entryDFOV'].get_text() p.spacing = widgets['entrySpacing'].get_text() p.header = widgets['entryHeader'].get_text() p.mask = widgets['entryMask'].get_text() return p def load_params_from_file(self, fname): dialog = self['dlgReader'] try: s = file(fname, 'r').read() except IOError: error_msg('Could not open %s for reading' % fname, dialog) return 0 p = Params() p.from_string(s) widgets.set_params(p) widgets['entryInfoFile'].set_text(fname) return 1 def save_params_to_file(self, fname): """ Pickle the params to file fname. If successful return 1 """ dialog = self['dlgReader'] pars = widgets.get_params() pars = widgets.validate(pars) if pars is None: error_msg('Invalid parameters') return 0 try: fh = file(fname, 'w') except IOError: error_msg('Could not open %s for writing' % fname, dialog) return 0 fh.write(str(pars)) widgets['entryInfoFile'].set_text(fname) return 1 def set_params(self, o): print "WidgetsWrapper.set_params()!" if o.readerClass=='vtkNiftiImageReader': bytes2=3 elif o.readerClass=='vtkDICOMImageReader': bytes2=2 elif o.readerClass=='vtkImageReader2': bytes2=1 else: bytes2 = 0 group = widgets['radiobuttonOrderBig'].get_group() for b in group: b.set_sensitive(bytes2) widgets['labelMask'].set_sensitive(bytes2) widgets['labelHeader'].set_sensitive(bytes2) widgets['entryMask'].set_sensitive(bytes2) widgets['entryHeader'].set_sensitive(bytes2) if o.order == 'big endian': widgets['radiobuttonOrderBig'].set_active(1) elif o.order == 'little endian': widgets['radiobuttonOrderLittle'].set_active(1) if bytes2==3: #vtkNiftiImageReader widgets['radiobuttonBytes5'].set_active(1) elif bytes2==2: #vtkDICOMImageReader widgets['radiobuttonBytes3'].set_active(1) elif bytes2==1: #vtkImageReader2 widgets['radiobuttonBytes2'].set_active(1) else: #vtkBITMAP widgets['radiobuttonBytes1'].set_active(1) if os.path.isdir(o.dir): widgets['entryDir'].set_text(o.dir) if o.dimensions[0] == 256 and o.dimensions[1] == 256: widgets['radiobuttonDim256'].set_active(1) elif o.dimensions[0] == 512 and o.dimensions[1] == 512: widgets['radiobuttonDim512'].set_active(1) else: widgets['radiobuttonDimOther'].set_active(1) widgets['entryDim1'].set_text(str(o.dimensions[0])) widgets['entryDim2'].set_text(str(o.dimensions[1])) widgets['entryPrefix'].set_text(o.prefix) widgets['entryExt'].set_text(o.extension) widgets['entryPattern'].set_text(o.pattern) widgets['entryFirst'].set_text(str(o.first)) widgets['entryLast'].set_text(str(o.last)) widgets['entryDFOV'].set_text(str(o.dfov)) widgets['entrySpacing'].set_text(str(o.spacing)) widgets['entryHeader'].set_text(str(o.header)) if o.mask is not None: mask = str(o.mask) else: mask = '' widgets['entryMask'].set_text(mask) def validate(self, o): dlg = self['dlgReader'] if o.readerClass!='vtkNiftiImageReader': if len(o.pattern)==0: msg = 'You must supply a number pattern for entry %s.\n' % \ self['labelPattern'].get_label() + 'Consider "%d"' return error_msg(msg, dlg) if o.pattern[0]!='%': msg = '%s format string must begin with a %%.\n' % \ self['labelPattern'].get_label() + 'Consider "%d"' return error_msg(msg, dlg) if widgets['radiobuttonDimOther'].get_active(): dim1, dim2 = o.dimensions val = dim1 = str2posint_or_err(dim1, 'Other: dimension 1', dlg) if val is None: return None val = dim2 = str2posint_or_err(dim2, 'Other: dimension 2', dlg) if val is None: return None o.dimensions = dim1, dim2 val = o.first = str2int_or_err(o.first, widgets['labelFirst'], dlg) if val is None: return None val = o.last = str2posint_or_err(o.last, widgets['labelLast'], dlg) if val is None: return None if o.readerClass!='vtkNiftiImageReader': fnames = self.get_file_names(o) for fname in fnames: print "validate(): doing fname ", fname if not os.path.exists(fname): return error_msg('Could not find file %s' % fname, dlg) if o.readerClass=='vtkBMPReader': reader = vtk.vtkBMPReader() b = reader.CanReadFile(fname) if not b: return error_msg('Could not read file %s with reader %s' % (fname, o.readerClass), dlg) else: if len(o.extension) > 0: fname=os.path.join(o.dir,o.pattern+"."+o.extension) if not os.path.exists(fname): return error_msg('Could not find file %s' % fname, dlg) else: fname=o.pattern files=os.listdir(o.dir) match=False for file in files: file=file.split(".") if len(file)>1: if file[0]==fname: if file[1] in ["nii","img","hdr"]: match=True break if not match: return error_msg('Could not find file %s with extension nii, img, hdr [.gz]' % fname, dlg) # Depth Field Of View val = o.dfov = str2posnum_or_err(o.dfov, widgets['labelDFOV'], dlg) print "dfov=", val if val is None: return None # Spacing between slices val = o.spacing = str2posnum_or_err( o.spacing, widgets['labelSpacing'], dlg) print "spacing=", val if val is None: return None # Size of header if o.header=='': o.header = 0 else: val = o.header = str2int_or_err( o.header, widgets['labelHeader'], dlg) if val is None: return None print "header=", val # Data mask if o.mask is not None: if o.mask=='': o.mask = None else: val = o.mask = str2int_or_err( o.mask, widgets['labelMask'], dlg) if val is None: return None print "mask=", val return o def get_file_names(self, o): fnames = [] if os.path.isdir(o.dir): dir = o.dir else: infopath = widgets['entryInfoFile'].get_text() dir, fname = os.path.split(infopath) fmt = os.path.join( dir, o.prefix ) + o.pattern if len(o.extension) > 0: fmt += '.' + o.extension #print fmt for i in range(o.first, o.last+1): fname = fmt %i fnames.append(fname) return fnames def get_reader(self, o): reader = get_reader(o) self.reader = reader widgets.set_params(o) return reader def get_color_level(self): return self['hscrollbarColorLevel'].get_value() def get_color_window(self): return self['hscrollbarColorWindow'].get_value() def get_slice_number(self): return self['hscrollbarSlice'].get_value()