/*
 * InputBox.cs
 * Copyright (c) 2008-2009 kbinani
 *
 * This file is part of Boare.Lib.AppUtil.
 *
 * Boare.Lib.AppUtil is free software; you can redistribute it and/or
 * modify it under the terms of the BSD License.
 *
 * Boare.Lib.AppUtil is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 */
#if JAVA
package org.kbinani.apputil;

import java.awt.*;
import javax.swing.*;
import org.kbinani.*;
import org.kbinani.windows.forms.*;
#else
using System;
using System.Windows.Forms;
using bocoree.windows.forms;

namespace Boare.Lib.AppUtil {
    using BEventArgs = System.EventArgs;
#endif

#if JAVA
    public class InputBox extends BForm{
#else
    public class InputBox : BForm {
#endif
        private BLabel lblMessage;
        private BButton btnCancel;
        private BTextBox txtInput;
        private BButton btnOk;
#if JAVA
        public boolean closed = false;
        private BDialogResult m_result = BDialogResult.CANCEL;
#else
        /// <summary>
        /// 必要なデザイナ変数です。
        /// </summary>
        private System.ComponentModel.IContainer components = null;
#endif

        public InputBox( String message ) {
#if JAVA
            initializeComponent();
#else
            InitializeComponent();
#endif
            lblMessage.setText( message );
        }

#if JAVA
        public class ShowDialogRunner implements Runnable{
            public void run(){
                show();
                while( !closed ){
                    try{
                        Thread.sleep( 100 );
                    }catch( Exception ex ){
                        break;
                    }
                }
                hide();
            }
        }

        public BDialogResult showDialog(){
            Thread t = new Thread( new ShowDialogRunner() );
            t.run();
            return m_result;
        }
#endif

        public String getResult(){
            return txtInput.getText();
        }
        
        public void setResult( String value ){
            txtInput.setText( value );
        }

        public void btnOk_Click( Object sender, BEventArgs e ) {
#if JAVA
            closed = true;
            m_result = BDialogResult.OK;
#else
            DialogResult = DialogResult.OK;
#endif
        }

#if JAVA
        private void initializeComponent(){
            txtInput = new BTextBox();
            btnOk = new BButton();
            lblMessage = new BLabel();
            btnCancel = new BButton();
            // 
            // txtInput
            // 
            // 
            // btnOk
            // 
            this.btnOk.setText( "OK" );
            this.btnOk.clickEvent.add( new BEventHandler( this, "btnOk_Click" ) );
            // 
            // lblMessage
            // 
            // 
            // btnCancel
            // 
            this.btnCancel.setText( "Cancel" );
            this.btnCancel.setVisible( false );
            // 
            // InputBox
            // 
            GridBagLayout gridbag = new GridBagLayout();
            GridBagConstraints c = new GridBagConstraints();
            setLayout( gridbag );
            // 1段目
            JPanel jp1_1 = new JPanel();
            gridbag.setConstraints( jp1_1, c );
            add( jp1_1 );

            c.gridwidth = 2;
            c.fill = GridBagConstraints.HORIZONTAL;
            gridbag.setConstraints( lblMessage, c );
            add( lblMessage );
            
            JPanel jp1_2 = new JPanel();
            c.gridwidth = GridBagConstraints.REMAINDER;
            c.fill = GridBagConstraints.NONE;
            gridbag.setConstraints( jp1_2, c );
            add( jp1_2 );

            // 2段目
            JPanel jp2_1 = new JPanel();
            c.gridwidth = 1;
            gridbag.setConstraints( jp2_1, c );
            add( jp2_1 );
            
            c.gridwidth = 2;
            c.fill = GridBagConstraints.HORIZONTAL;
            c.weightx = 1.0;
            gridbag.setConstraints( txtInput, c );
            add( txtInput );
            
            JPanel jp2_2 = new JPanel();
            c.gridwidth = GridBagConstraints.REMAINDER;
            c.fill = GridBagConstraints.NONE;
            c.weightx = 0.0;
            gridbag.setConstraints( jp2_2, c );
            add( jp2_2 );

            // 3段目
            JPanel jp3 = new JPanel();
            c.gridwidth = GridBagConstraints.REMAINDER;
            gridbag.setConstraints( jp3, c );
            add( jp3 );

            // 4段目
            JPanel jp4_1 = new JPanel();
            c.gridwidth = 2;
            gridbag.setConstraints( jp4_1, c );
            add( jp4_1 );
            
            c.gridwidth = 1;
            c.anchor = GridBagConstraints.EAST;
            gridbag.setConstraints( btnOk, c );
            add( btnOk );
            
            JPanel jp4_2 = new JPanel();
            c.gridwidth = GridBagConstraints.REMAINDER;
            c.anchor = GridBagConstraints.CENTER;
            gridbag.setConstraints( jp4_2, c );
            add( jp4_2 );

            // 5段目
            JPanel jp5 = new JPanel();
            c.gridwidth = GridBagConstraints.REMAINDER;
            c.gridheight = GridBagConstraints.REMAINDER;
            c.fill = GridBagConstraints.BOTH;
            gridbag.setConstraints( jp5, c );
            add( jp5 );

            this.formClosedEvent.add( new BEventHandler( this, "InputBox_FormClosed" ) );
            this.setTitle( "InputBox" );
            this.setSize( 339, 110 );
        }

        public void InputBox_FormClosed( Object sender, BEventArgs e ){
            closed = true;
        }
#else
        /// <summary>
        /// 使用中のリソースをすべてクリーンアップします。
        /// </summary>
        /// <param name="disposing">マネージ リソースが破棄される場合 true、破棄されない場合は false です。</param>
        protected override void Dispose( bool disposing ) {
            if ( disposing && (components != null) ) {
                components.Dispose();
            }
            base.Dispose( disposing );
        }

        #region Windows フォーム デザイナで生成されたコード

        /// <summary>
        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を
        /// コード エディタで変更しないでください。
        /// </summary>
        private void InitializeComponent() {
            this.txtInput = new BTextBox();
            this.btnOk = new BButton();
            this.lblMessage = new BLabel();
            this.btnCancel = new BButton();
            this.SuspendLayout();
            // 
            // txtInput
            // 
            this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.txtInput.Location = new System.Drawing.Point( 12, 24 );
            this.txtInput.Name = "txtInput";
            this.txtInput.Size = new System.Drawing.Size( 309, 19 );
            this.txtInput.TabIndex = 0;
            // 
            // btnOk
            // 
            this.btnOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
            this.btnOk.Location = new System.Drawing.Point( 246, 49 );
            this.btnOk.Name = "btnOk";
            this.btnOk.Size = new System.Drawing.Size( 75, 23 );
            this.btnOk.TabIndex = 1;
            this.btnOk.Text = "OK";
            this.btnOk.UseVisualStyleBackColor = true;
            this.btnOk.Click += new System.EventHandler( this.btnOk_Click );
            // 
            // lblMessage
            // 
            this.lblMessage.AutoSize = true;
            this.lblMessage.Location = new System.Drawing.Point( 12, 9 );
            this.lblMessage.Name = "lblMessage";
            this.lblMessage.Size = new System.Drawing.Size( 0, 12 );
            this.lblMessage.TabIndex = 2;
            // 
            // btnCancel
            // 
            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            this.btnCancel.Location = new System.Drawing.Point( -100, 49 );
            this.btnCancel.Name = "btnCancel";
            this.btnCancel.Size = new System.Drawing.Size( 75, 23 );
            this.btnCancel.TabIndex = 3;
            this.btnCancel.Text = "Cancel";
            this.btnCancel.UseVisualStyleBackColor = true;
            // 
            // InputBox
            // 
            this.AcceptButton = this.btnOk;
            this.AutoScaleDimensions = new System.Drawing.SizeF( 6F, 12F );
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.CancelButton = this.btnCancel;
            this.ClientSize = new System.Drawing.Size( 333, 82 );
            this.Controls.Add( this.btnCancel );
            this.Controls.Add( this.lblMessage );
            this.Controls.Add( this.btnOk );
            this.Controls.Add( this.txtInput );
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "InputBox";
            this.ShowIcon = false;
            this.ShowInTaskbar = false;
            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
            this.Text = "InputBox";
            this.ResumeLayout( false );
            this.PerformLayout();

        }
        #endregion
#endif
    }

#if !JAVA
}
#endif
