    001package org.vishia.commander;
    002
    003import java.io.File;
    004import java.text.DateFormat;
    005import java.text.SimpleDateFormat;
    006import java.util.Date;
    007
    008import org.vishia.fileRemote.FileRemote;
    009import org.vishia.gral.base.GralMenu;
    010import org.vishia.gral.base.GralTextField;
    011import org.vishia.gral.base.GralWidget;
    012import org.vishia.gral.ifc.GralUserAction;
    013import org.vishia.util.KeyCode;
    014
    015public class FcmdStatusLine
    016{
    017
    018  /**Version, history and license
    019   * <ul>
    020   * <li>2012-03-09 Hartmut new: {@link #widgSyncInfo}
    021   * <li>2012-03-04 Hartmut created as extra class. Functionality was in {@link FcmdFileCard} (setText)
    022   *   and {@link FcmdButtons} (initialization of widgets)
    023   * </ul>
    024   *
    025   *
    026   * <b>Copyright/Copyleft</b>:
    027   * For this source the LGPL Lesser General Public License,
    028   * published by the Free Software Foundation is valid.
    029   * It means:
    030   * <ol>
    031   * <li> You can use this source without any restriction for any desired purpose.
    032   * <li> You can redistribute copies of this source to everybody.
    033   * <li> Every user of this source, also the user of redistribute copies
    034   *    with or without payment, must accept this license for further using.
    035   * <li> But the LPGL ist not appropriate for a whole software product,
    036   *    if this source is only a part of them. It means, the user
    037   *    must publish this part of source,
    038   *    but don't need to publish the whole source of the own product.
    039   * <li> You can study and modify (improve) this source
    040   *    for own using or for redistribution, but you have to license the
    041   *    modified sources likewise under this LGPL Lesser General Public License.
    042   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
    043   * </ol>
    044   * If you are intent to use this sources without publishing its usage, you can get
    045   * a second license subscribing a special contract with the author.
    046   *
    047   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
    048   *
    049   *
    050   */
    051  public static final int version = 0x20120309;
    052
    053
    054  private final Fcmd main;
    055
    056  boolean showBackslash = false;
    057
    058  GralTextField widgFileInfo, widgFilePath, widgRunInfo, widgSyncInfo;
    059
    060  final DateFormat formatDateInfo = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss");
    061
    062
    063  String sPath = "";
    064
    065  FcmdStatusLine(Fcmd main){
    066    this.main = main;
    067  }
    068
    069
    070
    071  void buildGraphic(){
    072    main._gralMng.setPosition(0, 2, 0, 0, 1, 'r');
    073    widgFilePath = main._gralMng.addTextField(main.nameTextFieldFilePath, false, null, null);
    074    widgFilePath.setHtmlHelp(main.cargs.dirHtmlHelp + "/Fcmd.html#Topic.FcmdHelp.layout.pathCurr.");
    075    widgFilePath.setDragEnable(main.actionDragFileFromStatusLine, KeyCode.dragFiles);
    076    GralMenu menuWidg = widgFilePath.getContextMenu();
    077    menuWidg.addMenuItem("menuContextShowBackslash", main.idents.menuContextShowBackslash, actionShowBackslash);
    078    menuWidg.addMenuItem("menuContextShowSlash", main.idents.menuContextShowSlash, actionShowSlash);
    079    main._gralMng.setPosition(2, 4, 0, 9.8f, 1, 'r');
    080    widgRunInfo = main._gralMng.addTextField(main.nameTextFieldRunInfo, false, null, null);
    081    widgRunInfo.setHtmlHelp(main.cargs.dirHtmlHelp + "/Fcmd.html#Topic.FcmdHelp.layout.runInfo.");
    082    main._gralMng.setPosition(2, 4, 10, -8, 1, 'r');
    083    widgFileInfo = main._gralMng.addTextField(main.nameTextFieldInfo, false, null, null);
    084    widgFileInfo.setHtmlHelp(main.cargs.dirHtmlHelp + "/Fcmd.html#Topic.FcmdHelp.layout.fileInfo.");
    085    main._gralMng.setPosition(2, 4, -8, 0, 1, 'r');
    086    widgSyncInfo = main._gralMng.addTextField(main.nameTextFieldInfo, false, null, null);
    087    widgSyncInfo.setHtmlHelp(main.cargs.dirHtmlHelp + "/Fcmd.html#Topic.FcmdHelp.layout.syncInfo.");
    088
    089  }
    090
    091
    092  void setFileInfo(FileRemote file){
    093    long lastModified = file.lastModified();
    094    String sDate = formatDateInfo.format(new Date(lastModified));
    095    String sLenShort = //String.format("", file.length)
    096      file.length() >= (1024 * 1024) ? String.format("%2.3f MByte = %d Byte", file.length()/(1024 * 1024.0), file.length()) :
    097      file.length() >=    1024 ? String.format("%3.2f kByte = %d Byte", file.length()/1024.0, file.length()) :
    098      String.format("%3d Byte", file.length());
    099    StringBuilder info = new StringBuilder(100);
    100    info.append(sDate)/*.append(" = ").append(lastModified)*/;
    101    if(file instanceof FileRemote){
    102      FileRemote filer = file;
    103      FileRemote filep = file.getParentFile();
    104      int parentId = filep !=null ? filep.ident(): 0;
    105      info.append(" #").append(filer.ident()).append('/').append(parentId).append(" flags=0x")
    106      .append(Integer.toHexString(filer.getFlags()));
    107      if(file.mark !=null){
    108        int mark = file.mark.getMark();
    109        info.append(" sel=").append(Integer.toHexString((mark >>16) & 0xffff)).append('\'').append(Integer.toHexString(mark & 0xffff));
    110        if(file.isDirectory()){
    111          info.append("; files=").append(file.mark.nrofFilesSelected());
    112        }
    113      }
    114    }
    115    long creationTime = file.creationTime();
    116    if(creationTime !=0){
    117      sDate = formatDateInfo.format(new Date(creationTime));
    118      info.append("; creation=").append(sDate);
    119    }
    120    long lastAccess = file.lastAccessTime();
    121    if(lastAccess !=0){
    122      sDate = formatDateInfo.format(new Date(lastAccess));
    123      info.append("; lastAccess=").append(sDate);
    124    }
    125    info.append(", length= ").append(sLenShort);
    126    main.statusLine.widgFileInfo.setText(info);
    127    sPath = file.getAbsolutePath();
    128    if(showBackslash){
    129      sPath = sPath.replace('/', '\\');
    130    }
    131    main.statusLine.widgFilePath.setText(sPath);
    132    if(main.filePropsCmd.isVisible){
    133      main.filePropsCmd.showFileInfos(file);
    134    }
    135    main.viewCmd.quickView();
    136
    137  }
    138
    139  GralUserAction actionShowBackslash = new GralUserAction("actionShowBackslash"){
    140    @Override public boolean userActionGui(int key, GralWidget infos, Object... params) {
    141      showBackslash = true;
    142      sPath = sPath.replace('/', '\\');
    143      main.statusLine.widgFilePath.setText(sPath);
    144      return true;
    145    }
    146  };
    147
    148  GralUserAction actionShowSlash = new GralUserAction("actionShowSlash"){
    149    @Override public boolean userActionGui(int key, GralWidget infos, Object... params) {
    150      showBackslash = false;
    151      sPath = sPath.replace('\\', '/');
    152      main.statusLine.widgFilePath.setText(sPath);
    153      return true;
    154    }
    155  };
    156
    157
    158
    159}