    001package org.vishia.commander;
    002
    003import java.io.File;
    004
    005import org.vishia.gral.base.GralButton;
    006import org.vishia.gral.base.GralMng;
    007import org.vishia.gral.base.GralPos;
    008import org.vishia.gral.base.GralWidget;
    009import org.vishia.gral.base.GralWindow;
    010import org.vishia.gral.ifc.GralTextField_ifc;
    011import org.vishia.gral.ifc.GralUserAction;
    012import org.vishia.gral.ifc.GralWidget_ifc;
    013import org.vishia.gral.ifc.GralWindow_ifc;
    014import org.vishia.util.KeyCode;
    015
    016public class FcmdSettings
    017{
    018  /**Version, history and license
    019   * <ul>
    020   * <li>2016-08-28 Hartmut chg: extra button now for the jzcmd.cfg,
    021   *   extra button {@link #widgOkError} to open the infoBox, but open the infoBox automatically on error.
    022   *   The Button for open Infobox will get a button text "error" if an error in the config is found.
    023   *   It is nice to have on editing the scripts for commands to see whether it is okay or not and to detect the cause of errors.
    024   * <li>2012-10-27 Hartmut created
    025   * </ul>
    026   *
    027   *
    028   * <b>Copyright/Copyleft</b>:
    029   * For this source the LGPL Lesser General Public License,
    030   * published by the Free Software Foundation is valid.
    031   * It means:
    032   * <ol>
    033   * <li> You can use this source without any restriction for any desired purpose.
    034   * <li> You can redistribute copies of this source to everybody.
    035   * <li> Every user of this source, also the user of redistribute copies
    036   *    with or without payment, must accept this license for further using.
    037   * <li> But the LPGL ist not appropriate for a whole software product,
    038   *    if this source is only a part of them. It means, the user
    039   *    must publish this part of source,
    040   *    but don't need to publish the whole source of the own product.
    041   * <li> You can study and modify (improve) this source
    042   *    for own using or for redistribution, but you have to license the
    043   *    modified sources likewise under this LGPL Lesser General Public License.
    044   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
    045   * </ol>
    046   * If you are intent to use this sources without publishing its usage, you can get
    047   * a second license subscribing a special contract with the author.
    048   *
    049   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
    050   *
    051   *
    052   */
    053  public static final String sVersion = "2016-08-28";
    054
    055  protected final Fcmd main;
    056
    057
    058  GralWindow_ifc windSettings;
    059  GralTextField_ifc widgRefreshTime;
    060
    061  GralTextField_ifc widgCfgPath;
    062
    063  /**Path to call the editor for standard editing texts. */
    064  GralTextField_ifc widgEditorPath;
    065
    066
    067
    068  GralButton widgOkError, widgOk;
    069
    070  /**Buttons for edit and apply the several configuration files.
    071   * Edit opens the file in the standard editor. Apply set the content to the File Commander.
    072   */
    073  GralButton widgEditCmd, widgApplyCmd, widgEditExt, widgApplyExt, widgEditPaths, widgApplyPaths;
    074
    075  int secondsRefresh = 5;
    076
    077
    078  public FcmdSettings(Fcmd main)
    079  { this.main = main;
    080  }
    081
    082
    083
    084  /**Builds the content of the file property window. The window is created static. It is shown
    085   * whenever it is used.  */
    086  void buildWindow()
    087  { main._gralMng.selectPanel("primaryWindow");
    088    int windProps = GralWindow.windConcurrently | GralWindow.windOnTop;
    089    GralWindow window =  new GralWindow("10+29, 10+47", "windSettings", "Settings - The.file.Commander", windProps);
    090    window.createImplWidget_Gthread();
    091    windSettings = window;
    092    main._gralMng.setPosition(3.5f, GralPos.size -3, 1, -1, 0, 'd');
    093    widgRefreshTime = main._gralMng.addTextField(null, true, "refresh time file panel", "t");
    094    widgEditorPath = main._gralMng.addTextField(null, true, "standard editor path", "t");
    095    widgCfgPath = main._gralMng.addTextField(null, false, "configuration directory path", "t");
    096
    097    //main._gralMng.setPosition(GralPos.refer + 3.0f, GralPos.size -2.0f, 1, GralPos.size + 8, 0, 'r', 0.5f);
    098    main._gralMng.setPosition(-7, GralPos.size -2.0f, 1, GralPos.size + 8, 0, 'r', 0.5f);
    099    widgEditCmd = main._gralMng.addButton("editCmd", actionEditCfgFile, "cmdjz.cfg", null, "edit");
    100    widgApplyCmd = main._gralMng.addButton("applyCmd", actionApplyCfgCmd, "cmdjz.cfg", null, "apply");
    101    main._gralMng.addText("cmd cfg file");
    102
    103    main._gralMng.setPosition(GralPos.refer + 3.0f, GralPos.size -2.0f, 1, GralPos.size + 8, 0, 'r', 0.5f);
    104    widgEditCmd = main._gralMng.addButton("editCmd", actionEditCfgFile, "extjz.cfg", null, "edit");
    105    widgApplyCmd = main._gralMng.addButton("applyExt", actionApplyCfgExt, "extjz.cfg", null, "apply");
    106    main._gralMng.addText(".ext cfg file");
    107
    108    main._gralMng.setPosition(GralPos.refer + 3.0f, GralPos.size -2.0f, 1, GralPos.size + 8, 0, 'r', 0.5f);
    109    widgEditCmd = main._gralMng.addButton("editPaths", actionEditCfgFile, "path.cfg", null, "edit");
    110    widgApplyCmd = main._gralMng.addButton("applyPaths", actionApplyCfgPath, "path.cfg", null, "apply");
    111    main._gralMng.addText("favor paths file");
    112
    113    main._gralMng.setPosition(-10, GralPos.size -2, -18, -1, 0, 'd', 0.5f);
    114    widgOkError = main._gralMng.addButton("ok_error", actionOpenInfo, "infoBox");
    115    main._gralMng.setPosition(-1, GralPos.size -2.5f, -9, -1, 0, 'd', 0.5f);
    116    widgOk = main._gralMng.addButton("close", actionButton, "close");
    117    widgOk.setCmd("close");
    118  }
    119
    120  /**Opens the view window and fills its content.
    121   * @param src The path which is selected as source. It may be a directory or a file.
    122   */
    123  void openDialog(File src)
    124  {
    125    widgOkError.setText("infoBox");
    126    widgRefreshTime.setText("" + secondsRefresh);
    127    widgCfgPath.setText(main.cargs.dirCfg.getAbsolutePath());
    128    windSettings.setFocus(); //setWindowVisible(true);
    129
    130  }
    131
    132
    133  /**Action for Close.
    134   */
    135  GralUserAction actionButton = new GralUserAction("FcmdSettings-close")
    136  {
    137    @Override public boolean exec(int keyCode, GralWidget_ifc widg, Object... params)
    138    { if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    139        if(widg == widgOk){
    140          windSettings.closeWindow();
    141        }
    142      }
    143      return true;
    144  } };
    145
    146
    147  /**Action for Close.
    148   */
    149  GralUserAction actionOpenInfo = new GralUserAction("FcmdSettings-info")
    150  {
    151    @Override public boolean exec(int keyCode, GralWidget_ifc widg, Object... params)
    152    { if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    153        GralMng.get().showInfo(null);
    154      }
    155      return true;
    156  } };
    157
    158
    159  /**Action for open the dialog window. It fills the value of the fields from internal variable.
    160   */
    161  GralUserAction actionOpenDialog = new GralUserAction("FcmdSettings-actionOpenDialog")
    162  {
    163    @Override public boolean exec(int keyCode, GralWidget_ifc infos, Object... params){
    164      if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    165        openDialog(main.currentFile());
    166      }
    167      return true;
    168    }
    169  };
    170
    171
    172  /**Action for open the editor for the configuration file.
    173   * The name of the configuration file is contained in the widget. */
    174  GralUserAction actionEditCfgFile = new GralUserAction("FcmdSettings-actionEditCfgFile")
    175  {
    176    @Override public boolean exec(int keyCode, GralWidget_ifc widg, Object... params){
    177      if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    178        File fileCfg = new File(main.cargs.dirCfg, ((GralWidget)widg).getCmd());
    179        main.openExtEditor(fileCfg);
    180        /*
    181        CmdStore.CmdBlock cmdBlock = main.buttonCmds.getCmd("edit");
    182        if (cmdBlock == null) {
    183          main.mainCmd.writeError("internal problem - don't find 'edit' command. ");
    184        } else {
    185          File[] files = new File[1];
    186          files[0] = new File(main.cargs.dirCfg, ((GralWidget)widg).getCmd());
    187          File dir = FileSystem.getDir(files[0]);
    188          main.executer.cmdQueue.addCmd(cmdBlock, files, dir); // to execute.
    189        }
    190        */
    191      }
    192      return true;
    193    }
    194  };
    195
    196
    197
    198
    199  /**Action to set the content of the cmd configuration file. */
    200  GralUserAction actionApplyCfgCmd = new GralUserAction("FcmdSettings-actionApplyCfgCmd")
    201  {
    202    @Override public boolean exec(int keyCode, GralWidget_ifc widg, Object... params){
    203      if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    204        String sFileCfg = ((GralWidget)widg).getCmd();
    205        main.executer.cmdSelector.clear();
    206        String sError = main.executer.readCmdCfgSelectList(main.executer.cmdSelector.addJZsub2SelectTable, new File(main.cargs.dirCfg, sFileCfg), main.console);
    207        if(sError != null) {
    208          main.showInfoBox(sError);
    209          widgOkError.setText("error");
    210        } else {
    211          widgOkError.setText("success");
    212          main.setTextInfoBox("ok read " + main.cargs.dirCfg + "/" + sFileCfg);
    213        }
    214      }
    215      return true;
    216    }
    217  };
    218
    219
    220  /**Action to set the content of the extension configuration file. */
    221  GralUserAction actionApplyCfgExt = new GralUserAction("FcmdSettings-actionApplyCfgExt")
    222  {
    223    @Override public boolean exec(int keyCode, GralWidget_ifc widg, Object... params){
    224      if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    225        main.executer.readCfgExt(new File(main.cargs.dirCfg, "extjz.cfg"));
    226      }
    227      return true;
    228    }
    229  };
    230
    231
    232  /**Action to set the content of the favor path file. */
    233  GralUserAction actionApplyCfgPath = new GralUserAction("FcmdSettings-actionApplyCfgPath")
    234  {
    235    @Override public boolean exec(int keyCode, GralWidget_ifc widg, Object... params){
    236      if(KeyCode.isControlFunctionMouseUpOrMenu(keyCode)){
    237        main.favorPathSelector.actionReadFavoritePathes.exec(KeyCode.menuEntered, null);
    238      }
    239      return true;
    240    }
    241  };
    242
    243
    244
    245}