001package org.vishia.commander;
002
003import java.io.File;
004import java.io.IOException;
005
006import org.vishia.fileRemote.FileRemote;
007import org.vishia.gral.base.GralButton;
008import org.vishia.gral.base.GralPos;
009import org.vishia.gral.base.GralWidget;
010import org.vishia.gral.base.GralWindow;
011import org.vishia.gral.ifc.GralTextField_ifc;
012import org.vishia.gral.ifc.GralUserAction;
013import org.vishia.gral.ifc.GralWindow_ifc;
014import org.vishia.util.KeyCode;
015
016/**The F7-Key mkdir is used for mkfile too. This class builds the mkDirFile- dialog window
017 * and contains its functionality.
018 * @author Hartmut Schorrig
019 *
020 */
021public class FcmdMkDirFile
022{
023  protected final Fcmd main;
024
025  GralWindow_ifc windMk;
026
027  GralTextField_ifc widgParentPath, widgName;
028
029  GralButton widgButtonClose, widgButtonMkFile, widgButtonMkDir;
030  
031  public FcmdMkDirFile(Fcmd main)
032  { this.main = main;
033  }
034  
035  
036  /**Builds the content of the confirm-delete window. The window is created static. It is shown
037   * whenever it is used.  */
038  void buildWindowConfirmMk()
039  {
040    main._gralMng.selectPanel("primaryWindow");
041    main._gralMng.setPosition(-19, 0, -47, 0, 1, 'r'); //right buttom, about half less display width and hight.
042    int windProps = GralWindow.windConcurrently;
043    GralWindow window =  main._gralMng.createWindow("windMk", "mkdir/file - The.file.Commander", windProps);
044    main._gralMng.setPosition(4, GralPos.size -3.8f, 1, -1, 0, 'd', 0.4f);
045    widgParentPath = main._gralMng.addTextField("mkParentPath", false, "parent path:", "t");
046    widgName = main._gralMng.addTextField("mkName", true, "name:", "t");
047    main._gralMng.setPosition(-3.5f, -0.5f, 1, GralPos.size + 10, 0, 'r', 2);
048    widgButtonClose = main._gralMng.addButton(null, actionButton, "c", null, "close");
049    widgButtonMkDir = main._gralMng.addButton(null, actionButton, "d", null, "mkdir");
050    widgButtonMkFile = main._gralMng.addButton(null, actionButton, "f", null, "create file");
051    
052    windMk = window; 
053 
054  }
055  
056  
057  /**Opens the view window and fills its content.
058   * @param src The path which is selected as source. It may be a directory or a file.
059   */
060  void dialogMkDirFile(File src){ 
061    FcmdFileCard card = main.getLastSelectedFileCards()[0];
062    if(card !=null){
063      File dir = card.getCurrentDir();
064      widgParentPath.setText(dir.getAbsolutePath());
065    } else {
066      widgParentPath.setText("?? nothing selected ??");
067    }
068    main.gui.setHelpUrl(main.cargs.dirHtmlHelp + "/Fcmd.html#Topic.FcmdHelp.mkdirfile.");
069    windMk.setFocus(); //setWindowVisible(true);
070  }
071  
072
073  /**Action for Key F7 for open dialog. Its like Norton Commander.
074   */
075  GralUserAction actionOpenDialog = new GralUserAction("actionOpenDialog")
076  {
077    @Override public boolean userActionGui(int keyCode, GralWidget infos, Object... params)
078    { dialogMkDirFile(null);
079      return true;
080      // /
081    }
082  };
083
084
085
086  /**Action for Buttons */
087  GralUserAction actionButton = new GralUserAction("actionButton")
088  {
089    @Override public boolean userActionGui(int keyCode, GralWidget widg, Object... params)
090    { if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
091        switch(widg.sCmd.charAt(0)){
092          case 'f':{
093            String path = widgParentPath.getText();
094            String name = widgName.getText();
095            FileRemote file = main.fileCluster.getFile(path, name);
096            boolean bOk = false;
097            try{ bOk = file.createNewFile(); }
098            catch(IOException exc){ main.mainCmd.writeError(exc.getLocalizedMessage()); }
099            if(!bOk){ main.mainCmd.writeError("file exists already");}
100            
101          }break;
102          case 'd':{
103            String path = widgParentPath.getText();
104            String name = widgName.getText();
105            FileRemote dir = main.fileCluster.getFile(path, name);
106            boolean bOk = false;
107            try{ bOk = dir.mkdir(); }
108            catch(SecurityException exc){ main.mainCmd.writeError(exc.getLocalizedMessage()); }
109            if(!bOk){ main.mainCmd.writeError("directory exists already");}
110          }break;
111        }
112        windMk.setWindowVisible(false);
113      }
114      return true;
115      // /
116    }
117  };
118
119
120
121
122}