include Wx
include IconLoader

module Fugit
	class MainFrame < Frame
		attr_accessor :app_verion, :index, :commit, :diff

		def initialize(title, version)
			pwd = setup_working_directory
			super(nil, :title => "#{pwd} - #{title}", :size => [ 800, 600 ])

			self.app_verion = version

			# Set up our AUI manager
			@mgr = AuiManager.new
			@mgr.set_managed_window(self)

			set_min_size(Size.new(400,300))
			setup_panes

			icon_file = File.expand_path(File.join(IconBasePath, "plus_minus.gif"))
			self.icon = Icon.new(icon_file, BITMAP_TYPE_GIF)

			menu_bar = MenuBar.new

			# The "file" menu
			menu_file = Menu.new
			# Using ID_EXIT standard id means the menu item will be given the right label for the platform and language, and placed in the correct platform-specific menu - eg on OS X, in the Application's menu
			menu_file.append(ID_SAVE, "&Save commit\tCtrl-S", "Save commit")
			refresh = menu_file.append(ID_ANY, "&Refresh\tF5", "Refresh the index list")
			menu_file.append(ID_EXIT, "E&xit", "Quit this program")
			menu_bar.append(menu_file, "&File")

			# The "help" menu
			menu_help = Menu.new
			menu_help.append(ID_ABOUT, "&About...\tF1", "Show about dialog")
			menu_bar.append(menu_help, "&Help")

			# Assign the menubar to this frame
			self.menu_bar = menu_bar

			evt_menu(ID_SAVE) {|event| send_message(:save_clicked)}
			evt_menu(refresh) {|event| send_message(:refresh)}
			evt_menu(ID_EXIT) {|event| close} # End the application; it should finish automatically when the last window is closed.
			evt_menu(ID_ABOUT, :on_about)
			evt_close() do |event|
				send_message(:exiting) # Notify listeners that we're closing up shop
				destroy
				exit
			end

			self.accelerator_table = AcceleratorTable.new(AcceleratorEntry.new(MOD_CMD, ?w, ID_EXIT))

			@mgr.update
		end


		#####################
		##      Setup      ##
		#####################

		def setup_working_directory
			orig = Dir.pwd
			last_dir = nil
			while !File.exist?(".git") && last_dir != Dir.pwd
				last_dir = Dir.pwd
				Dir.chdir("..")
			end
			Dir.chdir(orig) unless File.exist?(".git") # We got to the top level without finding a git directory
			File.basename(Dir.pwd)
		end

		def setup_panes
			pi = AuiPaneInfo.new
			size = Size.new(800, 150)
			pi.bottom.set_name('commit').set_caption("Commit").set_layer(1).set_position(1).set_best_size(size).set_min_size(size).set_floating_size(size)
			@commit = Commit.new(self)
			@mgr.add_pane(@commit, pi)

			#~ pi = AuiPaneInfo.new
			#~ size = Size.new(800, 75)
			#~ pi.bottom.set_name('console').set_caption("Console").set_layer(3).set_position(1).set_best_size(size).set_min_size(size).set_floating_size(size).set_maximize_button.set_minimize_button
			#~ @mgr.add_pane(Console.new(self), pi)

			pi = AuiPaneInfo.new
			size = Size.new(200, 350)
			pi.left.set_name('index').set_caption("Index").set_layer(2).set_position(1).set_best_size(size).set_min_size(size).set_floating_size(size)
			@index = IndexList.new(self)
			@mgr.add_pane(@index, pi)

			pi = AuiPaneInfo.new
			size = Size.new(200, 350)
			pi.center_pane.set_name('diff')
			@diff = Diff.new(self)
			@mgr.add_pane(@diff, pi)
		end

		def on_about
			Wx::about_box(:name => self.title, :version => self.app_verion, :description => "WxRuby-based git GUI", :developers => ['tekkub - http://tekkub.github.com'])
		end

	end
end