module Ropenlayer module Openlayer module BoxControl class EditMap < Base def initialize(map) super('edit_map', map, :css_class => 'olControlEditMapControl') Ropenlayer::Openlayer::BoxControl::EditMap.controls.each do |control_name, control_options| @links << { :id => "'link_to_edit_map_control_#{ control_name }'", :class => "'olControlEditMapControlLink with_icon action_#{ control_name }'", :text => "'#{ control_options[:description] }'", :title => "'#{ control_options[:description] }'", :onclick => %( #{ map.js_helper.update_xhtml_element(map.js_notification_area, "'#{ control_options[:help]}'") }; \ #{ map.js_helper.hide_xhtml_element(@js_links_id) }; \ #{ map.js_id }ActivateEditControl('#{ control_name }'); return false ) } end @links << { :id => "'link_to_edit_map_control_cancel'", :class => "'olControlEditMapControlLink with_icon action_cancel'", :text => "Cancelar", :onclick => %( #{ map.js_id }ActivateEditControl('none'); #{ map.js_helper.hide_xhtml_element(@js_links_id) }; return false) } end def to_js %( var #{ map.js_id }EditMapControls = {}; function #{ map.js_id }ActivateEditControl(selectedControl) { for(key in #{ map.js_id }EditMapControls) { var control = #{ map.js_id }EditMapControls[key]; if(selectedControl == key) { control.activate(); } else { control.deactivate(); } } } #{ new_elements_layer = Ropenlayer::Openlayer::Layer::Base.new(:new_elements, @map) new_elements_layer.to_js } #{ Ropenlayer::Openlayer::BoxControl::EditMap.controls.inject('') do |edit_controls_js, control_array| control_name = control_array.first control_options = control_array.last control_options[:args] = [ new_elements_layer.js_id, control_options[:args]].flatten control_options[:propierties][:featureAdded] = map.options[:add_feature_callback] || 'false' # FIXME edit_controls_js << %( #{ Ropenlayer::Openlayer::Js.new_var("#{ map.js_id }_#{ control_name }", "#{ Ropenlayer::Openlayer::Js.new_method(control_options[:method], control_options) }").to_js } #{ Ropenlayer::Openlayer::Js.new("#{ map.js_id }.addControl(#{ map.js_id }_#{ control_name })").to_js } #{ Ropenlayer::Openlayer::Js.new("#{ map.js_id }EditMapControls['#{ control_name }'] = #{ map.js_id }_#{ control_name }").to_js } ) edit_controls_js end } #{ super } ) end private def self.controls { :add_point => {:method => "OpenLayers.Control.DrawFeature", :args => [ "OpenLayers.Handler.Point" ], :propierties => { }, :description => 'Crear un punto', :help => 'Para crear un punto en el mapa, haga click en la posición deseada' }, :add_line => { :method => "OpenLayers.Control.DrawFeature", :args => [ "OpenLayers.Handler.Path" ], :propierties => { }, :description => 'Crear una línea', :help => 'Para crear un punto en el mapa, haga click en la posición deseada' }, :add_polygon => { :method => "OpenLayers.Control.DrawFeature", :args => [ "OpenLayers.Handler.Polygon" ], :propierties => { }, :description => 'Crear un polígono', :help => 'Para crear un punto en el mapa, haga click en la posición deseada' } } end end end end end