public void createControl(Composite parent) {
    Composite contents = new Composite(parent, SWT.NONE);
    GridLayout layout = new GridLayout();
    contents.setLayout(layout);
    GridData gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    contents.setLayoutData(gridData);

    createFilesGroup(contents); // 文件列表区域
    createPropertiesGroup(contents); // 源文件属性区域组
    createConversionOptionsGroup(contents); // 转换选项组
    createSegmentationGroup(contents); // 分段规则选择区域组

    bindValue(); // 数据绑定

    loadFiles(); // 加载文件列表

    filesTable.select(0); // 默认选中第一行数据
    filesTable.notifyListeners(SWT.Selection, null);

    Dialog.applyDialogFont(parent);

    Point defaultMargins = LayoutConstants.getMargins();
    GridLayoutFactory.fillDefaults()
        .numColumns(1)
        .margins(defaultMargins.x, defaultMargins.y)
        .generateLayout(contents);

    setControl(contents);

    srxFile.setText(ConverterContext.defaultSrx);

    validate();
  }
 /**
  * Creates a DpiGridLayoutFactory that creates DpiGridLayouts with no margins and default dialog
  * spacing.
  *
  * <p>Initial values are:
  *
  * <ul>
  *   <li>numColumns(1)
  *   <li>margins(0,0)
  *   <li>extendedMargins(0,0,0,0)
  *   <li>spacing(LayoutConstants.getSpacing())
  *   <li>equalWidth(false)
  * </ul>
  *
  * @return a DpiGridLayoutFactory that creates DpiGridLayouts as though created with their default
  *     constructor
  * @see #swtDefaults
  */
 public static DpiGridLayoutFactory fillDefaults() {
   final DpiGridLayout layout = new DpiGridLayout();
   layout.marginWidth = 0;
   layout.marginHeight = 0;
   final Point defaultSpacing = LayoutConstants.getSpacing();
   layout.horizontalSpacing = defaultSpacing.x;
   layout.verticalSpacing = defaultSpacing.y;
   return new DpiGridLayoutFactory(layout);
 }
  @Override
  protected Control createDialogArea(Composite parent) {
    Composite parentComposite = (Composite) super.createDialogArea(parent);

    Composite contents = new Composite(parentComposite, SWT.NONE);
    GridLayout layout = new GridLayout();
    contents.setLayout(layout);
    GridData gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    contents.setLayoutData(gridData);

    Composite converterComposite = new Composite(contents, SWT.NONE);
    converterComposite.setLayout(new GridLayout(2, false));

    gridData = new GridData();
    gridData.horizontalAlignment = SWT.FILL;
    gridData.grabExcessHorizontalSpace = true;
    converterComposite.setLayoutData(gridData);

    String direction = converterViewModel.getDirection();
    if (direction.equals(Converter.DIRECTION_POSITIVE)) {
      supportList = createConvertControl("Convert from Suport format to Xliff", converterComposite);
    } else {
      supportList =
          createConvertControl("Convert from Xliff to Support format", converterComposite);
    }
    supportList.getCombo().setFocus();

    bindValue();

    Dialog.applyDialogFont(parentComposite);

    Point defaultMargins = LayoutConstants.getMargins();
    GridLayoutFactory.fillDefaults()
        .numColumns(2)
        .margins(defaultMargins.x, defaultMargins.y)
        .generateLayout(contents);

    return contents;
  }
  @Override
  protected Control createDialogArea(Composite parent) {
    Composite parentComposite = (Composite) super.createDialogArea(parent);

    Composite contents = new Composite(parentComposite, SWT.NONE);
    contents.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
    setTitle("Create a project");
    setMessage(
        "Debrief requires a project to store your data in, which will stored be in the. DebriefNG folder in\nyour home directory. "
            + "Debrief can also provide you with some sample data, for use in the tutorials.");

    new Label(contents, SWT.LEFT).setText("Project name:");

    projectNameText = new Text(contents, SWT.SINGLE | SWT.BORDER);
    projectName = "DebriefProject";
    IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName);
    if (project != null && project.exists()) {
      projectName = "";
    }
    projectNameText.setText(projectName);
    projectNameText.addModifyListener(
        new ModifyListener() {
          public void modifyText(ModifyEvent event) {
            if (event.widget == projectNameText) {
              projectName = projectNameText.getText().trim();
              okButton.setEnabled(validate());
            }
          }
        });

    addDebriefSamplesButton = new Button(contents, SWT.CHECK);
    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false);
    gd.horizontalSpan = 2;
    addDebriefSamplesButton.setLayoutData(gd);

    addDebriefSamplesButton.setText("Add Debrief Samples (required for self-teach tutorials)");
    addDebriefSamplesButton.setSelection(true);

    if (showAskMeButton) {
      final Button askMeNextTime = new Button(contents, SWT.CHECK);
      gd = new GridData(SWT.FILL, SWT.FILL, true, false);
      gd.horizontalSpan = 2;
      askMeNextTime.setLayoutData(gd);

      askMeNextTime.setText("Always check at startup");
      askMeNextTime.setSelection(true);
      askMeNextTime.addSelectionListener(
          new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
              Boolean askMe = askMeNextTime.getSelection();
              CorePlugin.getDefault()
                  .getPreferenceStore()
                  .putValue(PrefsPage.PreferenceConstants.ASK_ABOUT_PROJECT, askMe.toString());
            }
          });
    }
    projectNameText.setFocus();

    Dialog.applyDialogFont(parentComposite);

    Point defaultMargins = LayoutConstants.getMargins();
    GridLayoutFactory.fillDefaults()
        .numColumns(2)
        .margins(defaultMargins.x, defaultMargins.y)
        .generateLayout(contents);

    return contents;
  }