001package org.vishia.commander; 002 003import java.io.File; 004import java.util.Map; 005import java.util.TreeMap; 006 007import org.vishia.fileRemote.FileRemote; 008import org.vishia.gral.base.GralTable; 009import org.vishia.gral.base.GralWidget; 010import org.vishia.gral.ifc.GralTableLine_ifc; 011import org.vishia.gral.ifc.GralUserAction; 012import org.vishia.gral.widget.GralFileSelector; 013import org.vishia.gral.widget.GralSelectList; 014import org.vishia.util.KeyCode; 015 016/**This is one table of favorite pathes in the file commander. 017 */ 018public class FcmdFavorCard extends GralSelectList<FcmdFavorPathSelector.FavorPath> 019{ 020 /**The component */ 021 final Fcmd main; 022 023 /**The tabbed panel where this class is member of. */ 024 final FcmdLeftMidRightPanel mainPanel; 025 026 final FcmdFileCard fileTable; 027 028 /**Stores the last selected and used favor path (pressing enter or double click) 029 * to select the same line if the favor path will be re-opened. 030 */ 031 String sActSelectedFavorPath = ""; 032 033 /**Index of all entries in the visible list. */ 034 Map<String, FcmdFavorPathSelector.FavorPath> indexFavorPaths = new TreeMap<String, FcmdFavorPathSelector.FavorPath>(); 035 036 public FcmdFavorCard(Fcmd main, String name, FcmdFileCard fileTable, FcmdLeftMidRightPanel panel) 037 { //super(name, mng); 038 super(name, 20, new int[]{2,15,0}, 'C'); 039 this.main = main; 040 this.mainPanel = panel; 041 this.fileTable = fileTable; 042 043 } 044 045 046 /**Adds a line to this table. 047 * @param ix Show which index is used for a local table, 0..2 for left, mid, right, 048 * than show the label in the left cell (column) 049 * @param favorPathInfo The favorite info 050 */ 051 GralTableLine_ifc<FcmdFavorPathSelector.FavorPath> add(FcmdFavorPathSelector.FavorPath favorPathInfo) 052 { 053 if(indexFavorPaths.get(favorPathInfo.selectName) == null){ 054 indexFavorPaths.put(favorPathInfo.selectName, favorPathInfo); 055 GralTableLine_ifc<FcmdFavorPathSelector.FavorPath> line = wdgdTable.addLine(null, null, favorPathInfo); 056 line.setCellText(favorPathInfo.selectName, 1); 057 line.setCellText(favorPathInfo.path, 2); 058 line.repaint(100,0); 059 return line; 060 } 061 else return null; 062 } 063 064 065 void clear() 066 { 067 indexFavorPaths.clear(); 068 wdgdTable.clearTable(); 069 } 070 071 072 073 /**Add all favor paths from the SelectTab newly 074 * @param favorTabInfo 075 */ 076 void fillFavorPaths(FcmdFavorPathSelector.FavorFolder favorTabInfo) 077 { 078 clear(); 079 int lineCt =0; 080 081 GralTableLine_ifc<FcmdFavorPathSelector.FavorPath> currentLine = null; 082 for( FcmdFavorPathSelector.FavorPath favorPathInfo: favorTabInfo.listfavorPaths){ 083 GralTableLine_ifc<FcmdFavorPathSelector.FavorPath> line = add(favorPathInfo); 084 if(currentLine == null){ currentLine = line; } //first line 085 if(favorPathInfo.selectName.equals(sActSelectedFavorPath)){ 086 currentLine = line; //or the last selected one. 087 } 088 lineCt +=1; 089 } 090 wdgdTable.setCurrentLine(currentLine, 3, 1); 091 092 } 093 094 095 /**Overrides the {@link GralFileSelector#setFocus()} and calls him, before that sets the color 096 * of the current line of table of all 3 current file panels to the 3-stage color 097 * to see which table has the focus. 098 */ 099 @Override public boolean setFocus(){ 100 mainPanel.bFavorCardHasFocus = true; 101 mainPanel.bFavorThemeCardHasFocus = false; 102 main.setLastSelectedPanel(mainPanel); 103 //setActFilePanel_setColorCurrLine(); 104 return super.setFocus(); 105 } 106 107 108 109 110 111 /**Removes this file card with its widgets and data. It is 'close tab'. */ 112 @Override public boolean remove(){ 113 super.remove(); 114 indexFavorPaths.clear(); 115 return true; 116 } 117 118 119 @Override protected boolean actionOk(Object userData, GralTableLine_ifc line) 120 { 121 //before changing the content of this fileTable, store the current directory 122 //to restore if this favor respectively selection is used ones more. 123 FileRemote dir = null; 124 String currentDir; 125 if(fileTable.favorPathInfo !=null){ 126 dir = fileTable.getCurrentDir(); 127 if(dir != null){ 128 currentDir = dir.getAbsolutePath(); 129 if(currentDir !=null){ 130 mainPanel.indexActualDir.put(fileTable.favorPathInfo.selectName, currentDir); 131 } } } 132 // 133 //Now switch to the new favor in the file panel: 134 FcmdFavorPathSelector.FavorPath favorPathInfo = (FcmdFavorPathSelector.FavorPath)line.getUserData(); 135 //new: fileTable.actionSetFromTabSelection.exec(KeyCode.menuEntered, null, favorPathInfo); 136 main.favorPathSelector.actFavorPathInfo = favorPathInfo; //The last used selection (independent of tab left, middle, right) 137 this.sActSelectedFavorPath = favorPathInfo.selectName; 138 if( wdgdTable.name.startsWith(FcmdWidgetNames.tableFavoritesMain)) { 139 //use the root dir any time if the main favor path table is used. 140 currentDir = favorPathInfo.path; 141 } else { 142 currentDir = mainPanel.indexActualDir.get(favorPathInfo.selectName); 143 if(currentDir == null){ 144 currentDir = favorPathInfo.path; 145 } 146 } 147 //dir = new FileRemote(currentDir); 148 //TODO this is exec in the graphic thread. Fill the card, access the file system in another thread!!! 149 dir = main.fileCluster.getFile(currentDir, null); 150 fileTable.setNewContent(favorPathInfo, dir); 151 152 if(!fileTable.wdgCardSelector.setActItem(favorPathInfo.selectName)){ 153 fileTable.wdgCardSelector.addItem(favorPathInfo.selectName, -1, favorPathInfo); 154 } 155 return true; 156 } 157 158 @Override 159 protected void actionLeft(Object userData, GralTableLine_ifc line) 160 { 161 // TODO Auto-generated method stub 162 163 } 164 165 @Override 166 protected void actionRight(Object userData, GralTableLine_ifc line) 167 { 168 // TODO Auto-generated method stub 169 170 } 171 172 /**Handle the keys for the JavaCommander-Selection of favorites 173 * <ul> 174 * <li>sh-F1 .. shF3: activates fileSelector for left, middle and right panel. 175 * </ul> 176 * @see org.vishia.gral.widget.GralSelectList#actionUserKey(int, java.lang.Object, org.vishia.gral.ifc.GralTableLine_ifc) 177 */ 178 @Override protected boolean actionUserKey(int key, Object userData, 179 GralTableLine_ifc line) 180 { boolean ret = true; 181 FcmdFavorPathSelector.FavorPath favorPathInfo = (FcmdFavorPathSelector.FavorPath)userData; 182 //TODO not used no more 183 if(key ==KeyCode.shift + KeyCode.F1){ 184 File dir = new File(favorPathInfo.path); 185 //panelLeft.fileSelectorMain.fillIn(dir); 186 } else if (key ==KeyCode.shift + KeyCode.F2){ 187 File dir = new File(favorPathInfo.path); 188 //panelMid.fileSelectorMain.fillIn(dir); 189 } else if (key ==KeyCode.shift + KeyCode.F3){ 190 //panelRight.fileSelectorMain.fillIn(new File(data.path)); 191 } else if (key ==KeyCode.shift + KeyCode.F5){ 192 //reread the configuration file. 193 main.favorPathSelector.readCfg(main.favorPathSelector.fileCfg); 194 main.favorPathSelector.panelLeft.fillCards(); 195 196 /* 197 } else if (key == main.keyActions.keyPanelLeft){ 198 //sets focus to left 199 FcmdFileCard fileTableLeft = null; 200 boolean found = false; 201 for(FcmdFileCard fileTable: mainPanel.listTabs){ 202 if(fileTable.favorCard == this){ found = true; break;} 203 fileTableLeft = fileTable; //save this table as table left, use if found. 204 } 205 if(found){ 206 if(fileTableLeft !=null){ 207 fileTableLeft.favorCard.wdgdTable.setFocus(); 208 } else { //left from first is the selectAllTable of this panel. 209 mainPanel.cardFavorThemes.wdgdTable.setFocus(); 210 } 211 } 212 } else if (key == main.keyActions.keyPanelRight){ 213 //sets focus to right 214 FcmdFileCard fileTableRight = null; 215 boolean found = false; 216 for(FcmdFileCard fileTable: mainPanel.listTabs){ 217 if(found){ fileTableRight = fileTable; break; } //use this next table if found before. 218 if(fileTable.favorCard == this) { found = true; } 219 } 220 if(fileTableRight !=null){ 221 fileTableRight.favorCard.wdgdTable.setFocus(); 222 } 223 } else if (key == main.keyActions.keyMainPanelLeft){ 224 FcmdLeftMidRightPanel dstPanel = mainPanel == main.favorPathSelector.panelRight ? 225 main.favorPathSelector.panelMid : main.favorPathSelector.panelLeft; 226 if(dstPanel.actFileCard !=null){ dstPanel.actFileCard.favorCard.setFocus(); } 227 } else if (key == main.keyActions.keyMainPanelRight){ 228 FcmdLeftMidRightPanel dstPanel = mainPanel == main.favorPathSelector.panelLeft ? 229 main.favorPathSelector.panelMid : main.favorPathSelector.panelRight; 230 if(dstPanel.actFileCard !=null){ dstPanel.actFileCard.favorCard.setFocus(); } 231 */ 232 } else if (key == main.keyActions.keyCreateFavorite){ 233 main.favorPathSelector.actFavorPathInfo = favorPathInfo; //info in the line of table. 234 main.favorPathSelector.windAddFavorite.widgLabel.setText("file3"); 235 main.favorPathSelector.windAddFavorite.widgShortName.setText("alias"); 236 //File lastSelectedFile = panelRight.fileSelectorMain.getSelectedFile(); 237 //String pathDir = FileSystem.getCanonicalPath(lastSelectedFile.getParentFile()); 238 //windAddFavorite.widgPath.setText(pathDir); 239 main.favorPathSelector.windAddFavorite.window.setFocus(); //WindowVisible(true); 240 } else { 241 ret = false; 242 }// 243 return ret; 244 } 245 246 /**Action is called any time if a line was focused in the favor table. */ 247 GralUserAction actionFavorSelected = new GralUserAction("actionFavorSelected"){ 248 @Override public boolean userActionGui(int actionCode, GralWidget widgd, Object... params) { 249 if(actionCode == KeyCode.userSelect){ 250 mainPanel.bFavorCardHasFocus = true; 251 mainPanel.bFavorThemeCardHasFocus = false; 252 main.lastFavorCard = FcmdFavorCard.this; 253 main.currentFileCard = FcmdFavorCard.this.fileTable; 254 main.setLastSelectedPanel(mainPanel); 255 GralTable.TableLineData line = (GralTable.TableLineData) params[0]; 256 //Object oData = line.getUserData(); 257 //System.out.println("FcmdFavorCard.actionFavorSelected: " + fileTable.label); 258 } 259 return true; 260 } 261 }; 262 263 264 265 @Override public String toString(){ return fileTable.toString(); } 266 267}