def perform_3D_request(self, *args): """Tries to open selected files, then creates 3D Layer and switches to 3D mode""" # Get Data self.drape_dataset = self.raster_open_by_name(self.drape_fileSelectWin.get_filename()) self.DEM_dataset = self.raster_open_by_name(self.DEM_fileSelectWin.get_filename()) mesh_lod = self.lod_spin_button.get_value_as_int() hscale = float(self.scale_value.get_text()) if (self.drape_dataset is not None) and (self.DEM_dataset is not None): # Get Current View & Prefs 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')) # Set Current View to 3D Mode view.set_mode(gvconst.MODE_3D) view.height_scale(hscale) options.append(('mesh_lod',str(mesh_lod))) # For each band create layer and mesh for band_index in range(1,1+min(3,self.drape_dataset.RasterCount)): band = self.drape_dataset.GetRasterBand(band_index) interp = band.GetRasterColorInterpretation() # Create Drape Raster drape_raster = gview.GvRaster(dataset=self.drape_dataset, real=band_index) drape_raster.set_name(str(self.drape_fileSelectWin.get_filename())) gview.undo_register(drape_raster) # Create Drape Raster Layer drape_raster_layer = gview.GvRasterLayer(drape_raster, options) if interp == gdal.GCI_RedBand: drape_raster_layer.texture_mode_set(1,(1.0,0.0,0.0,1.0)) drape_raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1) elif interp == gdal.GCI_GreenBand: drape_raster_layer.texture_mode_set(1,(0.0,1.0,0.0,1.0)) drape_raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1) elif interp == gdal.GCI_BlueBand: drape_raster_layer.texture_mode_set(1,(0.0,0.0,1.0,1.0)) drape_raster_layer.blend_mode_set(gview.RL_BLEND_ADD,1,1) # Add to view view.add_layer(drape_raster_layer) # Create DEM Raster and Add as Height DEM_raster = gview.GvRaster(dataset=self.DEM_dataset) DEM_raster.set_name(str(self.DEM_fileSelectWin.get_filename())) drape_raster_layer.add_height(DEM_raster) # Clean up File Dialog Window self.file_dialog_3D.destroy()
def open_cb(self, *args): if gview.get_preference('save_recent_directory') == 'on': recent_dir = gview.get_preference('recent_directory') else: recent_dir = None filename = pgufilesel.GetFileName(title = "Select output file", \ default_filename = recent_dir) if filename is None: return self.open_entry.set_text(filename)
def open_cb(self, *args): if gview.get_preference('save_recent_directory') == 'on': recent_dir = gview.get_preference('recent_directory') else: recent_dir = None filename = pgufilesel.GetFileName(title = "Select output file", \ default_filename = recent_dir) if filename is None: return self.open_entry.set_text(filename)
def __init__(self, interactive=False, default_ogrfs = None): gtk.Window.__init__(self) self.set_title('Label Edit Tool') gview.app.sel_manager.subscribe( 'active-layer-changed', self.gui_update ) gview.app.sel_manager.subscribe( 'selection-changed', self.gui_update ) gview.app.sel_manager.subscribe( 'subselection-changed', self.gui_update ) if default_ogrfs is None: font =pgufont.XLFDFontSpec() default_font = gview.get_preference('label-font') if default_font is None: font.set_font_part('Family', 'Sans') font.set_font_part('Size', 12) else: font.parse_font_spec(default_font) color = gview.get_preference('label-color') if color is None: color = "#88FF88" else: try: color = color.replace("(", "") color = color.replace(")", "") r, g, b, a = color.split(",") r = float(r) g = float(g) b = float(b) a = float(a) color = ( r, g, b, a ) color = gvogrfs.gv_to_ogr_color( color ) except: color = "#88FF88" default_ogrfs = 'LABEL(t:"",f:"%s",c:%s)' % (font, color) self.default_ogrfs = default_ogrfs self.selected_shape = None self.layer = None self.interactive = interactive self.create_gui() self.show() self.edit_mode = 0 self.view = gview.app.view_manager.get_active_view() self.key_sig = self.view.connect('key-press-event', self.key_press_cb) self.connect('delete-event', self.close) self.gui_update()
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 open_cb(self, *args): if gview.get_preference('save_recent_directory') == 'on': recent_dir = gview.get_preference('recent_directory') else: recent_dir = None filename=pgufilesel.GetFileName(title="Open raw image file", default_filename=recent_dir) if filename is None: return self.open_entry.set_text(filename) self.bytes_label.set_text(str(os.stat(filename)[ST_SIZE]))
def open_cb(self, *args): if gview.get_preference('save_recent_directory') == 'on': recent_dir = gview.get_preference('recent_directory') else: recent_dir = None filename=pgufilesel.GetFileName(title="Open raw image file", default_filename=recent_dir) if filename is None: return self.open_entry.set_text(filename) self.bytes_label.set_text(str(os.stat(filename)[ST_SIZE]))
def __init__(self, interactive=FALSE, default_ogrfs=None): GtkWindow.__init__(self) self.set_title('Label Edit Tool') gview.app.sel_manager.subscribe('active-layer-changed', self.gui_update) gview.app.sel_manager.subscribe('selection-changed', self.gui_update) gview.app.sel_manager.subscribe('subselection-changed', self.gui_update) if default_ogrfs is None: font = pgufont.XLFDFontSpec() default_font = gview.get_preference('label-font') if default_font is None: font.set_font_part('Family', 'fixed') else: font.parse_font_spec(default_font) color = gview.get_preference('label-color') if color is None: color = "#88FF88" else: try: color = string.replace(color, "(", "") color = string.replace(color, ")", "") r, g, b, a = string.split(color, ",") r = float(r) g = float(g) b = float(b) a = float(a) color = (r, g, b, a) color = gvogrfs.gv_to_ogr_color(color) except: color = "#88FF88" default_ogrfs = 'LABEL(t:"",f:"%s",c:%s)' % (font, color) self.default_ogrfs = default_ogrfs self.selected_shape = None self.layer = None self.interactive = interactive self.create_gui() self.show() self.edit_mode = 0 self.view = gview.app.view_manager.get_active_view() self.key_sig = self.view.connect('key-press-event', self.key_press_cb) self.connect('delete-event', self.close) self.gui_update()
def tempnam(tdir=None, basename=None, extension=None): import os.path import gview if tdir is None: plotfile = gview.get_preference('gvplot_tempfile') if plotfile is not None and len(plotfile) > 0: if os.path.isdir(plotfile): tdir = plotfile elif os.path.isdir(os.path.dirname(plotfile)): tdir = os.path.dirname(plotfile) else: tdir = get_tempdir() else: tdir = get_tempdir() if basename is None: try: pgu.pnm = pgu.pnm + 1 except: pgu.pnm = 1 basename = 'OBJ_' + str(pgu.pnm) if extension is None: extension = 'tmp' return os.path.join(tdir, basename + '.' + extension)
def tempnam( tdir = None, basename = None, extension = None ): import os.path import gview if tdir is None: plotfile = gview.get_preference('gvplot_tempfile') if plotfile is not None and len(plotfile) > 0: if os.path.isdir(plotfile): tdir = plotfile elif os.path.isdir(os.path.dirname(plotfile)): tdir = os.path.dirname(plotfile) else: tdir = get_tempdir() else: tdir = get_tempdir() if basename is None: try: pgu.pnm = pgu.pnm + 1 except: pgu.pnm = 1 basename = 'OBJ_' + str(pgu.pnm) if extension is None: extension = 'tmp' return os.path.join(tdir,basename + '.' + extension)
def GetBrowseCommand(): if gview.get_preference('html_browser'): return gview.get_preference('html_browser') # On NT we don't try to find executables, so that we will default # to using gv_launch_url(). if os.name == "nt": return '' exe_names = ['netscape', 'mozilla', 'mosaic', 'gnome-help-browser' ] for name in exe_names: full_path = gvutils.FindExecutable(name) if (full_path is not None) and (full_path != ''): return full_path return ''
def __init__(self): GtkWindow.__init__(self) self.layer = None self.teardown_id = None self.changed_id = None self.resizing = FALSE self.resize_count = 0 self.set_title('Legend: Empty') self.set_policy(TRUE, TRUE, FALSE) self.set_usize(300, 300) self.viewarea = gview.GvViewArea() back_color = gview.get_preference('legend-background-color') if back_color is None: back_color = (1.0, 1.0, 1.0, 1.0) else: back_color = color_string_to_tuple(back_color) self.viewarea.set_background_color(back_color) self.shapes = gview.GvShapes() self.vlayer = gview.GvShapesLayer(self.shapes) self.viewarea.add_layer(self.vlayer) self.add(self.viewarea) self.connect('delete-event', self.close) self.show_all() self.viewarea.fit_extents(0, self.viewarea.get_height(), self.viewarea.get_width(), -self.viewarea.get_height()) self.changing_view_state = 0 self.viewarea.connect('view-state-changed', self.view_state_cb)
def __init__(self): GtkWindow.__init__(self) self.layer = None self.teardown_id = None self.changed_id = None self.resizing = FALSE self.resize_count = 0 self.set_title('Legend: Empty') self.set_policy(TRUE,TRUE,FALSE) self.set_usize(300, 300) self.viewarea = gview.GvViewArea() back_color = gview.get_preference('legend-background-color') if back_color is None: back_color = (1.0, 1.0, 1.0, 1.0 ) else: back_color = color_string_to_tuple(back_color) self.viewarea.set_background_color( back_color ) self.shapes = gview.GvShapes() self.vlayer = gview.GvShapesLayer(self.shapes) self.viewarea.add_layer( self.vlayer ) self.add( self.viewarea ) self.connect( 'delete-event', self.close ) self.show_all() self.viewarea.fit_extents(0, self.viewarea.get_height(), self.viewarea.get_width(), -self.viewarea.get_height() ) self.changing_view_state = 0 self.viewarea.connect('view-state-changed', self.view_state_cb )
def GetBrowseCommand(): if gview.get_preference('html_browser'): return gview.get_preference('html_browser') # On NT we don't try to find executables, so that we will default # to using gv_launch_url(). if os.name == "nt": return '' exe_names = ['netscape', 'mozilla', 'mosaic', 'gnome-help-browser' ] for name in exe_names: full_path = gvutils.FindExecutable(name) if (full_path is not None) and (full_path != ''): return full_path return ''
def create_raster_prefs(self): self.ttp = gtk.GtkVBox(spacing=10) self.ttp.set_border_width(10) self.notebook.append_page( self.ttp, gtk.GtkLabel('Raster')) # Warp with GCPs box = gtk.GtkHBox(spacing=3) self.ttp.pack_start(box, expand=FALSE) box.pack_start(gtk.GtkLabel('Display Georeferenced:'),expand=FALSE) self.gcp_warp_om = \ gvutils.GvOptionMenu(('Yes','No'), self.set_gcp_warp_mode) box.pack_start(self.gcp_warp_om,expand=FALSE) if gview.get_preference('gcp_warp_mode') is not None \ and gview.get_preference('gcp_warp_mode') == 'no': self.gcp_warp_om.set_history(1)
def find_gnuplot( self ): import gview exe = gview.get_preference('gnuplot') if exe is not None: if os.path.isfile(exe): return exe else: gvutils.warning( 'Disregarding gnuplot preference "%s", executable not found.' % exe ) exe = gvutils.FindExecutable( 'gnuplot' ) if exe is None: exe = gvutils.FindExecutable( 'pgnuplot.exe' ) if exe is None: exe = gvutils.FindExecutable( 'wgnupl32.exe' ) if exe is None: exe = gvutils.FindExecutable( 'wgnuplot.exe' ) return exe
def load_ramp_config_file(): """ Reads in ramp files specified in the ramp config file in the ramps directory and creates ramps for them This allows for ordering of the ramps in the config file and for specifying separators """ import os import os.path import string ramps = [] ramp_dir = gview.get_preference('ramp_directory') if ramp_dir is None: ramp_dir = os.path.join(gview.home_dir, 'ramps') if os.path.isdir(ramp_dir): config_path = os.path.join(ramp_dir, 'ramps.cfg') if os.path.isfile(config_path): #load config file and parse ramps ... config = open(config_path) lines = config.readlines() for line in lines: ramp_file = string.strip(line) if ramp_file == '<separator>': ramps.append(gtk.GtkHSeparator()) else: ramp_file = os.path.join(ramp_dir, ramp_file) if os.path.isfile(ramp_file): ramp = ColorRamp() try: ramp.deserialize(ramp_file) ramps.append(ramp) ramp.show() except: print 'invalid ramp file %s' % ramp_file else: print 'not a file (%s)' % ramp_file else: print 'no ramps.cfg file, loading ramps directly' return load_ramps() else: print 'no default ramp files in ', ramp_dir return ramps
def load_ramp_config_file(): """ Reads in ramp files specified in the ramp config file in the ramps directory and creates ramps for them This allows for ordering of the ramps in the config file and for specifying separators """ import os import os.path import string ramps = [] ramp_dir = gview.get_preference('ramp_directory') if ramp_dir is None: ramp_dir = os.path.join(gview.home_dir,'ramps') if os.path.isdir(ramp_dir): config_path = os.path.join(ramp_dir, 'ramps.cfg') if os.path.isfile(config_path): #load config file and parse ramps ... config = open(config_path) lines = config.readlines() for line in lines: ramp_file = string.strip(line) if ramp_file == '<separator>': ramps.append(gtk.GtkHSeparator()) else: ramp_file = os.path.join(ramp_dir, ramp_file) if os.path.isfile(ramp_file): ramp = ColorRamp() try: ramp.deserialize(ramp_file) ramps.append(ramp) ramp.show() except: print 'invalid ramp file %s' % ramp_file else: print 'not a file (%s)' % ramp_file else: print 'no ramps.cfg file, loading ramps directly' return load_ramps() else: print 'no default ramp files in ', ramp_dir return ramps
def find_gnuplot(self): import gview exe = gview.get_preference('gnuplot') if exe is not None: if os.path.isfile(exe): return exe else: gvutils.warning( 'Disregarding gnuplot preference "%s", executable not found.' % exe) exe = gvutils.FindExecutable('gnuplot') if exe is None: exe = gvutils.FindExecutable('pgnuplot.exe') if exe is None: exe = gvutils.FindExecutable('wgnupl32.exe') if exe is None: exe = gvutils.FindExecutable('wgnuplot.exe') return exe
def load_ramps(): """reads in all the ramp files in the ramps directory and creates ramps for them""" import os import os.path ramps = [] ramp_dir = gview.get_preference('ramp_directory') if ramp_dir is None: ramp_dir = os.path.join(gview.home_dir,'ramps') if os.path.isdir(ramp_dir): files = os.listdir(ramp_dir) for file in files: ramp_file = os.path.join(ramp_dir, file) if os.path.isfile(ramp_file): ramp = ColorRamp() try: ramp.deserialize(ramp_file) ramps.append(ramp) except: print 'invalid ramp file %s' % ramp_file else: print 'no default ramp files in ', ramp_dir return ramps
def load_ramps(): """reads in all the ramp files in the ramps directory and creates ramps for them""" import os import os.path ramps = [] ramp_dir = gview.get_preference('ramp_directory') if ramp_dir is None: ramp_dir = os.path.join(gview.home_dir, 'ramps') if os.path.isdir(ramp_dir): files = os.listdir(ramp_dir) for file in files: ramp_file = os.path.join(ramp_dir, file) if os.path.isfile(ramp_file): ramp = ColorRamp() try: ramp.deserialize(ramp_file) ramps.append(ramp) except: print 'invalid ramp file %s' % ramp_file else: print 'no default ramp files in ', ramp_dir return ramps
def set_ogrfs(self, ogrfs_obj, layer=None, fontlist=None, shape_obj=None): if layer is not None: self.layer = layer if ogrfs_obj is None: ogrfs_obj = gvogrfs.OGRFeatureStylePart() font = pgufont.XLFDFontSpec() default_font = gview.get_preference('default-font') if default_font is None: font.set_font_part('Family', 'fixed') else: font.parse_font_spec(default_font) if self.enable_offsets: dx = self.x_offset.get_value_as_float() dy = self.y_offset.get_value_as_float() ogrfs_obj.parse('LABEL(t:"",f:"%s",c:#88FF88)' % font) self.ogrfs_obj = ogrfs_obj self.shape_obj = shape_obj self.gui_update()
def create_tracking_tool_prefs(self): self.ttp = gtk.GtkVBox(spacing=10) self.ttp.set_border_width(10) self.notebook.append_page( self.ttp, gtk.GtkLabel('Tracking Tool')) # Coordinate box = gtk.GtkHBox(spacing=3) self.ttp.pack_start(box, expand=FALSE) box.pack_start(gtk.GtkLabel('Coordinate:'),expand=FALSE) self.coord_om = gvutils.GvOptionMenu( ('Off','Raster Pixel/Line','Georeferenced','Geodetic (lat/long)'), self.set_coordinate_mode) box.pack_start(self.coord_om,expand=FALSE) if gview.get_preference('_coordinate_mode') is not None: if gview.get_preference('_coordinate_mode') == 'raster': self.coord_om.set_history(1) elif gview.get_preference('_coordinate_mode') == 'georef': self.coord_om.set_history(2) elif gview.get_preference('_coordinate_mode') == 'latlong': self.coord_om.set_history(3) else: self.coord_om.set_history(0) else: self.coord_om.set_history(2) # Raster Value box = gtk.GtkHBox(spacing=3) self.ttp.pack_start(box, expand=FALSE) box.pack_start(gtk.GtkLabel('Pixel Value:'),expand=FALSE) self.pixel_mode_om = \ gvutils.GvOptionMenu(('On','Off'), self.set_pixel_mode) box.pack_start(self.pixel_mode_om,expand=FALSE) if gview.get_preference('_pixel_mode') is not None \ and gview.get_preference('_pixel_mode') == 'off': self.pixel_mode_om.set_history(1) else: self.pixel_mode_om.set_history(0)
def __init__(self, title=None, cwd=None, dialog_type=FILE_OPEN, filter=None, app=None, multiselect=0): gtk.GtkWindow.__init__(self) if dialog_type >= FILE_OPEN and dialog_type <= DIRECTORY_SELECT: self.dialog_type = dialog_type else: self.dialog_type = FILE_OPEN self.filter = None #current filter self.filters = {} #active filter objects self.filter_keys = [] #ordered list of the names of the filters self.file_selection = [] self.multiselect = multiselect self.set_border_width(5) self.set_policy(as=gtk.FALSE, ag=gtk.FALSE, autos=gtk.TRUE) self.drives = None if title == None: if dialog_type == FILE_OPEN: title = nls.get('filedlg-title-open-file', 'Open File ...') elif dialog_type == FILE_SAVE: title = nls.get('filedlg-title-save-file', 'Save File ...') elif dialog_type == DIRECTORY_SELECT: title = nls.get('filedlg-title-select-directory', 'Select Directory ...') self.set_title(title) #setup the current working directory if cwd is None or not os.path.exists(cwd): cwd = gview.get_preference('working-directory') if cwd is None: cwd = os.getcwd() self.cwd = cwd #widgets vbox = gtk.GtkVBox(spacing=5) if dialog_type == FILE_OPEN or dialog_type == DIRECTORY_SELECT: lbl = gtk.GtkLabel(nls.get('filedlg-label-open-from', 'Open From:')) elif dialog_type == FILE_SAVE: lbl = gtk.GtkLabel(nls.get('filedlg-label-save-in', 'Save In:')) self.opt_menu = gtk.GtkOptionMenu() self.opt_menu.set_menu(gtk.GtkMenu()) hbox = gtk.GtkHBox() hbox.pack_start(lbl, expand=gtk.FALSE) hbox.pack_start(self.opt_menu) vbox.pack_start(hbox, expand = gtk.FALSE) self.list_directory = gtk.GtkCList() scr_directories = gtk.GtkScrolledWindow() scr_directories.add(self.list_directory) self.list_directory.connect('button-press-event', self.directory_selected_cb) if dialog_type == DIRECTORY_SELECT: self.list_files = None vbox.pack_start(scr_directories) else: self.list_files = gtk.GtkCList() if self.multiselect: self.list_files.set_selection_mode( gtk.SELECTION_EXTENDED ) scr_files = gtk.GtkScrolledWindow() scr_files.add(self.list_files) self.list_files.connect('button-press-event', self.file_clicked_cb) self.list_files.connect('select-row', self.file_selected_cb ) self.list_files.connect('unselect-row', self.file_unselected_cb ) pane = gtk.GtkHPaned() scr_directories.set_usize(100, -1) scr_files.set_usize(100, -1) pane.add1(scr_directories) pane.add2(scr_files) pane.set_position(200) vbox.pack_start(pane) widget = None if dialog_type == FILE_SAVE: self.txt_filename = gtk.GtkEntry() widget = self.txt_filename elif dialog_type == FILE_OPEN: combo = gtk.GtkCombo() combo.set_value_in_list(gtk.FALSE, gtk.FALSE) combo.disable_activate() if app is not None: rfl = app.get_rfl() rfl.insert(0, '') combo.set_popdown_strings( rfl ) self.txt_filename = combo.entry widget = combo if widget is not None: table = gtk.GtkTable(rows=2, cols=2) lbl = gtk.GtkLabel(nls.get('filedlg-label-file-name', 'File Name:')) self.txt_filename.connect('focus-out-event', self.map_path_cb) self.txt_filename.connect('key-press-event', self.map_path_cb) table.attach(lbl, 0, 1, 0, 1) table.attach(widget, 1, 2, 0, 1) lbl = gtk.GtkLabel(nls.get('filedlg-label-filter-extension', 'Filter extension:')) self.cmb_filter = pguCombo() self.set_filter(filter) self.cmb_filter.entry.connect('changed', self.filter_cb) table.attach(lbl, 0, 1, 1, 2) table.attach(self.cmb_filter, 1, 2, 1, 2) vbox.pack_start(table, expand=gtk.FALSE) if dialog_type == FILE_SAVE: self.ok_button = gtk.GtkButton(nls.get('filedlg-button-ok', 'OK')) elif dialog_type == FILE_OPEN: self.ok_button = gtk.GtkButton(nls.get('filedlg-button-open', 'Open')) elif dialog_type == DIRECTORY_SELECT: self.ok_button = gtk.GtkButton(nls.get('filedlg-button-ok', 'OK')) self.cancel_button = gtk.GtkButton(nls.get('filedlg-button-cancel', 'Cancel')) self.ok_button.connect('clicked', self.remove_grab) self.ok_button.connect('clicked', self.update_cwd) self.cancel_button.connect('clicked', self.remove_grab) btn_box = gtk.GtkHButtonBox() btn_box.pack_start(self.ok_button) btn_box.pack_start(self.cancel_button) vbox.pack_start(btn_box, expand=gtk.FALSE) self.add(vbox) self.show_all() #make modal gtk.grab_add(self) self.ok_button.set_flags(gtk.CAN_DEFAULT) self.ok_button.grab_default() self.set_usize(400, 400) self.menu_update = gtk.FALSE while gtk.events_pending(): gtk.mainiteration(FALSE) self.refresh_directory() self.connect('delete-event', self.quit) self.ok_button.connect('clicked', self.quit) self.cancel_button.connect('clicked', self.quit) self.publish('quit') self.add_events(gtk.GDK.KEY_PRESS_MASK) self.connect('key-press-event', self.key_press_cb) self.result = 'cancel'
def __init__(self): GtkWindow.__init__(self) self.set_title('Layers') self.set_usize(250, 500) self.set_border_width(3) self.set_policy(TRUE, TRUE, FALSE) self.connect('delete-event', self.close) shell = GtkVBox(spacing=3) self.add(shell) gvhtml.set_help_topic(self, "layerdlg.html") # View chooser menu hbox = GtkHBox(spacing=3) shell.pack_start(hbox, expand=FALSE) hbox.pack_start(GtkLabel('View:'), expand=FALSE, padding=3) viewopt = GtkOptionMenu() hbox.pack_start(viewopt) viewmenu = GtkMenu() viewopt.set_menu(viewmenu) # Do we want to include a thumbnail? This is buggy on some platforms. if gview.get_preference('layer_thumbnail') is None \ or gview.get_preference('layer_thumbnail') == 'off': self.thumbnail = FALSE else: self.thumbnail = TRUE self.updating = FALSE # Layer list layerbox = GtkScrolledWindow() shell.pack_start(layerbox) if self.thumbnail: layerlist = GtkCList(cols=3) else: layerlist = GtkCList(cols=2) layerbox.add_with_viewport(layerlist) layerlist.set_shadow_type(SHADOW_NONE) layerlist.set_selection_mode(SELECTION_SINGLE) layerlist.set_row_height(THUMB_H + 4) layerlist.set_column_width(0, EYE_W) if self.thumbnail: layerlist.set_column_width(1, THUMB_W + 4) layerlist.connect('select-row', self.layer_selected) layerlist.connect('button-press-event', self.list_clicked) # Option buttons opts = (('new.xpm', 'New layer', self.new_layer), ('raise.xpm', 'Raise layer', self.raise_layer), ('lower.xpm', 'Lower layer', self.lower_layer), ('delete.xpm', 'Delete layer', self.delete_layer)) butbox = GtkHBox(spacing=1) shell.pack_start(butbox, expand=FALSE) for opt in opts: but = GtkButton() butbox.pack_start(but) but.add( GtkPixmap(self, os.path.join(gview.home_dir, 'pics', opt[0]))) tooltips.set_tip(but, opt[1]) but.connect('clicked', opt[2]) self.connect('realize', self.realize) shell.show_all() self.viewopt = viewopt self.viewmenu = viewmenu self.layerlist = layerlist self.views = {} self.menuitems = {} self.selected_view = None self.eye_pixmap = \ GtkPixmap(self,os.path.join(gview.home_dir,'pics','eye.xpm')) # Publish signals self.publish('active-view-changed') self.publish('deleted-layer')
def __init__(self): gtk.Window.__init__(self) self.set_title('Layers') self.set_size_request(250, 500) self.set_border_width(3) self.set_resizable(True) self.connect('delete-event',self.close) shell = gtk.VBox(spacing=3) self.add(shell) gvhtml.set_help_topic(self, "layerdlg.html" ); # View chooser menu hbox = gtk.HBox(spacing=3) shell.pack_start(hbox, expand=False) hbox.pack_start(gtk.Label('View:'), expand=False, padding=3) viewopt = gtk.OptionMenu() hbox.pack_start(viewopt) viewmenu = gtk.Menu() viewopt.set_menu(viewmenu) # Do we want to include a thumbnail? This is buggy on some platforms. # Note: GTK2 PORT - Thumbnails in tree view not tested if gview.get_preference('layer_thumbnail') is None \ or gview.get_preference('layer_thumbnail') == 'off': self.thumbnail = False else: self.thumbnail = True self.updating = False # # Layer list model # if self.thumbnail: self.list_store = gtk.ListStore( gtk.gdk.Pixbuf, gtk.gdk.Pixbuf, gobject.TYPE_STRING) else: self.list_store = gtk.ListStore( gtk.gdk.Pixbuf, gobject.TYPE_STRING) # # Layer list view # self.make_tree_view(self.list_store) layerbox = gtk.ScrolledWindow() shell.pack_start(layerbox) layerbox.add_with_viewport(self.tree_view) self.tree_view.get_selection().set_mode(gtk.SELECTION_SINGLE) self.tree_view.connect('button-press-event', self.list_pressed) self.tree_view.connect('button-release-event', self.list_released) # Option buttons opts = (('new.xpm', 'New layer', self.new_layer), ('raise.xpm', 'Raise layer', self.raise_layer), ('lower.xpm', 'Lower layer', self.lower_layer), ('delete.xpm','Delete layer', self.delete_layer)) butbox = gtk.HBox(spacing=1) shell.pack_start(butbox, expand=False) for opt in opts: but = gtk.Button() butbox.pack_start(but) img = gtk.Image() img.set_from_file(os.path.join(gview.home_dir,'pics',opt[0])) img.show() but.add(img) # This works too... #pixmap = gtk.gdk.pixmap_create_from_xpm(self.window, None, # os.path.join(gview.home_dir,'pics',opt[0])) #img = gtk.Image() #img.set_from_pixmap(pixmap[0], pixmap[1]) #img.show() #but.add(img) # tooltips.set_tip(but, opt[1]) but.connect('clicked', opt[2]) self.connect('realize', self.realize) shell.show_all() self.viewopt = viewopt self.viewmenu = viewmenu self.views = {} self.menuitems = {} self.selected_view = None path = os.path.join(gview.home_dir,'pics','eye.xpm') self.eye_pixbuf = gtk.gdk.pixbuf_new_from_file(path) # Publish signals self.publish('active-view-changed') self.publish('deleted-layer')
def __init__(self): GtkWindow.__init__(self) self.set_title('Layers') self.set_usize(250, 500) self.set_border_width(3) self.set_policy(TRUE,TRUE,FALSE) self.connect('delete-event',self.close) shell = GtkVBox(spacing=3) self.add(shell) gvhtml.set_help_topic(self, "layerdlg.html" ); # View chooser menu hbox = GtkHBox(spacing=3) shell.pack_start(hbox, expand=FALSE) hbox.pack_start(GtkLabel('View:'), expand=FALSE, padding=3) viewopt = GtkOptionMenu() hbox.pack_start(viewopt) viewmenu = GtkMenu() viewopt.set_menu(viewmenu) # Do we want to include a thumbnail? This is buggy on some platforms. if gview.get_preference('layer_thumbnail') is None \ or gview.get_preference('layer_thumbnail') == 'off': self.thumbnail = FALSE else: self.thumbnail = TRUE self.updating = FALSE # Layer list layerbox = GtkScrolledWindow() shell.pack_start(layerbox) if self.thumbnail: layerlist = GtkCList(cols=3) else: layerlist = GtkCList(cols=2) layerbox.add_with_viewport(layerlist) layerlist.set_shadow_type(SHADOW_NONE) layerlist.set_selection_mode(SELECTION_SINGLE) layerlist.set_row_height(THUMB_H + 4) layerlist.set_column_width(0, EYE_W) if self.thumbnail: layerlist.set_column_width(1, THUMB_W + 4) layerlist.connect('select-row', self.layer_selected) layerlist.connect('button-press-event', self.list_clicked) # Option buttons opts = (('new.xpm', 'New layer', self.new_layer), ('raise.xpm', 'Raise layer', self.raise_layer), ('lower.xpm', 'Lower layer', self.lower_layer), ('delete.xpm','Delete layer', self.delete_layer)) butbox = GtkHBox(spacing=1) shell.pack_start(butbox, expand=FALSE) for opt in opts: but = GtkButton() butbox.pack_start(but) but.add(GtkPixmap(self,os.path.join(gview.home_dir,'pics',opt[0]))) tooltips.set_tip(but, opt[1]) but.connect('clicked', opt[2]) self.connect('realize', self.realize) shell.show_all() self.viewopt = viewopt self.viewmenu = viewmenu self.layerlist = layerlist self.views = {} self.menuitems = {} self.selected_view = None self.eye_pixmap = \ GtkPixmap(self,os.path.join(gview.home_dir,'pics','eye.xpm')) # Publish signals self.publish('active-view-changed') self.publish('deleted-layer')
def __init__(self, view): GtkWindow.__init__(self) self.set_title('Print') self.connect('delete-event', self.close) self.view = view gvhtml.set_help_topic(self, "gvprint.html") self.command = gview.get_preference('print_command') if self.command is None: self.command = 'lpr' self.filename = 'openev.ps' cgroup = GtkVBox(spacing=6) cgroup.set_border_width(10) self.add(cgroup) table = GtkTable() table.n_columns = 2 table.n_rows = 4 cgroup.add(table) # Setup Driver Option Menu driver_label = GtkLabel('Driver:') driver_label.set_alignment(0, 0.5) table.attach(driver_label, 0, 1, 0, 1) if os.name == "nt": self.driver = gvutils.GvOptionMenu( ('PostScript', 'TIFF', 'PNG', 'Windows Print Driver', 'GIF'), self.update_cb) else: self.driver = gvutils.GvOptionMenu( ('PostScript', 'TIFF', 'PNG', '', 'GIF'), self.update_cb) table.attach(self.driver, 1, 2, 0, 1) # Setup Device Option Menu device_label = GtkLabel('Device:') device_label.set_alignment(0, 0.5) table.attach(device_label, 0, 1, 1, 2) self.device = gvutils.GvOptionMenu(('File', 'Spool to Printer'), self.device_cb) table.attach(self.device, 1, 2, 1, 2) # Setup File/Command entry. self.file_label = GtkLabel('File:') self.file_label.set_alignment(0, 0.5) table.attach(self.file_label, 0, 1, 2, 3) self.file = GtkEntry(maxlen=40) table.attach(self.file, 1, 2, 2, 3) # Setup Output Type self.output_label = GtkLabel('Output Type:') self.output_label.set_alignment(0, 0.5) table.attach(self.output_label, 0, 1, 3, 4) self.output = gvutils.GvOptionMenu(('Greyscale', 'Color'), None) table.attach(self.output, 1, 2, 3, 4) # Setup Paper Type self.paper_label = GtkLabel('Paper:') self.paper_label.set_alignment(0, 0.5) table.attach(self.paper_label, 0, 1, 4, 5) sizes = [] for entry in paper_sizes: sizes.append(entry[0]) self.paper = gvutils.GvOptionMenu(sizes, self.update_cb) table.attach(self.paper, 1, 2, 4, 5) # Setup Scale slider self.scale_label = GtkLabel('Scale:') self.scale_label.set_alignment(0, 0.5) table.attach(self.scale_label, 0, 1, 5, 6) self.scale_adjustment = GtkAdjustment(1, 0, 1.25, 0.05, 0.05, 0.05) self.scale_slider = GtkHScale(self.scale_adjustment) table.attach(self.scale_slider, 1, 2, 5, 6) # Setup Resolution spinner resolution_label = GtkLabel('Resolution:') resolution_label.set_alignment(0, 0.5) table.attach(resolution_label, 0, 1, 6, 7) self.resolution_adjustment = GtkAdjustment(1, 0, 10, 0.1, 0.1, 0.1) self.resolution_spinner = \ GtkSpinButton(self.resolution_adjustment,climb_rate=0.1,digits=1) self.resolution_spinner.connect("changed", self.resolution_cb) table.attach(self.resolution_spinner, 1, 2, 6, 7) # Setup Size entries size_label = GtkLabel('Image size:') size_label.set_alignment(0, 0.5) table.attach(size_label, 0, 1, 7, 8) size_box = GtkHBox(spacing=5) self.xsize_entry = GtkEntry() self.xsize_entry.connect('activate', self.resolution_cb) self.xsize_entry.connect('leave-notify-event', self.resolution_cb) size_box.pack_start(self.xsize_entry) size_box.pack_start(GtkLabel('x')) self.ysize_entry = GtkEntry() self.ysize_entry.connect('activate', self.resolution_cb) self.ysize_entry.connect('leave-notify-event', self.resolution_cb) size_box.pack_start(self.ysize_entry) table.attach(size_box, 1, 2, 7, 8) # Add Print, and Close button(s) btn_box = GtkHBox(spacing=10) but = GtkButton('Print') but.connect('clicked', self.print_cb) btn_box.pack_start(but) but = GtkButton('Close') but.connect('clicked', self.close) btn_box.pack_start(but) table.attach(btn_box, 0, 2, 8, 9) # Initialize values. if gview.get_preference('print_driver') is not None: self.driver.set_history(int(gview.get_preference('print_driver'))) elif os.name == 'nt': self.driver.set_history(DR_WINPRINT) if gview.get_preference('print_device') is not None: self.device.set_history(int(gview.get_preference('print_device'))) if self.device.get_history() == 0: self.set_default_filename() else: self.file.set_text(self.command) if gview.get_preference('print_paper') is not None: self.paper.set_history(int(gview.get_preference('print_paper'))) if gview.get_preference('print_output') is not None: self.output.set_history(int(gview.get_preference('print_output'))) if gview.get_preference('print_resolution') is not None: resolution = float(gview.get_preference('print_resolution')) self.resolution_adjustment.set_value(resolution) width = int(self.view.get_width() * resolution + 0.5) height = int(self.view.get_height() * resolution + 0.5) self.xsize_entry.set_text(str(width)) self.ysize_entry.set_text(str(height)) self.set_paper_size() self.scale_adjustment.set_value(1.0) # Show table.set_row_spacings(6) table.show_all() self.update_cb() cgroup.show() self.show()
def __init__(self, view): GtkWindow.__init__(self) self.set_title("Print") self.connect("delete-event", self.close) self.view = view gvhtml.set_help_topic(self, "gvprint.html") self.command = gview.get_preference("print_command") if self.command is None: self.command = "lpr" self.filename = "openev.ps" cgroup = GtkVBox(spacing=6) cgroup.set_border_width(10) self.add(cgroup) table = GtkTable() table.n_columns = 2 table.n_rows = 4 cgroup.add(table) # Setup Driver Option Menu driver_label = GtkLabel("Driver:") driver_label.set_alignment(0, 0.5) table.attach(driver_label, 0, 1, 0, 1) if os.name == "nt": self.driver = gvutils.GvOptionMenu( ("PostScript", "TIFF", "PNG", "Windows Print Driver", "GIF"), self.update_cb ) else: self.driver = gvutils.GvOptionMenu(("PostScript", "TIFF", "PNG", "", "GIF"), self.update_cb) table.attach(self.driver, 1, 2, 0, 1) # Setup Device Option Menu device_label = GtkLabel("Device:") device_label.set_alignment(0, 0.5) table.attach(device_label, 0, 1, 1, 2) self.device = gvutils.GvOptionMenu(("File", "Spool to Printer"), self.device_cb) table.attach(self.device, 1, 2, 1, 2) # Setup File/Command entry. self.file_label = GtkLabel("File:") self.file_label.set_alignment(0, 0.5) table.attach(self.file_label, 0, 1, 2, 3) self.file = GtkEntry(maxlen=40) table.attach(self.file, 1, 2, 2, 3) # Setup Output Type self.output_label = GtkLabel("Output Type:") self.output_label.set_alignment(0, 0.5) table.attach(self.output_label, 0, 1, 3, 4) self.output = gvutils.GvOptionMenu(("Greyscale", "Color"), None) table.attach(self.output, 1, 2, 3, 4) # Setup Paper Type self.paper_label = GtkLabel("Paper:") self.paper_label.set_alignment(0, 0.5) table.attach(self.paper_label, 0, 1, 4, 5) sizes = [] for entry in paper_sizes: sizes.append(entry[0]) self.paper = gvutils.GvOptionMenu(sizes, self.update_cb) table.attach(self.paper, 1, 2, 4, 5) # Setup Scale slider self.scale_label = GtkLabel("Scale:") self.scale_label.set_alignment(0, 0.5) table.attach(self.scale_label, 0, 1, 5, 6) self.scale_adjustment = GtkAdjustment(1, 0, 1.25, 0.05, 0.05, 0.05) self.scale_slider = GtkHScale(self.scale_adjustment) table.attach(self.scale_slider, 1, 2, 5, 6) # Setup Resolution spinner resolution_label = GtkLabel("Resolution:") resolution_label.set_alignment(0, 0.5) table.attach(resolution_label, 0, 1, 6, 7) self.resolution_adjustment = GtkAdjustment(1, 0, 10, 0.1, 0.1, 0.1) self.resolution_spinner = GtkSpinButton(self.resolution_adjustment, climb_rate=0.1, digits=1) self.resolution_spinner.connect("changed", self.resolution_cb) table.attach(self.resolution_spinner, 1, 2, 6, 7) # Setup Size entries size_label = GtkLabel("Image size:") size_label.set_alignment(0, 0.5) table.attach(size_label, 0, 1, 7, 8) size_box = GtkHBox(spacing=5) self.xsize_entry = GtkEntry() self.xsize_entry.connect("activate", self.resolution_cb) self.xsize_entry.connect("leave-notify-event", self.resolution_cb) size_box.pack_start(self.xsize_entry) size_box.pack_start(GtkLabel("x")) self.ysize_entry = GtkEntry() self.ysize_entry.connect("activate", self.resolution_cb) self.ysize_entry.connect("leave-notify-event", self.resolution_cb) size_box.pack_start(self.ysize_entry) table.attach(size_box, 1, 2, 7, 8) # Add Print, and Close button(s) btn_box = GtkHBox(spacing=10) but = GtkButton("Print") but.connect("clicked", self.print_cb) btn_box.pack_start(but) but = GtkButton("Close") but.connect("clicked", self.close) btn_box.pack_start(but) table.attach(btn_box, 0, 2, 8, 9) # Initialize values. if gview.get_preference("print_driver") is not None: self.driver.set_history(int(gview.get_preference("print_driver"))) elif os.name == "nt": self.driver.set_history(DR_WINPRINT) if gview.get_preference("print_device") is not None: self.device.set_history(int(gview.get_preference("print_device"))) if self.device.get_history() == 0: self.set_default_filename() else: self.file.set_text(self.command) if gview.get_preference("print_paper") is not None: self.paper.set_history(int(gview.get_preference("print_paper"))) if gview.get_preference("print_output") is not None: self.output.set_history(int(gview.get_preference("print_output"))) if gview.get_preference("print_resolution") is not None: resolution = float(gview.get_preference("print_resolution")) self.resolution_adjustment.set_value(resolution) width = int(self.view.get_width() * resolution + 0.5) height = int(self.view.get_height() * resolution + 0.5) self.xsize_entry.set_text(str(width)) self.ysize_entry.set_text(str(height)) self.set_paper_size() self.scale_adjustment.set_value(1.0) # Show table.set_row_spacings(6) table.show_all() self.update_cb() cgroup.show() self.show()
def prepare_legend(self): if self.resizing: return if self.layer.get_property('Class_sn') is not None: self.Class_sn = int(self.layer.get_property('Class_sn')) #remove any existing shapes self.shapes.delete_shapes(range(len(self.shapes))) samp_x_size = gview.get_preference('legend-sample-x-size') if samp_x_size is None: samp_x_size = 20 else: samp_x_size = int(samp_x_size) samp_y_size = gview.get_preference('legend-sample-y-size') if samp_y_size is None: samp_y_size = 20 else: samp_y_size = int(samp_y_size) title_font = pgufont.XLFDFontSpec() font_spec = gview.get_preference('legend-title-font') if font_spec is None: title_font.set_font_part('Family', 'times') title_font.set_font_part('Pixel Size', '20') else: title_font.parse_font_spec(font_spec) title_font_color = gview.get_preference('legend-title-font-color') if title_font_color is None: title_font_color = (0.0, 0.0, 0.0, 1.0) else: title_font_color = color_string_to_tuple(title_font_color) title_ogr_color = gv_to_ogr_color(title_font_color) label_font = pgufont.XLFDFontSpec() font_spec = gview.get_preference('legend-label-font') if font_spec is None: label_font.set_font_part('Family', 'times') label_font.set_font_part('Pixel Size', '14') else: label_font.parse_font_spec(font_spec) label_font_color = gview.get_preference('legend-label-font-color') if label_font_color is None: label_font_color = (0.0, 0.0, 0.0, 1.0) else: label_font_color = color_string_to_tuple(label_font_color) label_ogr_color = gv_to_ogr_color(label_font_color) #handle large fonts in the sample text try: gdk_font = load_font(str(label_font)) except: # get a default font if preferred one # can't be loaded. gdk_font = load_font('*') h = gdk_font.height("Wj") samp_offset = max(samp_y_size, h) + 10 #handle multi-line text for the title. try: gdk_title_font = load_font(str(title_font)) except: gdk_title_font = load_font('*') lines = string.split(self.classification.title, '\\n') x_offset = 10 #start title 10 pixels in from left edge col_offset = 30 #space columns apart y_offset = 35 #start title 35 pixels down from top edge title_width = 0 max_height = 0 #resize the window appropriately title_height = y_offset title_width = 0 for idx in range(len(lines)): line = lines[idx] title_height = title_height + gdk_title_font.height(line) title_width = max(title_width, gdk_title_font.width(line)) title_height = title_height + 10 title_width = x_offset + title_width + 10 cols = int (self.classification.count / 8) samps = min( 8, self.classification.count ) samp_height = samps * (samp_offset) + 10 samp_width = x_offset for i in range( cols + 1): idx = 8 * i col_width = 0 while idx < self.classification.count and idx < 8 * (i + 1): name = self.classification.name[idx] width = samp_x_size + 20 + gdk_font.width(name) col_width = max(col_width, width) idx = idx + 1 samp_width = samp_width + col_width + col_offset samp_width = samp_width + 10 total_width = max(title_width, samp_width) total_height = title_height + samp_height self.resizing = TRUE if (self.get_window().width < total_width) or \ (self.get_window().height < total_height): self.resize_count = self.resize_count + 1 if self.resize_count < 2: self.set_usize(total_width, total_height) self.resizing = FALSE for idx in range(len(lines)): line = lines[idx] w = gdk_title_font.width(line) h = gdk_title_font.height(line) title_width = max(title_width, w) samp_text = gview.GvShape() samp_text.add_node( x_offset, y_offset ) samp_text.set_property( '_gv_ogrfs', 'LABEL(c:' + title_ogr_color + \ ',f:"' + str(title_font) + '",' \ + 't:"' + line + '")' ) self.shapes.append(samp_text) y_offset = y_offset + h if ((len(lines[0]) > 6) and (lines[0][:6] != 'Legend') and (lines[0][:6] != 'legend')): self.set_title('Legend: ' + lines[0] + '...') else: self.set_title(lines[0] + '...') y_offset = y_offset + 10 title_offset = y_offset max_width = 0 max_height = 0 for class_id in range(self.classification.count): color = self.classification.get_color( class_id ) symbol = self.classification.get_symbol( class_id ) scale = self.classification.get_scale( class_id ) if symbol is not None: samp = gview.GvShape( type = gview.GVSHAPE_POINT ) samp.add_node( x_offset + (samp_x_size/2), y_offset + (samp_y_size/2) ) ogrfs_color = '#%02x%02x%02x%02x' % (int(color[0] * 255.999), int(color[1] * 255.999), int(color[2] * 255.999), int(color[3] * 255.999)) ogrfs = "SYMBOL(id:%s,c:%s,s:%s)" % (symbol, ogrfs_color, scale) samp.set_property( "_gv_ogrfs", ogrfs ) else: samp = gview.GvShape( type = gview.GVSHAPE_AREA ) samp.add_node( x_offset, y_offset ) samp.add_node( x_offset+samp_x_size, y_offset ) samp.add_node( x_offset+samp_x_size, y_offset+samp_y_size ) samp.add_node( x_offset, y_offset+samp_y_size ) samp.add_node( x_offset, y_offset ) color = '%f %f %f %f' % color samp.set_property( '_gv_color', color ) samp.set_property( '_gv_fill_color', color ) self.shapes.append( samp ) name = self.classification.name[class_id] samp_text = gview.GvShape() samp_text.add_node( x_offset+samp_x_size+10, y_offset + 17 ) font = str(label_font) samp_text.set_property( '_gv_ogrfs', 'LABEL(c:' + label_ogr_color + \ ',f:"'+font+'",t:"'+name+'")' ) self.shapes.append( samp_text ) this_width = samp_x_size + 20 + gdk_font.width(name) if max_width < this_width: max_width = this_width y_offset = y_offset + samp_offset if y_offset+samp_offset > self.viewarea.get_height(): max_height = max(max_height, y_offset + samp_offset) y_offset = title_offset x_offset = x_offset + col_offset + max_width max_width = 0 self.vlayer.changed()
def gui_update(self, *args): self.updating = TRUE # Update the field list. fnlist = ['disabled'] if self.layer is not None: schema = self.layer.get_parent().get_schema() for item in schema: fnlist.append(item[0]) if fnlist != self.old_list: self.label_field.set_popdown_strings(fnlist) self.old_list = fnlist self.label_field.entry.delete_text(0, -1) if self.ogrfs_obj is None: self.label_field.entry.insert_text('disabled') self.label_color.set_color((0.5, 1.0, 0.5, 1.0)) if self.enable_offsets: self.x_offset.set_value(0.0) self.y_offset.set_value(0.0) else: font = pgufont.XLFDFontSpec() font_spec = self.ogrfs_obj.parms['f'].value if font_spec is not None: font.parse_font_spec(font_spec) else: default_font = gview.get_preference('default-font') if default_font is None: font.set_font_part('Family', 'fixed') else: font.parse_font_spec(default_font) self.label_font.set_font(str(font)) tparm = self.ogrfs_obj.parms['t'] if tparm.role == 'field_name': self.label_field.entry.insert_text(tparm.value) if self.shape_obj is not None: text_value = self.shape_obj.get_property(tparm.value, '') else: text_value = '' else: self.label_field.entry.insert_text('disabled') text_value = tparm.value color = self.ogrfs_obj.get_color((0.5, 1.0, 0.5, 1.0)) self.label_color.set_color(color) if self.text_entry is not None: self.text_entry.set_text(text_value) #self.text_entry.set_sensitive(tparm.role != 'field_name') if self.enable_offsets: try: dx = float(self.ogrfs_obj.get_parm('dx')) self.x_offset.set_value(dx) except: dx = None if dx is None: dx = 0.0 try: dy = float(self.ogrfs_obj.get_parm('dy')) self.y_offset.set_value(-dy) except: dy = None if dy is None: dy = 0.0 #update the widgets self.updating = FALSE
# # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the # Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ############################################################################### import gtk import gview import os.path from osgeo import gdal from numpy import array, add, sqrt from pgu import ComboText from gvutils import create_stock_button hisDir = gview.get_preference('histos_directory') zooms = [10.0,5.0,2.5,1.0,0.5,0.1,0.05,0.01,0.005,0.001] class HistogramFrame(gtk.Frame): def __init__(self, name, srcIdx, hisSrc, master): gtk.Frame.__init__(self, name) self.set_name(name) self.srcIdx = srcIdx self.master = master self.updating = True self.connect('destroy', self.cleanup) self.min = self.master.layer.min_get(srcIdx) self.max = self.master.layer.max_get(srcIdx) self.createGUI()
def prepare_legend(self): if self.resizing: return if self.layer.get_property('Class_sn') is not None: self.Class_sn = int(self.layer.get_property('Class_sn')) #remove any existing shapes self.shapes.delete_shapes(range(len(self.shapes))) samp_x_size = gview.get_preference('legend-sample-x-size') if samp_x_size is None: samp_x_size = 20 else: samp_x_size = int(samp_x_size) samp_y_size = gview.get_preference('legend-sample-y-size') if samp_y_size is None: samp_y_size = 20 else: samp_y_size = int(samp_y_size) title_font = pgufont.XLFDFontSpec() font_spec = gview.get_preference('legend-title-font') if font_spec is None: title_font.set_font_part('Family', 'times') title_font.set_font_part('Pixel Size', '20') else: title_font.parse_font_spec(font_spec) title_font_color = gview.get_preference('legend-title-font-color') if title_font_color is None: title_font_color = (0.0, 0.0, 0.0, 1.0) else: title_font_color = color_string_to_tuple(title_font_color) title_ogr_color = gv_to_ogr_color(title_font_color) label_font = pgufont.XLFDFontSpec() font_spec = gview.get_preference('legend-label-font') if font_spec is None: label_font.set_font_part('Family', 'times') label_font.set_font_part('Pixel Size', '14') else: label_font.parse_font_spec(font_spec) label_font_color = gview.get_preference('legend-label-font-color') if label_font_color is None: label_font_color = (0.0, 0.0, 0.0, 1.0) else: label_font_color = color_string_to_tuple(label_font_color) label_ogr_color = gv_to_ogr_color(label_font_color) #handle large fonts in the sample text try: gdk_font = load_font(str(label_font)) except: # get a default font if preferred one # can't be loaded. gdk_font = load_font('*') h = gdk_font.height("Wj") samp_offset = max(samp_y_size, h) + 10 #handle multi-line text for the title. try: gdk_title_font = load_font(str(title_font)) except: gdk_title_font = load_font('*') lines = string.split(self.classification.title, '\\n') x_offset = 10 #start title 10 pixels in from left edge col_offset = 30 #space columns apart y_offset = 35 #start title 35 pixels down from top edge title_width = 0 max_height = 0 #resize the window appropriately title_height = y_offset title_width = 0 for idx in range(len(lines)): line = lines[idx] title_height = title_height + gdk_title_font.height(line) title_width = max(title_width, gdk_title_font.width(line)) title_height = title_height + 10 title_width = x_offset + title_width + 10 cols = int(self.classification.count / 8) samps = min(8, self.classification.count) samp_height = samps * (samp_offset) + 10 samp_width = x_offset for i in range(cols + 1): idx = 8 * i col_width = 0 while idx < self.classification.count and idx < 8 * (i + 1): name = self.classification.name[idx] width = samp_x_size + 20 + gdk_font.width(name) col_width = max(col_width, width) idx = idx + 1 samp_width = samp_width + col_width + col_offset samp_width = samp_width + 10 total_width = max(title_width, samp_width) total_height = title_height + samp_height self.resizing = TRUE if (self.get_window().width < total_width) or \ (self.get_window().height < total_height): self.resize_count = self.resize_count + 1 if self.resize_count < 2: self.set_usize(total_width, total_height) self.resizing = FALSE for idx in range(len(lines)): line = lines[idx] w = gdk_title_font.width(line) h = gdk_title_font.height(line) title_width = max(title_width, w) samp_text = gview.GvShape() samp_text.add_node(x_offset, y_offset) samp_text.set_property( '_gv_ogrfs', 'LABEL(c:' + title_ogr_color + \ ',f:"' + str(title_font) + '",' \ + 't:"' + line + '")' ) self.shapes.append(samp_text) y_offset = y_offset + h if ((len(lines[0]) > 6) and (lines[0][:6] != 'Legend') and (lines[0][:6] != 'legend')): self.set_title('Legend: ' + lines[0] + '...') else: self.set_title(lines[0] + '...') y_offset = y_offset + 10 title_offset = y_offset max_width = 0 max_height = 0 for class_id in range(self.classification.count): color = self.classification.get_color(class_id) symbol = self.classification.get_symbol(class_id) scale = self.classification.get_scale(class_id) if symbol is not None: samp = gview.GvShape(type=gview.GVSHAPE_POINT) samp.add_node(x_offset + (samp_x_size / 2), y_offset + (samp_y_size / 2)) ogrfs_color = '#%02x%02x%02x%02x' % ( int(color[0] * 255.999), int(color[1] * 255.999), int(color[2] * 255.999), int(color[3] * 255.999)) ogrfs = "SYMBOL(id:%s,c:%s,s:%s)" % (symbol, ogrfs_color, scale) samp.set_property("_gv_ogrfs", ogrfs) else: samp = gview.GvShape(type=gview.GVSHAPE_AREA) samp.add_node(x_offset, y_offset) samp.add_node(x_offset + samp_x_size, y_offset) samp.add_node(x_offset + samp_x_size, y_offset + samp_y_size) samp.add_node(x_offset, y_offset + samp_y_size) samp.add_node(x_offset, y_offset) color = '%f %f %f %f' % color samp.set_property('_gv_color', color) samp.set_property('_gv_fill_color', color) self.shapes.append(samp) name = self.classification.name[class_id] samp_text = gview.GvShape() samp_text.add_node(x_offset + samp_x_size + 10, y_offset + 17) font = str(label_font) samp_text.set_property( '_gv_ogrfs', 'LABEL(c:' + label_ogr_color + \ ',f:"'+font+'",t:"'+name+'")' ) self.shapes.append(samp_text) this_width = samp_x_size + 20 + gdk_font.width(name) if max_width < this_width: max_width = this_width y_offset = y_offset + samp_offset if y_offset + samp_offset > self.viewarea.get_height(): max_height = max(max_height, y_offset + samp_offset) y_offset = title_offset x_offset = x_offset + col_offset + max_width max_width = 0 self.vlayer.changed()