/*
 * 作成日: 2005/09/25
 */
package asandatabasebrowser.view;

import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JTextPane;

import asandatabasebrowser.AsanDatabaseBrowser;
import asandatabasebrowser.model.VvDatabase;

import net.sourceforge.swingx.SxOptionPane;


/**
 * タブ付きテキストエリア. 
 * タブの数が０でも許される。
 */
public class JTabbedTextArea extends JTabbedPane {
	int count = 0;
    VvDatabase db;
	KeyListener keyListener;
    
	JTabbedTextArea(VvDatabase db, KeyListener keyListener) {
		super(JTabbedPane.TOP, JTabbedPane.SCROLL_TAB_LAYOUT);
		this.db = db;
		this.keyListener = keyListener;
		this.addMouseListener(new TabMouseListener());
	}

	public String getCurrentText() {
		if (this.getTabCount() == 0) return null;
		JScrollPane scroll = (JScrollPane) this.getSelectedComponent();  
		JTextPane textarea = (JTextPane) scroll.getViewport().getView();  
		return textarea.getText();
	}
	String getSelectedText() {
		JScrollPane scroll = (JScrollPane) this.getSelectedComponent();  
		JTextPane textarea = (JTextPane) scroll.getViewport().getView();  
		return textarea.getSelectedText();
	}
	public String getText(int index) {
		JScrollPane scroll = (JScrollPane)this.getComponentAt(index);
		JTextPane area = (JTextPane) scroll.getViewport().getView();
		return area.getText();
	}
	public void addTextArea(String sql) {
		SqlEditor editor = new SqlEditor(sql, db.getBlancoSqlRule(), AsanDatabaseBrowser.theApp.doc.getFont());
		// TODO:強調表示が可能になってから、Shift+Enterが効かなくなっている。また、セミコロンがあっても実行可能にした。
		if (System.getProperty("debug") != null) {
			editor.setToolTipText("<html>Shift+EnterでSQLを実行します。<br>末尾にセミコロンは不要です。</html>");
		}
		editor.addKeyListener(keyListener);
		
		this.addTab("SQL"+count, new JScrollPane(editor));
		this.setSelectedIndex(getTabCount()-1);
		count++;
	}

	public void removeTextArea() {
		if (getTabCount() <= 1) return;
		removeTabAt(getSelectedIndex());  
	}

    /** ダブルクリックするとタブ名の編集を行う。 */
    class TabMouseListener extends MouseAdapter {
    	public void mouseClicked(MouseEvent e) {
    		System.out.println(e);
    		// 左ボタンをダブルクリックしたとき
    		if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
        		// どのタブを選択されたか？
    			int index = indexAtLocation(e.getX(), e.getY());
    			if (index == -1) return;
    			// タブの名前を編集
    			JTextField field = new JTextField(getTitleAt(index), 10);
    			int rc = SxOptionPane.showMessageDialog(
    					JTabbedTextArea.this,
    					field, "タブ名の編集",
    					SxOptionPane.OK_CANCEL_OPTION,
    					SxOptionPane.PLAIN_MESSAGE, null);
    			// OKボタン以外なら何もしない。
    			if (rc != SxOptionPane.OK) return;
    			// 編集された文字が空文字ならエラー
    			String text = field.getText();
				if (text.length() == 0) {
					SxOptionPane.showMessageDialog(
	    					JTabbedTextArea.this,
	    					"1文字以上の文字列を入力してください。",
	    					"タブ名の編集",
	    					SxOptionPane.OK_ONLY_OPTION,
	    					SxOptionPane.ERROR_MESSAGE, null);
					return;
				}
    			// 指定されたタブのタイトルを変更
				setTitleAt(index, text);
    		}
    	}
    }
}
