def save_image(self,mi=None): try: window=self.canvas.get_window() self.image=GdkImlib.create_image_from_drawable(window,None,-50,-100,4500,1800) self.image.save_image(self.imgfname) except: GtkExtra.message_box('No Image available',("OK",))
def run_script(self, fname): if not fname or os.path.exists(fname): GtkExtra.message_box("Run","Invalid filename",("OK",)) return args = GtkExtra.input_box("Arguments", "Enter any command line arguments") if args == None: return os.system(VT_CMD+'python "'+fname+'" ' + args + ' &')
def raster_open_by_name(self,filename): dataset = gdal.Open(filename) if dataset is None: GtkExtra.message_box('Error', 'Unable to open '+filename, ('OK',) ) return None return dataset
def process_help(self, action, widget): GtkExtra.message_box("Test Application", """Test Application for Python-Gtk. This is free software. This application tests key press events and text display. Any entered key (printable character) is displayed on screen. <F1> toggle medium and bold font. <F2> permits to change font size. """, ("OK", ), pixmap='question.xpm')
def auto_file_load(filename): if filename != None: try: d = load_data_file(filename) except: GtkExtra.message_box(title="Error Loading File", message="Problems Loading File: " + file_name, buttons=("OK", )) return None setup_loaded_chart(d, filename)
def file_open_by_name(self, filename, *args): if filename[len(filename)-4:] == '.shp': self.file_open_shape_by_name(filename) return if filename[len(filename)-4:] == '.SHP': self.file_open_shape_by_name(filename) return dataset = gdal.Open(filename) if dataset is None: GtkExtra.message_box('Error', 'Unable to open '+filename, ('OK',) ) return self.files.append(dataset) for band_index in range(1,1+min(3,dataset.RasterCount)): band = dataset.GetRasterBand(band_index) interp = band.GetRasterColorInterpretation() if interp == gdal.GCI_PaletteIndex: raster = gview.GvRaster(dataset=dataset,sample=gview.SMSample, real=band_index) else: raster = gview.GvRaster(dataset=dataset,real=band_index) raster.set_name(filename) gview.undo_register(raster) view = self.view_manager.get_active_view() if view is None: return options = [] if gview.get_preference('gcp_warp_mode') is not None \ and gview.get_preference('gcp_warp_mode') == 'no': options.append(('raw','yes')) raster_layer = gview.GvRasterLayer(raster, options) if interp == gdal.GCI_RedBand: raster_layer.texture_mode_set(1,(1.0,0.0,0.0,1.0)) raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1) elif interp == gdal.GCI_GreenBand: raster_layer.texture_mode_set(1,(0.0,1.0,0.0,1.0)) raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1) elif interp == gdal.GCI_BlueBand: raster_layer.texture_mode_set(1,(0.0,0.0,1.0,1.0)) raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1) view.add_layer(raster_layer)
def reload_file(self, fname): if not os.path.isfile(fname): GtkExtra.message_box("File Not Found", fname + " was not found.", ("OK", )) dir = os.path.dirname(fname) base = os.path.basename(fname) if dir not in sys.path: sys.path.insert(0, dir) if string.lower(base[-3:]) == '.py': base = base[:-3] elif string.lower(base[-4:]) == '.pyc': base = base[:-4] if not sys.modules.has_key(base): self.interp.run('import ' + base) else: self.interp.run('import ' + base) self.interp.run('reload(' + base + ')')
def reload_file(self, fname): if not os.path.isfile(fname): GtkExtra.message_box("File Not Found", fname + " was not found.", ("OK",)) dir = os.path.dirname(fname) base = os.path.basename(fname) if dir not in sys.path: sys.path.insert(0, dir) if string.lower(base[-3:]) == '.py': base = base[:-3] elif string.lower(base[-4:]) == '.pyc': base = base[:-4] if not sys.modules.has_key(base): self.interp.run('import ' + base) else: self.interp.run('import ' + base) self.interp.run('reload(' + base + ')')
def new_button(_b): # popup little dialog to get the title of the function. # if user enters a name, start the editor so that the new function can be # edited. name = GtkExtra.input_box(title="Enter Function Name", message="Name of the new function is? ", modal=TRUE) if function_list.has_key(name): GtkExtra.message_box(title="Duplicate Function Name", message="Function name already exists", buttons=("OK"), pixmap=None, modal=TRUE) else: run_editor_on(_make_path() + '/' + name)
def __init__(self, rlayer): gtk.GtkWindow.__init__(self) import gview self.rlayer = rlayer raster = rlayer.get_data() self.xsize = raster.get_dataset().RasterXSize self.ysize = raster.get_dataset().RasterYSize self.set_policy(gtk.TRUE, gtk.TRUE, gtk.FALSE) # self.set_usize(self.xsize, self.ysize) self.viewarea = gview.GvViewArea() self.viewarea.add_layer(self.rlayer) self.viewarea.size(self.xsize, self.ysize) shell = gtk.GtkVBox(spacing=0) self.add(shell) # Print menu menuf = GtkExtra.MenuFactory() self.menuf = menuf menuf.add_entries([('File/Print', None, self.print_cb)]) shell.pack_start(menuf, expand=gtk.FALSE) shell.pack_start(self.viewarea) self.connect('delete-event', self.close) self.show_all() self.viewarea.fit_extents(0, self.ysize, self.xsize, -self.ysize)
def src_load(_button,*args): fname=GtkExtra.file_sel_box(title="Select GDAL Dataset") if fname is None: return ds=gdal.OpenShared(fname) if ds is None: gvutils.error('Not a valid gdal dataset!') return dict={} for i in range(1,ds.RasterCount+1): curband=fname + '.band[' + str(i) + ']' dict[gtk.GtkListItem(curband)] = (ds,i,curband) if srctoggle.get_active() == gtk.TRUE: slist=vrtutils.GetSimilarFiles(fname) for nname in slist: ds = gdal.OpenShared(nname) if ds is None: continue for i in range(1,ds.RasterCount+1): curband=nname + '.band[' + str(i) + ']' dict[gtk.GtkListItem(curband)] = (ds,i,curband) self.add_input_bands(dict)
def process_help(self, action, widget): dlg=GtkExtra.message_box("Test Application", "Test Application for Python-Gtk.\n" + "This is free software.\n" + "This application tests mouse and " + "key press events.", ("OK",), pixmap='question.xpm')
def src_load(_button, *args): fname = GtkExtra.file_sel_box(title="Select GDAL Dataset") if fname is None: return ds = gdal.OpenShared(fname) if ds is None: gvutils.error('Not a valid gdal dataset!') return dict = {} for i in range(1, ds.RasterCount + 1): curband = fname + '.band[' + str(i) + ']' dict[gtk.GtkListItem(curband)] = (ds, i, curband) if srctoggle.get_active() == gtk.TRUE: slist = vrtutils.GetSimilarFiles(fname) for nname in slist: ds = gdal.OpenShared(nname) if ds is None: continue for i in range(1, ds.RasterCount + 1): curband = nname + '.band[' + str(i) + ']' dict[gtk.GtkListItem(curband)] = (ds, i, curband) self.add_input_bands(dict)
def file_saveas(self, mi=None): fname = GtkExtra.file_save_box(modal=FALSE) if not fname: return self.fname = fname self.set_title(os.path.basename(fname)) self.new = 0 self.file_save()
def add_property_column(self,*args): """ Add a property column """ import GtkExtra pname=GtkExtra.input_box(title="Property Name", message="Please enter a name for the property") if ((pname is None) or (len(pname) == 0)): return current_columns=self.pgugrid.get_current_columns() mems=current_columns[0] titles=current_columns[1] editables=current_columns[2] formats=current_columns[3] types=current_columns[4] nodatas=current_columns[5] justify=current_columns[6] tjustify=current_columns[7] mems.append(pname) titles.append(pname) editables.append(1) formats.append(None) types.append('string') nodatas.append('') justify.append(0) tjustify.append(2) self.pgugrid.define_columns(members=mems,titles=titles, editables=editables,formats=formats,types=types, nodata=nodatas,justify=justify,title_justify=tjustify)
def create_header(self,filename): fmt=self.format_list[self.format_menu.get_history()] dtype=self.type_list[self.type_menu.get_history()] dr=gdal.GetDriverByName(fmt) tlist=string.split(dr.GetMetadata()["DMD_CREATIONDATATYPES"]) if dtype not in tlist: gvutils.error(fmt+' format does not support '+dtype+' data type!') return if fmt == 'PAux': self.create_paux_header(filename,dtype) else: fname,ext = os.path.splitext(filename) vrtname = fname+'.vrt' fname=pgufilesel.GetFileName(title="Select VRT Save Name", default_filename=vrtname) if fname is None: return if os.path.exists(fname): resp = GtkExtra.message_box('Confirmation', \ fname + ' exists. Overwrite?', ('Yes','No')) if resp == 'No': return lines=self.create_vrt_lines(filename) fh=open(fname,'w') fh.writelines(lines) fh.close()
def showConfirm(self, mess): i = GtkExtra.message_box( "GtkSnapshot", str(mess), [self.trans_text("YES"), self.trans_text("NO")]) if i == self.trans_text("YES"): return 1 return 0
def file_save(self, mi=None): if self.new: self.file_saveas() return try: pos = 0 length = self.text.get_length() fd = open(self.fname, "w") while pos < length: buf = self.text.get_chars(pos, min(pos + BLOCK_SIZE, length)) if buf != None: fd.write(buf) pos = pos + BLOCK_SIZE self.dirty = 0 except: GtkExtra.message_box("Save", "Error saving file " + self.fname, ("OK", ))
def ok_button(self, _button): entry = self.combo1.entry.get_text() bars = self.spinbutton1.get_value_as_int() if bars < 0: bars = 0 if entry not in VALID_COMBO_ITEMS: GtkExtra.message_box(title='Bad Value', message='Scale is invalid', buttons=('OK', ), pixmap=None, modal=TRUE) self.selection['extrabars'] = None self.selection['scale'] = None else: self.selection['extrabars'] = bars self.selection['scale'] = entry self.quit()
def file_save(self, mi=None): if self.new: self.file_saveas() return try: pos = 0 length = self.text.get_length() fd = open(self.fname, "w") while pos < length: buf = self.text.get_chars(pos, min(pos+BLOCK_SIZE, length)) if buf != None: fd.write(buf) pos = pos + BLOCK_SIZE self.dirty = 0 except: GtkExtra.message_box("Save", "Error saving file " + self.fname, ("OK",))
def create_paux_header(self,filename,datatype): (path, ext) = os.path.splitext(filename) auxname = path + ".aux" if os.path.isfile(auxname): resp = GtkExtra.message_box('Confirmation', \ auxname + ' exists. Overwrite?', ('Yes','No')) if resp == 'No': return # Take the image parameters header = long(self.header_entry.get_text()) width = long(self.width_entry.get_text()) height = long(self.height_entry.get_text()) bands = long(self.bands_entry.get_text()) aux_type_dict={'Byte':'8U','Int16':'16S','UInt16':'16U', 'Float32':'32R'} aux_type_list = ['8U', '16S', '16U', '32R'] type = aux_type_dict[datatype] gdaltype = gdal.GetDataTypeByName(datatype) interleaving = self.interleave_list[self.interleave_menu.get_history()] datasize = gdal.GetDataTypeSize(gdaltype) / 8 # Calculate offsets pixel_offset = [] line_offset = [] image_offset = [] if interleaving is 'Pixel': for i in range(bands): pixel_offset.append(datasize * bands) line_offset.append(datasize * width * bands) image_offset.append(header + datasize * i) elif interleaving is 'Band': for i in range(bands): pixel_offset.append(datasize) line_offset.append(datasize * width) image_offset.append(header + datasize * width * height * i) elif interleaving is 'Line': for i in range(bands): pixel_offset.append(datasize) line_offset.append(datasize * width * bands) image_offset.append(header + datasize * width * i) else: raise 'Unsupported interleaving type!' aux_swap_list = ['Swapped', 'Unswapped'] swap = aux_swap_list[self.swap_menu.get_history()] # Write out the auxilary file aux = open(auxname, "wt") aux.write("AuxilaryTarget: " + os.path.basename(filename) + '\n') aux.write("RawDefinition: " + str(width) + ' ' \ + str(height) + ' ' + str(bands) + '\n') for i in range(bands): aux.write("ChanDefinition-" + str(i + 1) + ': ' + type + ' ' \ + str(image_offset[i]) + ' ' + str(pixel_offset[i]) \ + ' ' + str(line_offset[i]) + ' ' + swap + '\n') aux.close() aux = None
def file_open(self, mi=None): fname = GtkExtra.file_open_box(modal=FALSE) if fname: ew = edit.EditWindow(quit_cb=self.rem_editwin) ew.load_file(fname) self.editwins.append(ew) self.add_py_menu(ew) ew.show() ew.set_usize(0,0)
def file_open(self, mi=None): fname = GtkExtra.file_open_box(modal=FALSE) if fname: ew = edit.EditWindow(quit_cb=self.rem_editwin) ew.load_file(fname) self.editwins.append(ew) self.add_py_menu(ew) ew.show() ew.set_usize(0, 0)
def load_file(file_name): try: d = load_data_file(file_name) except Exception, msg: mb = GtkExtra.message_box(title="Error Loading File", message="Problems Loading File: " + file_name, buttons=("OK", )) return None
def chk_save(self): if self.dirty: ret = GtkExtra.message_box( "Unsaved File", (self.fname or "Untitled") + " has not been saved\n" + "Do you want to save it?", ("Yes", "No", "Cancel")) if ret == None or ret == "Cancel": return 1 if ret == "Yes": self.file_save() return 0
def load_file(self, fname): try: fd = open(fname) self.text.freeze() self.text.delete_text(0, self.text.get_length()) buf = fd.read(BLOCK_SIZE) while buf != '': self.text.insert_defaults(buf) buf = fd.read(BLOCK_SIZE) self.text.thaw() self.text.get_vadjustment().set_value(0) self.text.queue_draw() self.set_title(os.path.basename(fname)) self.fname = fname self.dirty = 0 self.new = 0 except: GtkExtra.message_box('Edit', "Can't open " + fname, ("OK", ))
def process_help(self, action, widget): dlg = GtkExtra.message_box( "Test Application", "Test Application for Python-Gtk.\n" + "This is free software.\n" + "This application tests mouse and " + "key press events.", ("OK",), pixmap="question.xpm", )
def load_file(self, fname): try: fd = open(fname) self.text.freeze() self.text.delete_text(0, self.text.get_length()) buf = fd.read(BLOCK_SIZE) while buf != '': self.text.insert_defaults(buf) buf = fd.read(BLOCK_SIZE) self.text.thaw() self.text.get_vadjustment().set_value(0) self.text.queue_draw() self.set_title(os.path.basename(fname)) self.fname = fname self.dirty = 0 self.new = 0 except: GtkExtra.message_box('Edit', "Can't open " + fname, ("OK",))
def chk_save(self): if self.dirty: ret = GtkExtra.message_box("Unsaved File", (self.fname or "Untitled")+ " has not been saved\n" + "Do you want to save it?", ("Yes", "No", "Cancel")) if ret == None or ret == "Cancel": return 1 if ret == "Yes": self.file_save() return 0
def process_file(self, action, widget): if action == 0: print "File:<unknwon>" elif action == 1: print "File:New" elif action == 2: print "File:Open" print GtkExtra.file_open_box(modal=FALSE), "chosen" elif action == 3: print "FileSave" dlg = GtkExtra.message_box("Test Application", "Not implemented", ("OK",), pixmap="bomb.xpm") elif action == 4: print "File:Save As" print GtkExtra.file_save_box(modal=FALSE), "chosen" elif action == 5: print "File:Close" elif action == 6: print "File:Exit" mainquit()
def att_update_cb(self, *args): if self.text_contents == self.text.get_chars(0, -1): return if self.selected_shape is None: return shapes = self.layer.get_parent() shape = shapes[self.selected_shape] if shape is None: return shape = shape.copy() lines = string.split(self.text.get_chars(0, -1), '\n') for line in lines: tokens = string.split(line, ':', 1) if len(tokens) == 2: value = string.strip(tokens[1]) shape.set_property(tokens[0], value) property_exists = 0 for cprop in shapes.get_schema(): if cprop[0] == tokens[0]: property_exists = 1 if property_exists != 1: ftype = self.new_field_types[ self.new_field_type_menu.get_history()] response = \ GtkExtra.message_box('Confirmation', 'Create new ' + ftype + '-type property ' + tokens[0] + '?' , ('Yes','No')) if response == 'Yes': try: fwidth = int(self.new_field_width_entry.get_text()) except: gvutils.error('Field width must be an integer!') continue if ftype == 'float': try: fprec = int( self.new_field_width_entry.get_text()) except: gvutils.error( 'Precision width must be an integer!') continue else: fprec = 0 shapes.add_field(tokens[0], ftype, fwidth, fprec) shapes[self.selected_shape] = shape self.gui_update()
def getFromFile(self, *args): if self.sel_file2: try: os.popen("rm -f core") # Delete any core dumps os.popen("rm -f core.*") # Delete any core dumps os.chdir(self.extractDirectory(self.sel_file2)) except: pass f = GtkExtra.file_sel_box(self.trans_text("Select A File...")) if not f: return self.sel_file2 = f if not f.endswith("/"): self.fromfileentry.set_text(str(f))
def create_about(_button): v4l_version = camera.get_value('V4L Driver version') if v4l_version == '': v4l_version = 'unknown' cpia_version = camera.get_value('CPIA Version') cpia_pnpid = camera.get_value('CPIA PnP-ID') vp_version = camera.get_value('VP-Version') text="CPiA camera control program (Version:"+cpia_control_version+")"+\ "\nV4l Driver version: "+v4l_version+\ """ Detected Camera: """+\ "CPIA Version: "+cpia_version+"\n"+\ "CPIA Pn-PID: "+cpia_pnpid+"\n"+\ "VP-Version: "+vp_version+"\n"+\ """ See http://webcam.sourceforge.net/ for more details Copyright(c) 1999/2000/2004 by Peter Pregler ([email protected]) """ GtkExtra.message_box("About CPiA control", text, ("Close", ))
def create_cb(self, *args): bands = self.input_frame.get_output_bands() if len(bands) == 0: gvutils.error('No output bands specified!') return vrtbase = [gdal.CXT_Element, 'VRTDataset'] vrtbase.append([ gdal.CXT_Attribute, 'rasterXSize', [gdal.CXT_Text, str(bands[0][0].RasterXSize)] ]) vrtbase.append([ gdal.CXT_Attribute, 'rasterYSize', [gdal.CXT_Text, str(bands[0][0].RasterYSize)] ]) # Metadata is currently taken from first output band. # This may be updatable later. mbase = vrtutils.serializeMetadata(bands[0][0]) if mbase is not None: vrtbase.append(mbase) gbase = self.geo_frame.get_geocoding() for item in gbase: vrtbase.append(item) outband = 1 for item in bands: dict = {} dict['band'] = outband dict['SourceBand'] = item[1] dict['ColorInterp'] = 'Undefined' bbase = vrtutils.serializeBand(item[0], opt_dict=dict) vrtbase.append(bbase) outband = outband + 1 vrtlines = gdal.SerializeXMLTree(vrtbase) vrtds = gdal.OpenShared(vrtlines) if args[1] == 'Save': fname = GtkExtra.file_sel_box(title="Save File") if fname is None: return driver = gdal.GetDriverByName('VRT') driver.CreateCopy(fname, vrtds) elif args[1] == 'New': self.app.new_view() self.app.open_gdal_dataset(vrtds) else: self.app.open_gdal_dataset(vrtds)
def att_update_cb(self,*args): if self.text_contents == self.text.get_chars(0,-1): return if self.selected_shape is None: return shapes = self.layer.get_parent() shape = shapes[self.selected_shape] if shape is None: return shape = shape.copy() lines = string.split(self.text.get_chars(0,-1),'\n') for line in lines: tokens = string.split(line,':',1) if len(tokens) == 2: value = string.strip(tokens[1]) shape.set_property(tokens[0],value) property_exists=0 for cprop in shapes.get_schema(): if cprop[0] == tokens[0]: property_exists=1 if property_exists != 1: ftype = self.new_field_types[self.new_field_type_menu.get_history()] response = \ GtkExtra.message_box('Confirmation', 'Create new ' + ftype + '-type property ' + tokens[0] + '?' , ('Yes','No')) if response == 'Yes': try: fwidth = int(self.new_field_width_entry.get_text()) except: gvutils.error('Field width must be an integer!') continue if ftype == 'float': try: fprec = int(self.new_field_width_entry.get_text()) except: gvutils.error('Precision width must be an integer!') continue else: fprec = 0 shapes.add_field(tokens[0],ftype,fwidth,fprec) shapes[self.selected_shape] = shape self.gui_update()
def create_cb(self,*args): bands = self.input_frame.get_output_bands() if len(bands) == 0: gvutils.error('No output bands specified!') return vrtbase = [gdal.CXT_Element,'VRTDataset'] vrtbase.append([gdal.CXT_Attribute,'rasterXSize', [gdal.CXT_Text,str(bands[0][0].RasterXSize)]]) vrtbase.append([gdal.CXT_Attribute,'rasterYSize', [gdal.CXT_Text,str(bands[0][0].RasterYSize)]]) # Metadata is currently taken from first output band. # This may be updatable later. mbase = vrtutils.serializeMetadata(bands[0][0]) if mbase is not None: vrtbase.append(mbase) gbase = self.geo_frame.get_geocoding() for item in gbase: vrtbase.append(item) outband = 1 for item in bands: dict={} dict['band']=outband dict['SourceBand'] = item[1] dict['ColorInterp'] = 'Undefined' bbase = vrtutils.serializeBand(item[0],opt_dict=dict) vrtbase.append(bbase) outband=outband+1 vrtlines = gdal.SerializeXMLTree(vrtbase) vrtds = gdal.OpenShared(vrtlines) if args[1] == 'Save': fname = GtkExtra.file_sel_box(title="Save File") if fname is None: return driver = gdal.GetDriverByName('VRT') driver.CreateCopy(fname,vrtds) elif args[1] == 'New': self.app.new_view() self.app.open_gdal_dataset(vrtds) else: self.app.open_gdal_dataset(vrtds)
def do_run(self, _b=None): line = GtkExtra.input_box("Execute Code", "Enter code to execute:") if line == None: return locals = self.curframe.f_locals globals = self.curframe.f_globals globals['__privileged__'] = 1 try: code = compile(line + '\n', '<stdin>', 'single') exec code in globals, locals except: if type(sys.exc_type) == type(''): exc_type_name = sys.exc_type else: exc_type_name = sys.exc_type.__name__ self.set_status('*** ' + exc_type_name + ': ' + str(sys.exc_value)) return self.update_var_listing()
def add_py_menu(self, ew): def run(b=None, ew=ew, app=self): app.run_script(ew.fname) def dbg(b=None, ew=ew, app=self): app.debug_script(ew.fname) def prf(b=None, ew=ew, app=self): app.profile_script(ew.fname) py_menu = GtkExtra.MenuFactory(MENU_FACTORY_MENU) py_menu.add_entries([('Run...', None, run), ('Debug...', None, dbg), ('Profile...', None, prf)]) mi = GtkMenuItem('Python') ew.mf.insert(mi, 2) mi.show() mi.set_submenu(py_menu) ew.mf.hide() ew.mf.show()
def __init__(self): GtkWindow.__init__(self, WINDOW_TOPLEVEL) self.connect("destroy", self.quit) self.connect("delete_event", self.quit) self.set_title("Python") self.set_usize(475, 325) self.main_box = GtkVBox() self.add(self.main_box) self.main_box.show() hdlbox = GtkHandleBox() self.main_box.pack_start(hdlbox, expand=FALSE) hdlbox.show() mf = GtkExtra.MenuFactory() mf.add_entries([ ('File/New', '<control>N', self.file_new), ('File/Open...', '<control>O', self.file_open), ('File/<separator>', None, None), ('File/Exit', '<control>Q', self.file_exit), ('Edit/Copy', '<control>C', self.edit_copy), ('Edit/Paste', '<control>V', self.edit_paste), ('Edit/Clear', None, self.edit_clear), ('Python/Reload Module...', None, self.python_reload), ('Python/<separator>', None, None), ('Python/Run...', None, self.python_run), ('Python/Debug...', None, self.python_debug), ('Python/Profile...', None, self.python_prof), ('Help/About...', None, self.help_about), ]) self.add_accel_group(mf.accelerator) hdlbox.add(mf) mf.show() self.mf = mf self.interp = gtkcons.Console(namespace={ '__builtins__': __builtins__, '__name__': '__main__', '__doc__': None }, quit_cb=self.quit) self.main_box.pack_start(self.interp) self.interp.show() self.interp.init() self.editwins = []
def copy_gcps_cb(self,*args): """ Copy gcps from an existing gdal dataset. """ fname=GtkExtra.file_sel_box(title="Select GDAL Dataset") if fname is None: return try: fh=gdal.OpenShared(fname) except: gvutils.error('Unable to open '+fname+' as a GDAL dataset!') return gcps=fh.GetGCPs() prj=fh.GetGCPProjection() self.clear_gcps() for gcp in gcps: ngcp=CopyGDALGCP(gcp) self.gcplist.append(ngcp) self.gcpgrid.refresh() self.gcpprjbox.set_input_projection(prj)
def copy_gcps_cb(self, *args): """ Copy gcps from an existing gdal dataset. """ fname = GtkExtra.file_sel_box(title="Select GDAL Dataset") if fname is None: return try: fh = gdal.OpenShared(fname) except: gvutils.error('Unable to open ' + fname + ' as a GDAL dataset!') return gcps = fh.GetGCPs() prj = fh.GetGCPProjection() self.clear_gcps() for gcp in gcps: ngcp = CopyGDALGCP(gcp) self.gcplist.append(ngcp) self.gcpgrid.refresh() self.gcpprjbox.set_input_projection(prj)
def create_menu(self): mf = GtkExtra.MenuFactory() mf.add_entries([('File/New', '<control>N', self.file_new), ('File/Open...', '<control>O', self.file_open), ('File/Save', '<control>S', self.file_save), ('File/Save As...', None, self.file_saveas), ('File/<separator>', None, None), ('File/Exit', '<control>Q', self.file_exit), ('Edit/Cut', '<control>X', self.edit_cut), ('Edit/Copy', '<control>C', self.edit_copy), ('Edit/Paste', '<control>V', self.edit_paste), ('Edit/Clear', None, self.edit_clear), ('Edit/<separator>', None, None), ('Edit/Find...', None, self.edit_find), ('Edit/Find Next', None, self.edit_find_next), ('Help/About...', None, self.help_about)]) # activate key bindings ... self.add_accel_group(mf.accelerator) self.mf = mf return mf
def file_realtime_update(_menu, entry_name): if real_time_entries.has_key(entry_name): script = real_time_entries[entry_name] if os.access(script, os.R_OK | os.X_OK): name = os.tempnam('/tmp/', 'chase') f = open(name, 'w+') f.close() rt = os.system(script + " -t " + name) if rt != 0: mb = GtkExtra.message_box(title="Error loading data from %s" % (entry_name, ), message="External source failed", buttons=("OK", )) return None print "system command returned %d" % (rt, ) update_chase_with_realtime_data(name) #os.unlink(name) else: sys.write.stderr("Can't find the script: %s" % (script, )) else: sys.write.stderr("realtime update called with invalid name: %s" \ % (entry_name,))
def do_edit(self, _b=None): locals = self.curframe.f_locals varname = self.vardisp.varnames[self.vardisp.selected] val = repr.repr(locals[varname]) value = GtkExtra.input_box("Edit Variable", "Enter new value for" + varname + ":", val) if value == None: return globals = self.curframe.f_globals globals['__privileged__'] = 1 try: val = eval(value, globals, locals) self.curframe.f_locals[varname] = val except: if type(sys.exc_type) == type(''): exc_type_name = sys.exc_type else: exc_type_name = sys.exc_type.__name__ self.set_status('*** ' + exc_type_name + ': ' + str(sys.exc_value)) return row = self.vardisp.selected self.vardisp.set_text(row, 1, type(val).__name__) self.vardisp.set_text(row, 2, repr.repr(val))
def add_property_column(self, *args): """ Add a property column """ import GtkExtra pname = GtkExtra.input_box( title="Property Name", message="Please enter a name for the property") if ((pname is None) or (len(pname) == 0)): return current_columns = self.pgugrid.get_current_columns() mems = current_columns[0] titles = current_columns[1] editables = current_columns[2] formats = current_columns[3] types = current_columns[4] nodatas = current_columns[5] justify = current_columns[6] tjustify = current_columns[7] mems.append(pname) titles.append(pname) editables.append(1) formats.append(None) types.append('string') nodatas.append('') justify.append(0) tjustify.append(2) self.pgugrid.define_columns(members=mems, titles=titles, editables=editables, formats=formats, types=types, nodata=nodatas, justify=justify, title_justify=tjustify)
def getprjinfo(): fname=GtkExtra.file_sel_box(title="Select GDAL Dataset or WKT text file") if fname is None: return None try: fh=gdal.OpenShared(fname) prj=fh.GetProjection() if prj == '': prj=fh.GetGCPProjection() except: fh=open(fname,'r') prj=string.strip(fh.readline()) # prj files from shapes seem to have # an extra character at the end if prj[-1:] == '\x00': prj=prj[:-1] sr=osr.SpatialReference() val=sr.ImportFromWkt(prj) if val != 0: gvutils.error('Invalid projection information in '+fname+'!') return None return prj
def getprjinfo(): fname = GtkExtra.file_sel_box(title="Select GDAL Dataset or WKT text file") if fname is None: return None try: fh = gdal.OpenShared(fname) prj = fh.GetProjection() if prj == '': prj = fh.GetGCPProjection() except: fh = open(fname, 'r') prj = string.strip(fh.readline()) # prj files from shapes seem to have # an extra character at the end if prj[-1:] == '\x00': prj = prj[:-1] sr = osr.SpatialReference() val = sr.ImportFromWkt(prj) if val != 0: gvutils.error('Invalid projection information in ' + fname + '!') return None return prj
def python_prof(self, mi=None): fname = GtkExtra.file_sel_box("Profile") if fname: self.profile_script(fname)
def __gtk(title, message): import GtkExtra GtkExtra.message_box(title, message, ['Ok'])
if fname: try: f=open(fname, "r") except IOError: return self.w_text.freeze() while TRUE: line = f.readline() if line == "": break self.w_text.insert_defaults(line) self.w_text.thaw() elif action == 3: print "File:Save" GtkExtra.message_box("Test Application", "Not implemented", pixmap='bomb.xpm') elif action == 4: print "File:Save As" print GtkExtra.file_save_box(modal=FALSE), "chosen" elif action == 5: print "File:Close" elif action == 6: print "File:Exit" mainquit() def process_edit(self, action, widget): if action == 0: print "Edit:<unknown>" elif action == 1: print "Edit:Cut" self.w_text.cut_clipboard(0)
def file_open(self, mi=None): if self.chk_save(): return fname = GtkExtra.file_open_box(modal=FALSE) if not fname: return self.load_file(fname)
def save_cb(self, *args): if self.copy_but.active: outfile=GtkExtra.file_sel_box(title=_("Output File")) if outfile is None: return ds = self.viewarea1.active_layer().get_parent().get_dataset() bright_val = math.floor(self.bright_adjustment.value*255/100) contrast_val = (100+self.contrast_adjustment.value)/100 gamma_val = self.gamma_adjustment.value outarray = Numeric.zeros((ds.RasterCount,ds.RasterYSize,ds.RasterXSize),typecode=Numeric.UnsignedInt8) try: size = ds.RasterYSize import EasyDialogs progress = EasyDialogs.ProgressBar(title='Working...',maxval=size) except: pass lut = [] for i in range(256): value = i + math.floor(bright_val) if value < 0 : value = 0 elif value >= 255: value = 255 if contrast_val != 1.0: value = value * contrast_val if value < 0 : value = 0 elif value >= 255: value = 255 if gamma_val != 1: value = 255*math.pow(float(abs(value))/255,1.0/gamma_val) if value < 0 : value = 0 elif value >= 255: value = 255 value = int(value) lut.append(value) lutarray = Numeric.array((lut),typecode=Numeric.UnsignedInt8) for m in range(ds.RasterCount): inband = ds.GetRasterBand(m+1) for i in range(ds.RasterYSize): #inarray = inband.ReadAsArray() inarray = inband.ReadAsArray(0, i, inband.XSize, 1, inband.XSize, 1)[0].astype(Numeric.UnsignedInt8) #outarray = Numeric.zeros(inarray.shape) try: progress.label('Processing Band: ' + str(m+1) + ', Line: '+str(i)) progress.set(i) except: pass outarray[m][i].flat[:] = Numeric.take(lutarray,inarray.flat) res_ds = gdalnumeric.OpenArray(outarray,ds) res_ds = gview.manager.add_dataset(res_ds) view = gview.app.sel_manager.get_active_view_window() if self.copy_but.active: driver = ds.GetDriver() driver.CreateCopy(outfile,res_ds) view.file_open_by_name(outfile) self.destroy() elif self.owrite_but.active: for layer in gview.app.sel_manager.get_active_view().list_layers(): if gvutils.is_of_class( layer.__class__, 'GvRasterLayer' ) == 1: if layer.get_parent().get_dataset().GetDescription() == ds.GetDescription(): gview.app.sel_manager.get_active_view().remove_layer(layer) fname = ds.GetDescription() driver = ds.GetDriver() driver.CreateCopy(fname,res_ds) view.file_open_by_name(fname) view.refresh_cb() self.destroy() del ds del res_ds del outarray
def help_about(self, mi): GtkExtra.message_box("Edit Window", "Copyright (C) 1998 " + "James Henstridge\n" + "This program is covered by the GPL>=2", ("OK",))
def export_cb(self,*args): ipfile=self.frame_dict['Files'].get('Input') opfile=self.frame_dict['Files'].get('Output') if os.path.isfile(opfile): resp=GtkExtra.message_box('Confirmation',opfile + ' exists. Overwrite?',('Yes','No')) if resp == 'No': return elif len(opfile) == 0: gvutils.error('No output filename entered!') return use_viewscale=0 rast = gdal.OpenShared(ipfile, gdalconst.GA_ReadOnly) if rast is None: if len(ipfile) == 0: gvutils.error('Please specify an input file!') else: gvutils.error('Unable to open ' + ipfile + ' as a GDAL supported file!') return # Catch the case where the input file consists of in-memory VRT lines # and the output format is also VRT. In this case, the new VRT would # no longer be valid once openev was exited because the input file # is not on disk (filename looks something like '<VRTDataset....'). # If the user is just exporting the file as-is, simply copying the # original lines to disk will suffice. However, if they want to # window or scale, we'd need more complicated manipulations. For now, # give an error message in that case. opformat=self.format_list[self.format_menu.get_history()] if (ipfile[0] == '<') and (opformat == 'VRT'): if self.res_list[self.res_menu.get_history()] != 'Full': msg='Only full output resolution is currently\n'+\ 'supported for export of in-memory VRTs\n'+\ 'to on-disk VRTs.' gvutils.error(msg) return if ( (self.button_dict['Mode'].get_active()) and ((self.button_dict['IP_window'].get_active()) or (self.button_dict['Scale'].get_active()) or (len(self.optentry.get_text()) > 0))): msg='Scaling, windowing, and advanced creation\n'+\ 'options are not yet supported for export of \n'+\ 'in-memory VRTs to on-disk VRTs' gvutils.error(msg) return linelist=string.split(ipfile,'\n') newlinelist=[] for item in linelist: newlinelist.append(item+'\n') fh=open(opfile,'w') fh.writelines(newlinelist) fh.close() ovrs=self._overview_list[self.overview_menu.get_history()] if ovrs != 'None': outds=gdal.OpenShared(opfile) if outds is None: gvutils.error('Error opening '+opfile+' for overview creation!') return progress = pguprogress.PGUProgressDialog( 'Building overviews...', cancel = gtk.TRUE ) if ovrs is 'Nearest': outds.BuildOverviews( "nearest", callback = progress.ProgressCB ) else: outds.BuildOverviews( "average_magphase", callback = progress.ProgressCB ) progress.destroy() return vrt_opts=vrtutils.VRTCreationOptions(rast.RasterCount) if self._geocode_list[self.geocoding_menu.get_history()] == 'GCP': vrt_opts.set_geopref('gcps') elif self._geocode_list[self.geocoding_menu.get_history()] == 'Geotransform': vrt_opts.set_geopref('geotransform') band_list = None # Scale the output file according to the current view's # min/max if self.button_dict['Scale'].get_active(): try: clayer = self.app.sel_manager.get_active_layer() if clayer.get_parent().get_dataset().GetDescription() != ipfile: wtxt = 'Input file and active layer file names do not match- may ' wtxt = wtxt + 'result in unexpected scaling!' gvutils.warning(wtxt) if gvutils.is_of_class(clayer.__class__,'GvRasterLayer') == 0: gvutils.warning('Active layer is not a raster- view scaling ignored!') else: src_count=clayer.sources band_list = [] RGBAlist=['Red','Green','Blue','Alpha'] for src in range(src_count): # layer sources are numbered 0...3; band sources are numbered 1,2,... src_bandnum=clayer.get_data(src).get_band_number() band_list.append(src_bandnum) vrt_opts.set_scaling((clayer.min_get(src),clayer.max_get(src),0,255),(src_bandnum,)) vrt_opts.set_datatype(gdal.GDT_Byte,(src_bandnum,)) if src_count == 3: vrt_opts.set_color_interp(RGBAlist[src], (src_bandnum,)) # src_count is three even when there is an alpha channel # for rgb/rgba case if src_count == 3: try: src=3 src_bandnum=clayer.get_data(src).get_band_number() band_list.append(src_bandnum) vrt_opts.set_scaling((clayer.min_get(src), clayer.max_get(src),0,255), (src_bandnum,)) vrt_opts.set_datatype(gdal.GDT_Byte,(src_bandnum,)) vrt_opts.set_color_interp(RGBAlist[src], (src_bandnum,)) except: pass use_viewscale=1 if clayer.get_mode()==gview.RLM_COMPLEX: # This doesn't deal with complex yet... gvutils.error('View scaling option is not yet supported for complex data!') return elif rast._band[0].DataType == gdal.GDT_CInt16: # This doesn't deal with complex yet... gvutils.error('View scaling option is not yet supported for complex data!') return elif rast._band[0].DataType == gdal.GDT_CInt32: # This doesn't deal with complex yet... gvutils.error('View scaling option is not yet supported for complex data!') return elif rast._band[0].DataType == gdal.GDT_CFloat32: # This doesn't deal with complex yet... gvutils.error('View scaling option is not yet supported for complex data!') return elif rast._band[0].DataType == gdal.GDT_CFloat64: # This doesn't deal with complex yet... gvutils.error('View scaling option is not yet supported for complex data!') return except: gvutils.error('Unable to find active raster layer for scaling!') return # Get windowing options if self.button_dict['IP_window'].get_active(): try: spix=int(self.frame_dict['IP_window'].entry_dict['start_pix'].get_text()) sline=int(self.frame_dict['IP_window'].entry_dict['start_line'].get_text()) npix=int(self.frame_dict['IP_window'].entry_dict['num_pix'].get_text()) nlines=int(self.frame_dict['IP_window'].entry_dict['num_lines'].get_text()) if (spix < 0) or (sline < 0): gvutils.error('Negative start pixel and/or line! Aborting...') return if (npix+spix > rast.RasterXSize): gvutils.error('Window is too large (last column in input: '+str(rast.RasterXSize)+')! Aborting...') return if (nlines+sline > rast.RasterYSize): gvutils.error('Window is too large (last row in input: '+str(rast.RasterYSize)+')! Aborting...') return except: gvutils.error('Error retrieving window options! Aborting...') return else: spix=0 sline=0 npix=rast.RasterXSize nlines=rast.RasterYSize vrt_opts.set_src_window((spix,sline,npix,nlines)) if self.res_list[self.res_menu.get_history()] != 'Full': ovrlevel=int(self.res_list[self.res_menu.get_history()][2]) else: ovrlevel=1 vrt_opts.set_dst_window((0,0,npix/ovrlevel,nlines/ovrlevel)) vrt_tree=vrtutils.serializeDataset(rast,vrt_opts,band_list) vrt_lines=gdal.SerializeXMLTree(vrt_tree) vrtdataset=gdal.Open(vrt_lines) driver=gdal.GetDriverByName(opformat) # Parse creation options: optstr=string.strip(self.optentry.get_text()) if len(optstr) > 0: # should be able to deal with several # types of entries, eg. # 'TILED=YES','TFW=YES' # and # TILED=YES,TFW=YES if optstr[0] in ["'",'"']: split1=string.split(optstr,",") copts=[] for item in split1: if len(item) > 2: copts.append(item[1:len(item)-1]) else: copts=string.split(optstr,',') else: copts=[] progress = pguprogress.PGUProgressDialog( 'Export to '+opfile, cancel = gtk.TRUE ) progress.SetDefaultMessage("translated") outdataset=driver.CreateCopy(opfile,vrtdataset, options=copts, callback=progress.ProgressCB) if outdataset is None: progress.destroy() gvutils.error('Unable to create output file '+opfile) return ovrs=self._overview_list[self.overview_menu.get_history()] if ovrs is 'Nearest': progress.SetDefaultMessage("overviews built") outdataset.BuildOverviews( "nearest", callback = progress.ProgressCB ) elif ovrs is 'Average': progress.SetDefaultMessage("overviews built") outdataset.BuildOverviews( "average_magphase", callback = progress.ProgressCB ) progress.destroy()
def python_debug(self, mi=None): fname = GtkExtra.file_sel_box("Debug") if fname: self.debug_script(fname)