}\r
return lcmap;\r
}\r
- \r
+\r
+ private int MIN_COLUMN_WIDTH = 20;\r
+\r
/**\r
* テーブルのカラムの設定(名前と幅の初期値)。できれば@{link {@link ListedItem}と一体化させたかったのだが無理っぽい\r
* @see ListedItem\r
*/\r
public static enum ListedColumn {\r
- RSVMARK ("予約", 35),\r
- DUPMARK ("重複", 35),\r
- CHNAME ("チャンネル名", 100),\r
- OPTIONS ("オプション", 100),\r
- TITLE ("番組タイトル", 300),\r
- DETAIL ("番組詳細", 200),\r
- START ("開始時刻", 150),\r
- END ("終了", 50),\r
- LENGTH ("長さ", 50),\r
- GENRE ("ジャンル", 85),\r
- SITEM ("検索アイテム名", 100),\r
- STAR ("お気に入り度", 100),\r
- SCORE ("スコア", 35),\r
- THRESHOLD ("閾値", 35),\r
+ RSVMARK ("予約", 35, false),\r
+ PICKMARK ("ピック", 35, false),\r
+ DUPMARK ("重複", 35, false),\r
+ CHNAME ("チャンネル名", 100, true),\r
+ OPTIONS ("オプション", 100, true),\r
+ TITLE ("番組タイトル", 300, true),\r
+ DETAIL ("番組詳細", 200, true),\r
+ START ("開始時刻", 150, true),\r
+ END ("終了", 50, true),\r
+ LENGTH ("長さ", 50, true),\r
+ GENRE ("ジャンル", 85, true),\r
+ SITEM ("検索アイテム名", 100, true),\r
+ STAR ("お気に入り度", 100, true),\r
+ SCORE ("スコア", 35, false),\r
+ THRESHOLD ("閾値", 35, false),\r
;\r
\r
private String name;\r
private int iniWidth;\r
+ private boolean resizable;\r
\r
- private ListedColumn(String name, int iniWidth) {\r
+ private ListedColumn(String name, int iniWidth, boolean resizable) {\r
this.name = name;\r
this.iniWidth = iniWidth;\r
+ this.resizable = resizable;\r
}\r
\r
public String getName() {\r
public int getIniWidth() {\r
return iniWidth;\r
}\r
- \r
+\r
+ public boolean isResizable() {\r
+ return resizable;\r
+ }\r
+\r
+\r
public int getColumn() {\r
return ordinal();\r
}\r
* 検索範囲(番組追跡か、キーワード検索か、予約待機か)\r
*/\r
private static enum SearchBy { TRACE, KEYWORD, BOTH } ;\r
- \r
- public static final String RSVMARK_NOEXEC = "×"; // 予約無効\r
- public static final String RSVMARK_NORMAL = "●"; // ぴったり\r
- public static final String RSVMARK_OVERRUN = "◎"; // のりしろより大きく予約時間がとられている\r
- public static final String RSVMARK_UNDERRUN = "○"; // 時間延長が考慮されていない\r
- public static final String RSVMARK_DELAYED = "◇"; // 開始時刻が一致しない\r
- public static final String RSVMARK_CLIPPED = "▲"; // 1分短縮済み\r
- public static final String RSVMARK_CLIPPED_E = "△"; // 1分短縮済み(延長警告あり)\r
- public static final String RSVMARK_SHORTAGE = "▼"; // 2分以上短かい\r
- public static final String RSVMARK_SHORTAGE_E = "▽"; // 2分以上短かい(延長警告あり)\r
- \r
- public static final String RSVMARK_PICKUP = "★"; // ピックアップ\r
- public static final String RSVMARK_URABAN = "■"; // 裏番組\r
+\r
+ public static enum RsvMark {\r
+ NOEXEC ( "×", "予約無効"),\r
+ NORMAL ( "●", "ぴったり"),\r
+ OVERRUN ( "◎", "のりしろより大きく予約時間がとられている"),\r
+ UNDERRUN ( "○", "時間延長が考慮されていない"),\r
+ DELAYED ( "◇", "開始時刻が一致しない"),\r
+ CLIPPED ( "▲", "1分短縮済み"),\r
+ CLIPPED_E ( "△", "1分短縮済み(延長警告あり)"),\r
+ SHORTAGE ( "▼", "2分以上短かい"),\r
+ SHORTAGE_E ( "▽", "2分以上短かい(延長警告あり)"),\r
+\r
+ PICKUP ( "★", "ピックアップ"),\r
+ URABAN ( "裏", "裏番組"),\r
+\r
+ DUP_NORMAL ( "■", "時間が重なっている"),\r
+ DUP_REP ( "□", "開始時間と終了時間が同じ"),\r
+ ;\r
+\r
+ private String mark;\r
+ private String desc;\r
+\r
+ private RsvMark(String mark, String desc) {\r
+ this.mark = mark;\r
+ this.desc = desc;\r
+ }\r
+ }\r
+\r
+ private class Marker {\r
+ RsvMark rsvmark = null;\r
+ RsvMark uramark = null;\r
+ RsvMark pickmark = null;\r
+ String myself = null;\r
+ String color = null;\r
+\r
+ public Marker(String myself, String color) {\r
+ this.myself = myself;\r
+ this.color = color;\r
+ }\r
+ }\r
+\r
private static final String PICKUP_COLOR = CommonUtils.color2str(Color.BLACK);\r
private static final String URABAN_COLOR = CommonUtils.color2str(Color.BLACK);\r
-\r
- private static final String DUPMARK_NORMAL = "■";\r
- private static final String DUPMARK_REP = "□";\r
private static final String DUPMARK_COLOR = "#FFB6C1";\r
\r
private static final String TreeExpRegFile_Listed = "env"+File.separator+"tree_expand_listed.xml";\r
/**\r
* プレビュー表示とか(親から呼ばれるよ!)\r
* @see #redrawListByKeywordDyn(SearchKey, String)\r
- * @see #redrawListByPassed(SearchKey, String)\r
* @see #redrawListByKeywordFilter(SearchKey, String)\r
*/\r
public void redrawListByPreview(SearchKey sKey) {\r
\r
sa.tvd = tvd;\r
\r
- sa.rsvmark = "";\r
- sa.dupmark = "";\r
+ sa.marker = null;\r
+ sa.dupmark = null;\r
sa.prefix = prefixMark;\r
sa.title = tvd.newlast_mark+"\0"+tStr[0]+"\0"+tStr[1]+"\0"+tStr[2]+tvd.postfix_mark;\r
sa.searchlabel = label;\r
\r
sa.tvd = tvd;\r
\r
- sa.rsvmark = "";\r
- sa.dupmark = "";\r
+ sa.marker = null;\r
+ sa.dupmark = null;\r
sa.prefix = prefixMark;\r
sa.title = tvd.newlast_mark+"\0"+tStr[0]+"\0"+tStr[1]+"\0"+tStr[2]+tvd.postfix_mark;\r
sa.searchlabel = tvd.dynKey.getLabel();\r
\r
sa.tvd = tvd;\r
\r
- sa.rsvmark = "";\r
- sa.dupmark = "";\r
+ sa.marker = null;\r
+ sa.dupmark = null;\r
sa.prefix = tvd.extension_mark+tvd.prefix_mark;\r
sa.title = tvd.newlast_mark+"\0"+tStr[0]+"\0"+tStr[1]+"\0"+tStr[2]+tvd.postfix_mark;\r
sa.searchlabel = label;\r
\r
sa.tvd = tvd;\r
\r
- sa.rsvmark = "";\r
- sa.dupmark = "";\r
+ sa.marker = null;\r
+ sa.dupmark = null;\r
sa.prefix = tvd.extension_mark+tvd.prefix_mark;\r
sa.title = tvd.newlast_mark+"\0"+tvd.title+tvd.postfix_mark;\r
sa.searchlabel = "ピックアップ";\r
Marker rm = getReservedMarkChar(data);\r
\r
if (rm != null) {\r
- data.rsvmark = rm.mark;\r
+ data.marker = rm;\r
data.hide_rsvmarkcolor = rm.color;\r
data.fireChanged();\r
}\r
else {\r
- data.rsvmark = "";\r
+ data.marker = null;\r
data.hide_rsvmarkcolor = "";\r
data.fireChanged();\r
}\r
// リセット\r
for (int vrow=0; vrow<rowData.size(); vrow++) {\r
ListedItem rf = rowData.get(vrow); \r
- rf.dupmark = "";\r
+ rf.dupmark = null;\r
rf.fireChanged();\r
}\r
\r
}\r
\r
if ( eDT.equals(sDT2) ) {\r
- if ( ra.dupmark.length() == 0 ) {\r
- ra.dupmark = DUPMARK_REP;\r
+ if ( ra.dupmark == null ) {\r
+ ra.dupmark = RsvMark.DUP_REP;\r
ra.fireChanged();\r
}\r
- if ( rb.dupmark.length() == 0 ) {\r
- rb.dupmark = DUPMARK_REP;\r
+ if ( rb.dupmark== null ) {\r
+ rb.dupmark = RsvMark.DUP_REP;\r
rb.fireChanged();\r
}\r
}\r
else if ( CommonUtils.isOverlap(sDT, eDT, sDT2, eDT2, false) ) {\r
- ra.dupmark = rb.dupmark = DUPMARK_NORMAL;\r
+ ra.dupmark = rb.dupmark = RsvMark.DUP_NORMAL;\r
ra.fireChanged();\r
rb.fireChanged();\r
}\r
/**\r
* 現在時刻追従スクロールを開始する\r
* @see #stopTimer\r
- * @see #pauseTimer\r
*/\r
private void startTimer() {\r
timer_now_enabled = true;\r
// 開始日時が過去のものは対象外\r
continue;\r
}\r
- if ( c.rsvmark.length() == 0 || c.rsvmark.equals(RSVMARK_URABAN) ) {\r
+ if ( c.marker == null || c.marker.rsvmark == null || c.marker.rsvmark == RsvMark.URABAN ) {\r
int vrow = jTable_listed.convertRowIndexToView(row);\r
jTable_listed.getSelectionModel().addSelectionInterval(vrow, vrow);\r
if (cnt++ >= env.getRsvTargets()) {\r
*/\r
public void copyColumnWidth() {\r
//DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable_listed.getColumnModel();\r
- TableColumn column = null;\r
for ( ListedColumn lc : ListedColumn.values() ) {\r
- if ( lc.getIniWidth() < 0 ) {\r
- continue;\r
- }\r
- try {\r
- column = jTable_listed.getColumn(lc.getName());\r
- bounds.getListedColumnSize().put(lc.toString(), column.getPreferredWidth()); // toString()!\r
- }\r
- catch (IllegalArgumentException e) {\r
- // 非表示のカラムは操作できない\r
- }\r
+ TableColumn column = jTable_listed.getColumn(lc.getName());\r
+ int w = column.getWidth();\r
+ bounds.getListedColumnSize().put(lc.toString(), w > 0 ? w : lc.getIniWidth()); // toString()!\r
}\r
}\r
\r
jTable_listed.setCurrentColor(c);\r
}\r
\r
- // 番組詳細の表示・非表示\r
+ // オプション表示の分離\r
public void setMarkColumnVisible(boolean b) {\r
- jTable_listed.setColumnVisible(ListedColumn.OPTIONS.getName(), b);\r
+ _setColumnVisible(ListedColumn.OPTIONS, b);\r
}\r
\r
// 番組詳細の表示・非表示\r
public void setDetailColumnVisible(boolean b) {\r
- jTable_listed.setColumnVisible(ListedColumn.DETAIL.getName(), b);\r
+ _setColumnVisible(ListedColumn.DETAIL, b);\r
+ }\r
+\r
+ // ピックアップの表示・非表示\r
+ public void setPickupColumnVisible(boolean b) {\r
+ _setColumnVisible(ListedColumn.PICKMARK, b);\r
+ }\r
+\r
+ // 時間重複の表示・非表示\r
+ public void setDupColumnVisible(boolean b) {\r
+ _setColumnVisible(ListedColumn.DUPMARK, b);\r
+ }\r
+\r
+ private void _setColumnVisible(ListedColumn lc, boolean b) {\r
+ if ( lc.getIniWidth() < 0 ) {\r
+ return;\r
+ }\r
+ TableColumn column = jTable_listed.getColumnModel().getColumn(lc.getColumn());\r
+ if (b) {\r
+ column.setMinWidth(MIN_COLUMN_WIDTH);\r
+ column.setPreferredWidth(lc.getIniWidth());\r
+ }\r
+ else {\r
+ column.setMinWidth(0);\r
+ column.setPreferredWidth(0);\r
+ }\r
}\r
\r
/*\r
* 予約マークの取得だお!\r
*/\r
\r
- private class Marker {\r
- String mark; \r
- String myself;\r
- String color;\r
- \r
- public Marker(String mark, String myself, String color) {\r
- this.mark = mark;\r
- this.myself = myself;\r
- this.color = color;\r
- }\r
- }\r
- \r
/**\r
* 引数で指定した番組を予約している、または予約に一部時間が重なっている場合に表示する予約マークを取得する。\r
- * @param Center チェックする番組の放送局名\r
- * @param startDateTime チェックする番組の開始日時\r
- * @param endDateTime チェックする番組の終了日時\r
- * @param title チェックする番組のタイトル\r
- * @param extention 延長警告がなされている番組の場合はtrueを指定。\r
* @return String [0]マーク [1]予約しているレコーダのユニークID({@link HDDRecorder#Myself()}) [2]色({@link CommonUtils#str2color(String)})\r
*/\r
private Marker getReservedMarkChar(ListedItem data) {\r
\r
// 予約されている\r
\r
- Marker mark = null;\r
- Marker pickmark = null;\r
- Marker uramark = null;\r
- \r
+ Marker mark;\r
+ boolean marked = false;\r
+\r
// 予約マーク\r
if (recorder != null) {\r
- mark = _getReservedMarkCharNormal(data, recorder, reserve, start, end);\r
+ mark = new Marker(recorder.Myself(), recorder.getColor(reserve.getTuner()));\r
+ marked = marked || _getReservedMarkCharNormal(mark, data, recorder, reserve, start, end);\r
}\r
- // ピックアップマーク\r
- if (env.getShowRsvPickup()) {\r
- pickmark = _getReservedMarkCharPickup(data);\r
+ else {\r
+ mark = new Marker("", "");\r
}\r
// 裏番組予約マーク\r
- if (mark == null && pickmark == null && env.getShowRsvUra()) {\r
- uramark = _getReservedMarkCharUra(data);\r
- }\r
- \r
- if ( mark != null ) {\r
- return mark;\r
+ if (env.getShowRsvUra() && mark.rsvmark == null) {\r
+ marked = _getReservedMarkCharUra(mark, data) || marked;\r
}\r
- if ( pickmark != null || isPickupOnly ) {\r
- return pickmark;\r
- }\r
- if ( uramark != null ) {\r
- return uramark;\r
- }\r
- \r
- // 予約されていない\r
- return(null);\r
+ // ピックアップマーク\r
+ marked = _getReservedMarkCharPickup(mark, data) || marked;\r
+\r
+ return(marked ? mark : null);\r
}\r
/**\r
- * @see #getReservedMarkChar(String, String, String, String, boolean) \r
+ * @see #getReservedMarkChar(ListedItem)\r
*/\r
- private Marker _getReservedMarkCharNormal(ListedItem data, HDDRecorder recorder, ReserveList reserve, String start, String end) {\r
+ private boolean _getReservedMarkCharNormal(Marker mark, ListedItem data, HDDRecorder recorder, ReserveList reserve, String start, String end) {\r
\r
// ここに入ってくる場合は時間の重なりが確認できているものだけである\r
\r
RSVMARK_COND cond = getReservedMarkCond(data, start, end);\r
\r
if (debug) System.err.println(DBGID+data.tvd.title+" "+data.tvd.startDateTime+" "+data.tvd.endDateTime+" "+start+" "+end+" "+cond);\r
- \r
- String mark = null;\r
- \r
+\r
+ RsvMark mk;\r
+\r
switch (cond) {\r
case PREV:\r
- return null;\r
+ return false;\r
case DELAY:\r
- mark = RSVMARK_DELAYED;\r
+ mk = RsvMark.DELAYED;\r
break;\r
case UNDER:\r
- mark = RSVMARK_UNDERRUN;\r
+ mk = RsvMark.UNDERRUN;\r
break;\r
case OVER:\r
- mark = RSVMARK_OVERRUN;\r
+ mk = RsvMark.OVERRUN;\r
break;\r
case CLIP:\r
- mark = (data.tvd.extension) ? (RSVMARK_CLIPPED_E) : (RSVMARK_CLIPPED);\r
+ mk = (data.tvd.extension) ? (RsvMark.CLIPPED_E) : (RsvMark.CLIPPED);\r
break;\r
case SHORT:\r
- mark = (data.tvd.extension) ? (RSVMARK_SHORTAGE_E) : (RSVMARK_SHORTAGE);\r
+ mk = (data.tvd.extension) ? (RsvMark.SHORTAGE_E) : (RsvMark.SHORTAGE);\r
break;\r
default:\r
- mark = RSVMARK_NORMAL;\r
+ mk = RsvMark.NORMAL;\r
break;\r
}\r
\r
- return(new Marker((reserve.getExec())?(mark):(RSVMARK_NOEXEC), recorder.Myself(), recorder.getColor(reserve.getTuner())));\r
+ mark.rsvmark = (reserve.getExec()) ? mk : RsvMark.NOEXEC;\r
+\r
+ return true;\r
}\r
private RSVMARK_COND getReservedMarkCond(ListedItem data, String start, String end) {\r
{\r
}\r
private static enum RSVMARK_COND { PREV, DELAY, UNDER, OVER, CLIP, SHORT, NORMAL };\r
\r
- private Marker _getReservedMarkCharPickup(ListedItem data) {\r
+ private boolean _getReservedMarkCharPickup(Marker mark, ListedItem data) {\r
//return (data.hide_ispickup)?(new Marker(RSVMARK_PICKUP,"",PICKUP_COLOR)):(null);\r
//\r
PickedProgram picktvp = tvprograms.getPickup();\r
ProgDetailList picktvd = picktvp.find(data.tvd);\r
if ( picktvd == null ) {\r
// みつかんねーよ\r
- return null;\r
+ return false;\r
}\r
- \r
- return new Marker(RSVMARK_PICKUP,"",PICKUP_COLOR);\r
+\r
+ mark.pickmark = RsvMark.PICKUP;\r
+\r
+ return true;\r
}\r
\r
- private Marker _getReservedMarkCharUra(ListedItem data) {\r
+ private boolean _getReservedMarkCharUra(Marker mark, ListedItem data) {\r
//\r
String myself = getSelectedRecorderOnToolbar();\r
HDDRecorderList recs = recorders.findInstance(myself);\r
CommonUtils.getStartEndList(starts, ends, res);\r
for (int j=0; j<starts.size(); j++) {\r
if ( CommonUtils.isOverlap(data.tvd.startDateTime, data.tvd.endDateTime, starts.get(j), ends.get(j), env.getAdjoiningNotRepetition()) ) {\r
- return new Marker(RSVMARK_URABAN,"",URABAN_COLOR);\r
+ mark.uramark = RsvMark.URABAN;\r
+ return true;\r
}\r
}\r
}\r
}\r
- return null;\r
+ return false;\r
}\r
\r
\r
VWColorCharCellRenderer renderer = new VWColorCharCellRenderer();\r
if ( CommonUtils.isMac() ) renderer.setMacMarkFont();\r
jTable_listed.getColumn(ListedColumn.RSVMARK.getName()).setCellRenderer(renderer);\r
+ jTable_listed.getColumn(ListedColumn.PICKMARK.getName()).setCellRenderer(renderer);\r
jTable_listed.getColumn(ListedColumn.DUPMARK.getName()).setCellRenderer(renderer);\r
\r
// 強調色関連\r
continue;\r
}\r
column = columnModel.getColumn(lc.ordinal());\r
- column.setPreferredWidth(bounds.getListedColumnSize().get(lc.toString())); // toString()!\r
+ column.setResizable(lc.isResizable());\r
+ column.setMinWidth(MIN_COLUMN_WIDTH);\r
+ Integer w = bounds.getListedColumnSize().get(lc.toString());\r
+ column.setPreferredWidth(w != null ? w : lc.getIniWidth());\r
}\r
\r
// マーク表示分離の有無\r
\r
// 番組詳細の表示・非表示\r
setDetailColumnVisible(env.getShowDetailOnList());\r
- \r
+\r
+ // ピックアップの表示・非表示\r
+ setPickupColumnVisible(env.getShowRsvPickup());\r
+\r
+ // 時間重複の表示・非表示\r
+ setDupColumnVisible(env.getShowRsvDup());\r
+\r
// 行を選択すると詳細が表示されるようにする\r
jTable_listed.getSelectionModel().addListSelectionListener(lsSelectListner);\r
\r
* @see ListedColumn\r
*/\r
private class ListedItem extends RowItem implements Cloneable {\r
- String rsvmark;\r
- String dupmark;\r
+ Marker marker;\r
+ RsvMark dupmark;\r
String prefix;\r
String title;\r
String searchlabel;\r
@Override\r
protected void myrefresh(RowItem o) {\r
ListedItem c = (ListedItem) o;\r
- c.addData(rsvmark);\r
+ c.addData(marker);\r
+ c.addData(marker); // ピックアップ欄用のダミー\r
c.addData(dupmark);\r
c.addData(tvd.center);\r
c.addData(prefix);\r
\r
{\r
// 予約が入っているか否か\r
- if ( c.rsvmark == null || c.rsvmark.length() == 0 ) {\r
- //\r
- }\r
- else if ( c.rsvmark.equals(RSVMARK_NOEXEC) ) {\r
- //\r
- }\r
- else if ( c.rsvmark.equals(RSVMARK_PICKUP) ) {\r
- prechkpicked = true;\r
- }\r
- else {\r
- prechkreserved = true;\r
+ if ( c.marker != null ) {\r
+ if ( c.marker.rsvmark != null && c.marker.rsvmark != RsvMark.NOEXEC ) {\r
+ prechkreserved = true;\r
+ }\r
+ else if ( c.marker.pickmark != null ) {\r
+ prechkpicked = true;\r
+ }\r
}\r
}\r
{\r
\r
return true;\r
}\r
- \r
+\r
+ @Override\r
+ public String getToolTipText(MouseEvent e){\r
+ // イベントからマウス位置を取得し、テーブル内のセルを割り出す\r
+ int prow = rowAtPoint(e.getPoint());\r
+ int row = this.convertRowIndexToModel(prow);\r
+ ListedItem c = rowData.get(row);\r
+ int col = columnAtPoint(e.getPoint());\r
+ if ( col == ListedColumn.RSVMARK.getColumn() && c.marker != null && c.marker.rsvmark != null ) {\r
+ return c.marker.rsvmark.desc;\r
+ }\r
+ else if ( col == ListedColumn.PICKMARK.getColumn() && c.marker != null && c.marker.pickmark != null ) {\r
+ return c.marker.pickmark.desc;\r
+ }\r
+ else if ( col == ListedColumn.DUPMARK.getColumn() && c.dupmark != null ) {\r
+ return c.dupmark.desc;\r
+ }\r
+ return null;\r
+ }\r
+\r
//\r
@Override\r
public void tableChanged(TableModelEvent e) {\r
public Object getValueAt(int row, int column) {\r
// 多少負荷があがるがこっちの方が見通しがいいだろう\r
ListedItem c = rowData.get(row);\r
- if ( c.size()>column ) {\r
+ if ( c.size( ) > column ) {\r
// 特殊なカラム\r
if ( column == ListedColumn.RSVMARK.getColumn() ) {\r
- if ( c.rsvmark.length() > 0 ) {\r
- return c.rsvmark+"\0"+c.hide_rsvmarkcolor;\r
- }\r
- else {\r
- return "";\r
+ if ( c.marker != null && c.marker.rsvmark != null ) {\r
+ if ( c.marker.rsvmark != RsvMark.URABAN ) {\r
+ return c.marker.rsvmark.mark+"\0"+c.hide_rsvmarkcolor;\r
+ }\r
+ else {\r
+ return c.marker.rsvmark.mark+"\0"+URABAN_COLOR;\r
+ }\r
}\r
+ return "";\r
+ }\r
+ else if ( column == ListedColumn.PICKMARK.getColumn() ) {\r
+ return (env.getShowRsvPickup() && c.marker != null && c.marker.pickmark != null) ? c.marker.pickmark.mark : "" ;\r
}\r
else if ( column == ListedColumn.DUPMARK.getColumn() ) {\r
- return c.dupmark+"\0"+DUPMARK_COLOR;\r
+ return (env.getShowRsvDup() && c.dupmark != null) ? c.dupmark.mark+"\0"+DUPMARK_COLOR : "";\r
}\r
else if ( column == ListedColumn.START.getColumn() ) {\r
return c.tvd.accurateDate+" "+c.tvd.start;\r
}\r
return null;\r
}\r
- \r
+\r
@Override\r
public int getRowCount() {\r
return rowData.size();\r