/**
   * Load the styled string to be used by this control. <br>
   * It will also restore any text selection saved with the text.
   *
   * @param fname the name of the file to use
   * @return true if loaded successfully else false
   */
  public boolean loadText(String fname) {
    StyledString ss = StyledString.load(winApp, fname);
    if (ss == null) return false;
    setStyledText(ss);
    // Now restore any text selection
    if (stext.startIdx >= 0) { // we have a selection
      // Selection starts at ...
      startTLHI = new TextLayoutHitInfo();
      startTLHI.tli = stext.getTLIforCharNo(stext.startIdx);
      int pInLayout = stext.startIdx - startTLHI.tli.startCharIndex;
      if (pInLayout == 0) startTLHI.thi = startTLHI.tli.layout.getNextLeftHit(1);
      else startTLHI.thi = startTLHI.tli.layout.getNextRightHit(pInLayout - 1);
      // Selection ends at ...
      endTLHI = new TextLayoutHitInfo();
      endTLHI.tli = stext.getTLIforCharNo(stext.endIdx);
      pInLayout = stext.endIdx - endTLHI.tli.startCharIndex;

      if (pInLayout == 0) endTLHI.thi = endTLHI.tli.layout.getNextLeftHit(1);
      else endTLHI.thi = endTLHI.tli.layout.getNextRightHit(pInLayout - 1);
      calculateCaretPos(endTLHI);
    }
    bufferInvalid = true;
    return true;
  }