Class: Finder

Inherits:
Findview show all
Defined in:
ext/ae-editor/ae-editor.rb

Constant Summary

Constants included from TkResizable

TkResizable::MIN_HEIGHT, TkResizable::MIN_WIDTH

Instance Attribute Summary collapse

Attributes inherited from TkBaseTitledFrame

#frame, #top

Instance Method Summary collapse

Methods inherited from TkFloatTitledFrame

#head_buttons, #hide, #hide_if_visible, #on_close=, #show_grabbed, #title

Methods included from TkResizable

#resizing_do_move_obj, #resizing_do_press, #start_resizing, #stop_resizing

Methods included from TkMovable

#moving_do_move_obj, #moving_do_press, #start_moving, #stop_moving

Methods inherited from TkBaseTitledFrame

#add_fixed_button, #add_fixed_menu_button, #add_fixed_panel, #add_fixed_sep, #create_frame, #head_buttons, #menu_button, #visible?

Constructor Details

#initialize(_frame, _controller) ⇒ Finder

Returns a new instance of Finder.



5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
# File 'ext/ae-editor/ae-editor.rb', line 5430

def initialize(_frame, _controller)
  super(_frame)
  #@l_file.configure('text'=>_title)
  #Tk.tk_call('wm', 'title', self, _title )
  @controller = _controller
  @forwards = true
  @find_action = proc{
    do_find_next
    hide
  }
  @b_go.bind('1', @find_action)
  
	 @b_replace.bind('1', proc{do_replace})  
  
	 @b_replace_all.bind('1', proc{do_replace_all})  

  @e_what_entry.bind_append('KeyRelease'){|e|
    case e.keysym
    when 'Return'
      @find_action.call
      Tk.callback_break
    else
      widget_state
    end
  }
  e2 =  TkWinfo.children(@e_with)[0]
  e2.bind_append('KeyPress'){|e|
      widget_state
  }
  @last_index='insert'
  
  @goto_line_dialog = GoToLine.new(_frame).hide
  @goto_line_dialog.on_close=proc{@goto_line_dialog.hide}

  @goto_line_dialog.b_go.bind('1',proc{go_line})
  @goto_line_dialog.e_line.bind_append('KeyRelease'){|e|
    case e.keysym
    when 'Return'
      go_line
      Tk.callback_break
    end
  }

end

Instance Attribute Details

#e_whatObject (readonly)

Returns the value of attribute e_what.



5429
5430
5431
# File 'ext/ae-editor/ae-editor.rb', line 5429

def e_what
  @e_what
end

Instance Method Details

#do_find(_istart = nil) ⇒ Object



5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
# File 'ext/ae-editor/ae-editor.rb', line 5561

def do_find(_istart=nil)
  @forwards =  @cb_back.cget('onvalue') != @cb_back.cget('variable').value.to_i
  _found = false
  @idx1 = nil
  @idx2 = nil
  if @e_what.text.length > 0
    update_combo(@e_what.text)
    if !_istart && self.editor.text.index('insert')!=nil
      _istart ='insert'
    elsif defined?(@last_index)
    		_istart = @last_index
    else
      _istart = '1.0'
    end
    
    # propagate some search options
    options = []
    if !@forwards
      options << 'backwards'
    end
    if @cb_reg.cget('onvalue')==@cb_reg.cget('variable').value.to_i
      options << 'regexp'
    end
    if @cb_ignore_case.cget('onvalue')==@cb_ignore_case.cget('variable').value.to_i
      options << 'nocase'
    end
    _index = self.editor.text.tksearch(options,@e_what.text,_istart)
    
    if _index && _index.length>0
      self.editor.text.see(_index)
      _row, _col = _index.split('.')
      _index_sel_end = _row.to_i.to_s+'.'+(_col.to_i+@e_what.text.length).to_i.to_s
      if @forwards
        @last_index= _index_sel_end
      else
        @last_index= _row.to_i.to_s+'.'+(_col.to_i-1).to_i.to_s
      end
      self.editor.text.tag_add('sel', _index,_index_sel_end)
      self.editor.text.set_insert(_index)
      @idx1 =_index
              @idx2 =_index_sel_end
      _found = true
      @controller.bookmark_add(self.editor.file, _index)
    else
      _message = '"'+@e_what.value+'" not found'
      TkDialog2.new('message'=>_message, 'buttons'=>['Ok']).show()
    end

  else
    self.show()
  end
  self.editor.text.focus
  return _found
end

#do_find_nextObject



5616
5617
5618
5619
5620
5621
# File 'ext/ae-editor/ae-editor.rb', line 5616

def do_find_next
  if @idx1 != nil
  		self.editor.text.tag_remove('sel',@idx1,@idx2)
  end
  do_find(@last_index)
end

#do_replaceObject



5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
# File 'ext/ae-editor/ae-editor.rb', line 5475

def do_replace
  if do_find_next
      _message = 'Replace "'+@e_what.value+'" with "'+@e_with.value+'" ?'
      if TkDialog2.new('message'=>_message, 'buttons'=>['Yes','No']).show() == 0
        self.editor.text.delete(@idx1,@idx2)
        self.editor.text.insert(@idx1,@e_with.value)
        self.editor.check_modify
      end
  end
end

#do_replace_allObject



5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
# File 'ext/ae-editor/ae-editor.rb', line 5486

def do_replace_all
  while do_find_next
      _message = 'Replace "'+@e_what.value+'" with "'+@e_with.value+'" ?'
      _rc = TkDialog2.new('message'=>_message, 'buttons'=>['Yes','No','Annulla']).show()
      if _rc == 0
        self.editor.text.delete(@idx1,@idx2)
        self.editor.text.insert(@idx1,@e_with.value)
        self.editor.check_modify
      elsif _rc == 2
        break
      end
  end
end

#editorObject



5511
5512
5513
5514
5515
5516
# File 'ext/ae-editor/ae-editor.rb', line 5511

def editor
  if @editor_caller == nil
    @editor_caller = @controller.raised
  end
  return @editor_caller
end

#go_lineObject



5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
# File 'ext/ae-editor/ae-editor.rb', line 5523

def go_line
  if @goto_line_dialog.e_line.value.length > 0
    _row = @goto_line_dialog.e_line.value
    _index = _row.strip+'.1'
    self.editor.text.see(_index)
    self.editor.text.tag_remove('selected','1.0','end')
    self.editor.text.tag_add('selected',_index,_index+' lineend')
    #self.editor.text.tag_add('sel', _index,_index+' lineend')
    self.editor.text.set_insert(_index)
    @controller.bookmark_add(self.editor.file, _index)
  @goto_line_dialog.hide
  end
  #self.hide()
end

#showObject



5549
5550
5551
5552
# File 'ext/ae-editor/ae-editor.rb', line 5549

def show
  super
  use(@controller.raised)
end

#show_go_to_line_dialogObject



5518
5519
5520
5521
# File 'ext/ae-editor/ae-editor.rb', line 5518

def show_go_to_line_dialog
  use(@controller.raised)
  @goto_line_dialog.show
end

#update_combo(_txt) ⇒ Object



5554
5555
5556
5557
5558
5559
# File 'ext/ae-editor/ae-editor.rb', line 5554

def update_combo(_txt)
  values = @e_what.cget('values')
  if (values != nil && !values.include?(_txt))
    @e_what.insert('end', @e_what.value)
  end
end

#use(_editor) ⇒ Object



5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
# File 'ext/ae-editor/ae-editor.rb', line 5538

def use(_editor)
  if (_editor != @editor_caller)
    @last_index='insert'
    @editor_caller = _editor
    _title = '?'
    _title = File.basename(_editor.file) if _editor.file  
    title(_title)
    @goto_line_dialog.title(_title) if @goto_line_dialog
  end
end

#widget_stateObject



5500
5501
5502
5503
5504
5505
5506
5507
5508
# File 'ext/ae-editor/ae-editor.rb', line 5500

def widget_state
 		if (@e_what.value.length > 0) && (@e_with.value.length > 0)
 			@b_replace.configure('state'=>'active')
 			@b_replace_all.configure('state'=>'active')
 		else
 			@b_replace.configure('state'=>'disabled')
 			@b_replace_all.configure('state'=>'disabled')
 		end
end