import jp.sfjp.jindolf.view.TopicFilter;
/**
- * 発言表示画面。
+ * 会話表示画面。
*
- * <p>表示に影響する要因は、Periodの中身、LayoutManagerによるサイズ変更、
- * フォント属性の指定、フィルタリング操作、ドラッギングによる文字列選択操作、
- * 文字列検索および検索ナビゲーション。
+ * <p>担当責務は
+ * <ul>
+ * <li>会話表示</li>
+ * <li>フィルタによる表示絞り込み</li>
+ * <li>検索結果ハイライト</li>
+ * <li>テキストのドラッグ選択</li>
+ * <li>アンカー選択処理</li>
+ * <li>テキストのCopyAndPaste</li>
+ * <li>ポップアップメニュー</li>
+ * </ul>
+ * など
*/
@SuppressWarnings("serial")
public class Discussion extends JComponent
private static final int MARGINTOP = 50;
private static final int MARGINBOTTOM = 100;
+
private Period period;
private final List<TextRow> rowList = new LinkedList<>();
private final List<TalkDraw> talkDrawList = new LinkedList<>();
private final Action copySelectedAction =
new ProxyAction(ActionManager.CMD_COPY);
+
/**
- * 発言表示画面を作成する。
+ * コンストラクタ。
+ *
+ * <p>会話表示画面を作成する。
*/
@SuppressWarnings("LeakingThisInConstructor")
public Discussion(){
/**
* 描画設定の更新。
- * FontRenderContextが更新された後は必ず呼び出す必要がある。
+ *
+ * <p>FontRenderContextが更新された後は必ず呼び出す必要がある。
*/
private void updateRenderingHints(){
Object textAliaseValue;
/**
* フォント描画設定を変更する。
+ *
* @param newFontInfo フォント設定
*/
public void setFontInfo(FontInfo newFontInfo){
}
/**
- * 発言表示設定を変更する。
- * @param newPref 発言表示設定
+ * 会話表示設定を変更する。
+ *
+ * @param newPref 会話表示設定
*/
public void setDialogPref(DialogPref newPref){
this.dialogPref = newPref;
/**
* 現在のPeriodを返す。
+ *
* @return 現在のPeriod
*/
public Period getPeriod(){
/**
* Periodを更新する。
- * 新しいPeriodの表示内容はまだ反映されない。
+ *
+ * <p>新しいPeriodの表示内容はまだ反映されない。
+ *
* @param period 新しいPeriod
*/
public final void setPeriod(Period period){
}
/**
- * 発言フィルタを設定する。
- * @param filter 発言フィルタ
+ * 会話フィルタを設定する。
+ *
+ * @param filter 会話フィルタ
*/
public void setTopicFilter(TopicFilter filter){
this.topicFilter = filter;
}
/**
- * 発言フィルタを適用する。
+ * 会話フィルタを適用する。
*/
public void filtering(){
if( this.topicFilter != null
/**
* 検索パターンを取得する。
+ *
* @return 検索パターン
*/
public RegexPattern getRegexPattern(){
/**
* 与えられた正規表現にマッチする文字列をハイライト描画する。
+ *
* @param newPattern 検索パターン
* @return ヒット件数
*/
/**
* 指定した領域に若干の上下マージンを付けて
* スクロールウィンドウに表示させる。
+ *
* @param rectangle 指定領域
*/
private void scrollRectWithMargin(Rectangle rectangle){
/**
* 指定した矩形がフィルタリング対象か判定する。
+ *
* @param row 矩形
* @return フィルタリング対象ならtrue
*/
/**
* 幅を設定する。
- * 全子TextRowがリサイズされる。
+ *
+ * <p>全子TextRowがリサイズされる。
+ *
* @param width コンポーネント幅
*/
private void setWidth(int width){
/**
* 子TextRowの縦位置レイアウトを行う。
- * フィルタリングが反映される。
- * TextRowは必要に応じて移動させられるがリサイズされることはない。
+ *
+ * <p>フィルタリングが反映される。
+ *
+ * <p>TextRowは必要に応じて移動させられるがリサイズされることはない。
*/
private void layoutVertical(){
Rectangle unionRect = null;
/**
* {@inheritDoc}
+ *
+ * <p>描画処理
+ *
* @param g {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @return {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param visibleRect {@inheritDoc}
* @param orientation {@inheritDoc}
* @param direction {@inheritDoc}
/**
* {@inheritDoc}
+ *
* @param visibleRect {@inheritDoc}
* @param orientation {@inheritDoc}
* @param direction {@inheritDoc}
}
/**
- * 任意の発言の表示が占める画面領域を返す。
- * 発言がフィルタリング対象の時はnullを返す。
- * @param talk 発言
+ * 任意の会話の表示が占める画面領域を返す。
+ *
+ * <p>会話がフィルタリング対象の時はnullを返す。
+ *
+ * @param talk 会話
* @return 領域
*/
public Rectangle getTalkBounds(Talk talk){
/**
* ドラッグ処理を行う。
+ *
* @param from ドラッグ開始位置
* @param to 現在のドラッグ位置
*/
}
/**
- * 与えられた点座標を包含する発言を返す。
+ * 与えられた点座標を包含する会話を返す。
+ *
* @param pt 点座標(JComponent基準)
- * @return 点座標を含む発言。含む発言がなければnullを返す。
+ * @return 点座標を含む会話。含む会話がなければnullを返す。
*/
// TODO 二分探索とかしたい。
private TalkDraw getHittedTalkDraw(Point pt){
/**
* アンカークリック動作の処理。
+ *
* @param pt クリックポイント
*/
private void hitAnchor(Point pt){
/**
* 検索マッチ文字列クリック動作の処理。
+ *
* @param pt クリックポイント
*/
private void hitRegex(Point pt){
/**
* {@inheritDoc}
- * アンカーヒット処理を行う。
- * MouseInputListenerを参照せよ。
+ *
+ * <p>アンカーヒット処理を行う。
+ *
+ * <p>MouseInputListenerを参照せよ。
+ *
* @param event {@inheritDoc}
*/
// TODO 距離判定がシビアすぎ
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
- * ドラッグ開始処理を行う。
+ *
+ * <p>ドラッグ開始処理を行う。
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
- * ドラッグ終了処理を行う。
+ *
+ * <p>ドラッグ終了処理を行う。
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
- * ドラッグ処理を行う。
+ *
+ * <p>ドラッグ処理を行う。
+ *
* @param event {@inheritDoc}
*/
// TODO ドラッグ範囲がビューポートを超えたら自動的にスクロールしてほしい。
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* 選択文字列を返す。
+ *
* @return 選択文字列
*/
public CharSequence getSelected(){
/**
* 選択文字列をクリップボードにコピーする。
+ *
* @return 選択文字列
*/
public CharSequence copySelected(){
}
/**
- * 矩形の示す一発言をクリップボードにコピーする。
+ * 一会話全体の文字列内容をクリップボードにコピーする。
+ *
* @return コピーした文字列
*/
public CharSequence copyTalk(){
}
/**
- * ポップアップメニュートリガ座標に発言があればそれを返す。
- * @return 発言
+ * ポップアップメニュートリガ座標に会話があればそれを返す。
+ *
+ * @return 会話
*/
public Talk getPopupedTalk(){
TalkDraw talkDraw = this.popup.lastPopupedTalkDraw;
/**
* ポップアップメニュートリガ座標にアンカーがあればそれを返す。
+ *
* @return アンカー
*/
public Anchor getPopupedAnchor(){
/**
* COPY処理を行うキーの設定をJTextFieldから流用する。
- * おそらくはCtrl-C。MacならCommand-Cかも。
+ *
+ * <p>おそらくはCtrl-C。MacならCommand-Cかも。
*/
private void updateInputMap(){
InputMap thisInputMap = getInputMap();
/**
* ActionListenerを追加する。
+ *
* @param listener リスナー
*/
public void addActionListener(ActionListener listener){
/**
* ActionListenerを削除する。
+ *
* @param listener リスナー
*/
public void removeActionListener(ActionListener listener){
/**
* ActionListenerを列挙する。
+ *
* @return すべてのActionListener
*/
public ActionListener[] getActionListeners(){
/**
* AnchorHitListenerを追加する。
+ *
* @param listener リスナー
*/
public void addAnchorHitListener(AnchorHitListener listener){
/**
* AnchorHitListenerを削除する。
+ *
* @param listener リスナー
*/
public void removeAnchorHitListener(AnchorHitListener listener){
/**
* AnchorHitListenerを列挙する。
+ *
* @return すべてのAnchorHitListener
*/
public AnchorHitListener[] getAnchorHitListeners(){
/**
* {@inheritDoc}
+ *
* @param <T> {@inheritDoc}
* @param listenerType {@inheritDoc}
* @return {@inheritDoc}
/**
* コンストラクタ。
+ *
* @param command コマンド
* @throws NullPointerException 引数がnull
*/
/**
* {@inheritDoc}
+ *
* @param event {@inheritDoc}
*/
@Override
/**
* {@inheritDoc}
+ *
* @param comp {@inheritDoc}
* @param x {@inheritDoc}
* @param y {@inheritDoc}
}
}
- // TODO シンプルモードの追加
- // Period変更を追跡するリスナ化
}
import jp.sourceforge.jindolf.corelib.TalkType;
/**
- * 発言ブラウザを内包するPeriodビューワ。
+ * 各Periodのビュー。
+ *
+ * <P>Periodの内容が反映される。
+ *
+ * <p>キャプション(村名、Period名)、
+ * リミット(更新時刻)、
+ * プルダウンリストによる会話セレクタ
+ * の管理制御を担当する。
+ *
+ * <p>会話表示{@link Discussion}のスクロール制御
+ * を担当する。
*/
@SuppressWarnings("serial")
public class PeriodView extends JPanel implements ItemListener{
private static final Color COLOR_NORMALBG = Color.BLACK;
private static final Color COLOR_SIMPLEBG = Color.WHITE;
+
private Period period;
private final Discussion discussion;
private DialogPref dialogPref = new DialogPref();
+
/**
- * 発言ブラウザを内包するPeriodビューワを生成する。
+ * コンストラクタ。
+ *
* @param period 日
*/
@SuppressWarnings("LeakingThisInConstructor")
/**
* Periodを更新する。
- * 古いPeriodの表示内容は消える。
+ *
+ * <p>古いPeriodの表示内容は消える。
* 新しいPeriodの表示内容はまだ反映されない。
+ *
* @param period 新しいPeriod
*/
public void setPeriod(Period period){
/**
* 現在のPeriodを返す。
+ *
* @return 現在のPeriod
*/
public Period getPeriod(){
}
/**
- * 上部のGUI(村名、発言一覧)を、Periodの状態に合わせて更新する。
+ * 上部の村名、会話プルダウンリストを、Periodの状態に合わせて更新する。
*/
private void updateTopPanel(){
if(this.period == null){
/**
* フォント描画設定を変更する。
+ *
* @param fontInfo フォント設定
*/
// TODO スクロール位置の復元
}
/**
- * 発言表示設定を更新する。
+ * 会話表示設定を変更する。
+ *
* @param pref 表示設定
*/
public void setDialogPref(DialogPref pref){
}
/**
- * ビューポート内の発言ブラウザを返す。
- * @return 内部ブラウザ
+ * ビューポート内の会話表示{@link Discussion}を返す。
+ *
+ * @return 会話表示
*/
public Discussion getDiscussion(){
return this.discussion;
}
/**
- * スクロール位置を返す。
+ * 縦スクロール位置を返す。
+ *
* @return スクロール位置
*/
public int getVerticalPosition(){
}
/**
- * スクロール位置を設定する。
+ * 縦スクロール位置を設定する。
+ *
* @param pos スクロール位置
*/
public void setVerticalPosition(int pos){
/**
* {@inheritDoc}
- * コンボボックス操作のリスナ。
+ *
+ * <p>コンボボックス操作(会話プルダウンリスト)のリスナ。
+ *
* @param event コンボボックス操作イベント {@inheritDoc}
*/
@Override
}
/**
- * 任意の発言が表示されるようスクロールする。
+ * 任意の会話が表示域に収まるようスクロールを試みる。
+ *
* @param talk 発言
*/
public void scrollToTalk(Talk talk){
/**
* {@inheritDoc}
- * Talkのアンカー表記と発言者名を描画する。
+ *
+ * <p>Talkのアンカー表記と発言者名を描画する。
+ *
* @param list {@inheritDoc}
* @param value {@inheritDoc}
* @param index {@inheritDoc}
import jp.sfjp.jindolf.glyph.FontInfo;
/**
- * タブを用いて村情報と各Periodを閲覧するためのコンポーネント。
+ * タブを用いて村情報と各Periodを切り替え表示するためのコンポーネント。
*/
@SuppressWarnings("serial")
public class TabBrowser extends JTabbedPane{
private final EventListenerList thisListenerList =
new EventListenerList();
+
/**
- * 村が指定されていない状態のタブパネルを生成する。
+ * コンストラクタ。
+ *
+ * <p>村が指定されていない状態のタブパネルを生成する。
*/
public TabBrowser(){
super();
/**
* 設定された村を返す。
+ *
* @return 設定された村
*/
public Village getVillage(){
/**
* 新規に村を設定する。
+ *
* @param village 新しい村
*/
public final void setVillage(Village village){
/**
* 指定した数のPeriodが収まるよう必要十分なタブ数を用意する。
+ *
* @param periods Periodの数
*/
private void modifyTabCount(int periods){ // TODO 0でも大丈夫?
/**
* Period日付指定からタブインデックス値への変換。
+ *
* @param days Period日付指定
* @return タブインデックス
*/
/**
* タブインデックス値からPeriod日付指定への変換。
+ *
* @param tabIndex タブインデックス
* @return Period日付指定
*/
/**
* PeriodView一覧を得る。
+ *
* @return PeriodView の List
*/
public List<PeriodView> getPeriodViewList(){
/**
* 現在タブ選択中のDiscussionを返す。
- * Periodに関係ないタブが選択されていたらnullを返す。
+ *
+ * <p>Periodに関係ないタブが選択されていたらnullを返す。
+ *
* @return 現在選択中のDiscussion
*/
public Discussion currentDiscussion(){
/**
* 現在タブ選択中のPeriodViewを返す。
- * Periodに関係ないタブが選択されていたらnullを返す。
+ *
+ * <p>Periodに関係ないタブが選択されていたらnullを返す。
+ *
* @return 現在選択中のPeriodView
*/
public PeriodView currentPeriodView(){
/**
* 指定したタブインデックスに関連付けられたPeriodViewを返す。
- * Periodに関係ないタブが指定されたらnullを返す。
+ *
+ * <p>Periodに関係ないタブが指定されたらnullを返す。
+ *
* @param tabIndex タブインデックス
* @return 指定されたPeriodView
*/
/**
* 指定したタブインデックスに関連付けられたDiscussionを返す。
- * Periodに関係ないタブが指定されたらnullを返す。
+ *
+ * <p>Periodに関係ないタブが指定されたらnullを返す。
+ *
* @param tabIndex タブインデックス
* @return 指定されたDiscussion
*/
/**
* フォント描画設定を変更する。
+ *
* @param fontInfo フォント
*/
public void setFontInfo(FontInfo fontInfo){
/**
* 発言表示設定を変更する。
+ *
* @param dialogPref 発言表示設定
*/
public void setDialogPref(DialogPref dialogPref){
/**
* ActionListenerを追加する。
+ *
* @param listener リスナー
*/
public void addActionListener(ActionListener listener){
/**
* ActionListenerを削除する。
+ *
* @param listener リスナー
*/
public void removeActionListener(ActionListener listener){
/**
* ActionListenerを列挙する。
+ *
* @return すべてのActionListener
*/
public ActionListener[] getActionListeners(){
/**
* AnchorHitListenerを追加する。
+ *
* @param listener リスナー
*/
public void addAnchorHitListener(AnchorHitListener listener){
/**
* AnchorHitListenerを削除する。
+ *
* @param listener リスナー
*/
public void removeAnchorHitListener(AnchorHitListener listener){
/**
* AnchorHitListenerを列挙する。
+ *
* @return すべてのAnchorHitListener
*/
public AnchorHitListener[] getAnchorHitListeners(){
/**
* {@inheritDoc}
+ *
* @param <T> {@inheritDoc}
* @param listenerType {@inheritDoc}
* @return {@inheritDoc}