[wxruby-users] WX::Dialog won't close

Glen Holcomb damnbigman at gmail.com
Thu Oct 2 15:25:23 EDT 2008


I have an interesting problem.  I have a dialog which refuses to go away
once it has finished it's associated code.

Here is the code:

class DBPopulateDialog < Wx::Dialog
    def initialize(parent, id, title, pos, size, style, name)
      super(parent, id, title, pos, size, style, name)

      sizer = Wx::BoxSizer.new(Wx::VERTICAL)

      @server = Wx::TextCtrl.new(self, -1, "Server", Wx::DEFAULT_POSITION,
Wx::DEFAULT_SIZE)
      @username = Wx::TextCtrl.new(self, -1, "Username",
Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE)
      @password = Wx::TextCtrl.new(self, -1, "Password",
Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE, Wx::TE_PASSWORD)
      @tree_base = Wx::TextCtrl.new(self, -1, "LDAP Tree Base",
Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE)

      sizer.add(@server, 1, Wx::EXPAND|Wx::ALL, 5)
      sizer.add(@username, 1, Wx::EXPAND|Wx::ALL, 5)
      sizer.add(@password, 1, Wx::EXPAND|Wx::ALL, 5)
      sizer.add(@tree_base, 1, Wx::EXPAND|Wx::ALL, 5)

      button_sizer = create_button_sizer(Wx::OK|Wx::CANCEL)

      sizer.add(button_sizer, 0, Wx::EXPAND|Wx::ALL, 5)

      # Okay Button Event!!!!

      evt_button(self.get_affirmative_id()) { |event| on_okay() }

      set_sizer(sizer)
      show()
    end # initialize

    # Collect computer records from Directory and add to database

    def on_okay()
      ldap = Net::LDAP.new :host => @server.get_value, :port => 389, :auth
=> { :method => :simple, :username => @username.get_value, :password =>
@password.get_value }

      filter = Net::LDAP::Filter.eq("objectcategory",
"CN=Computer,CN=Schema,CN=Configuration,#{@tree_base.get_value}")

      # We don't want to return a result set as it could be pretty huge and
we don't need it.
      #   We are treating the container name as the group name here.

      ldap.search(:base => @tree_base.get_value, :filter => filter,
:return_result => false) do |record|
        computer_name = record.cn.to_s
        begin
          os = record.operatingsystem
        rescue
          os = ''
        end
        lab = record.dn.split(',')[1].split('=')[1]

        # Check db for lab and add it if it isn't already there

        unless Lab.find :name => lab
          lab = Lab.new(:name => lab)
          lab.save
          lab = lab.name
        end

        # Save machine record

        machine = Computer.new(:name => computer_name, :os => os, :location
=> lab)
        machine.save
      end
      log_file = File.open("log.txt", "a"); log_file.puts "\n\nFinished
populate next instruction is close\n\n"; log_file.close
      self.close()
    end # on_okay
end # DBPopulateDialog class

After filling out the proper information and clicking on okay the data is
populated however when it finishes the dialog hangs around.  Furthermore it
won't close when you click on Cancel or the Window close widget (the X in my
case).  The log line executes just fine, the dialog just refuses to close.

-Glen

-- 
"Hey brother Christian with your high and mighty errand, Your actions speak
so loud, I can't hear a word you're saying."

-Greg Graffin (Bad Religion)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/wxruby-users/attachments/20081002/d0080f41/attachment.html>


More information about the wxruby-users mailing list