#!/usr/bin/env ruby

def run_gtk(win)
  win.remove(win.child)
  table = Gtk::Table.new(5, 3, false) #縦、横

# メッセージ
  str="DCASTを実行する準備が整いました。\n下の実行ボタンを押してください。\n構築するノードをすべてディスクレスとして起動させたい場合は、\n下のボックスで「YES」を選択して下さい。\n\nNFSマウントの設定を変更したい場合は、\n下の設定ボタンを押して下さい。\n\n（構築するクラスタの設定ファイルは\"./dcast.conf\"に\n保存されています。もし変更がある場合は、\n変更を行ってから実行ボタンを押してください。）"
  dummy = ""
  label_show(1, 3, 0, 1, table, str, dummy) # 横始、横終、縦始、縦終

# イメージ
  image_show(0, 1, 0, 4, table) # 横始、横終、縦始、縦終

# All Diskless Node?
  label_show(1, 2, 1, 2, table, "All Diskless Node?", Gtk::JUSTIFY_LEFT)
  combo = Gtk::Combo.new()
  combo.set_popdown_strings(["No", "Yes"])
  table.attach(combo, 2, 3, 1, 2, Gtk::EXPAND, Gtk::EXPAND, 0, 0)
  $h.store("alldiskless", combo)

# PREFERENCESボタンの設定
  preference_button = Gtk::Button.new(Gtk::Stock::PREFERENCES)
  table.attach(preference_button, 1, 3, 2, 3, Gtk::FILL, Gtk::FILL, 0, 10)

  preference_button.signal_connect("clicked") do
    fstab_info(win)
  end

# RUNボタンの設定
  button = Gtk::Button.new(Gtk::Stock::EXECUTE)
  table.attach(button, 1, 3, 3, 4, Gtk::FILL, Gtk::FILL, 0, 10)

  button.signal_connect("clicked") do
    puts "Error! No exist " + $filename unless FileTest.exist?($filename)

    if $h.fetch("alldiskless").entry.text == "Yes"
      puts "./dcast --alldiskless"
      $pid = fork{exec("ruby ./dcast --alldiskless")}
    else
      puts "./dcast"
      $pid = fork{exec("ruby ./dcast")}
    end

    th = Thread.new {
      $dia.wait
    }

    $finish = false
    $cancel = false
    (0..2000).each {|i|
      if ($cancel)
        Process.kill("KILL", $pid)
        puts "./dcast-allremove"
        system("ruby ./dcast-allremove")
        break
      end
      IO.popen("ps --no-headers " + $pid.to_s){|io|
        while line = io.gets
          $finish=true if line.split[2] == "Z+"
        end
      }
      break if ($finish)

      sleep(3)
    }

    Gtk.main_quit
    th.join
    $dia.end if ($finish)
    $dia.finish if ($cancel)
  end

##############################
# main
##############################
  $dia = MyDialog.new

# 下のボタン
  frame = Gtk::Frame.new("DCAST")
  hbox = Gtk::HBox.new(false, 0)

  cancel_button = Gtk::Button.new(Gtk::Stock::QUIT)
  prev_button = Gtk::Button.new(Gtk::Stock::GO_BACK)
  next_button = Gtk::Button.new(Gtk::Stock::GO_FORWARD)

  hbox.pack_start(cancel_button, false, false, 10)
  hbox.pack_end(next_button, false, false, 0)
  hbox.pack_end(prev_button, false, false, 25)

  frame.add(hbox)
  table.attach(frame, 0, 3, 4, 5)

  cancel_button.signal_connect("clicked") {
    Gtk::main_quit
  }

  prev_button.signal_connect("clicked") {
    if $flag == "first-select"
      first_select(win)
    else
      mac_info(win)
    end
  }

###
  win.set_title("Run DCAST")
  win.set_default_size(500,300)
  win.add(table)
  win.show_all
end

if __FILE__ == $0
  require "load"
  require "fstab-gtk"

  Gtk.init

  win = Gtk::Window.new
  win.signal_connect("destroy") {
    Gtk::main_quit
  }

  $h = Hash.new

  run_gtk(win)

  Gtk.main
end
