/**
   * Create origin area with information about selection and original language
   *
   * @param parent parent composite
   * @param comboListener translator combo listener
   * @param schema android localization schema
   */
  private void createFromArea(
      Composite parent, ComboListener comboListener, ILocalizationSchema schema) {
    Group languageFromGroup = new Group(parent, SWT.SHADOW_ETCHED_OUT);
    languageFromGroup.setText(Messages.TranslationDialog_From);
    languageFromGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    languageFromGroup.setLayout(new GridLayout(3, false));

    /*
     * Selected cells / text
     */
    // TODO: decide whether to show or now the selected text
    /*
     * Label labelFrom = new Label(languageFromGroup, SWT.NONE);
     * labelFrom.setText(Messages.TranslationDialog_SelectedText);
     *
     * Label labelFromText = new Label(languageFromGroup, SWT.NONE);
     * labelFromText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
     * false, 2, 1)); String selectedText = ""; for (String text :
     * this.selectedCells) { selectedText += text + "\n"; }
     * labelFromText.setText(selectedText);
     */

    /*
     * Language selection
     */
    Label fromText = new Label(languageFromGroup, SWT.NONE);
    fromText.setText(Messages.TranslationDialog_FromLanguage);

    String selectedLanguage = schema.getISO639LangFromID(this.selectedColumn);
    // check if ISO639 exists
    selectedLanguage =
        ((LanguagesUtil.getLanguageName(selectedLanguage) != null) ? selectedLanguage : null);
    String defaultLanguage =
        PreferencesManager.getInstance()
            .getProjectPreferencesManager(this.project)
            .getDefaultLanguageForColumn(this.selectedColumn);
    fromCombo =
        LanguagesUtil.createLanguagesCombo(
            (Composite) languageFromGroup, selectedLanguage, defaultLanguage, schema);
    fromCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
    fromCombo.addSelectionListener(comboListener);

    LanguagesUtil.createImageStatus(languageFromGroup, selectedLanguage);
  }
  /**
   * Create destination area with information about destination columns and languages
   *
   * @param parent parent composite
   * @param schema android localization schema
   */
  private void createToArea(Composite parent, ILocalizationSchema schema) {
    Group languageToGroup = new Group(parent, SWT.SHADOW_ETCHED_OUT);
    languageToGroup.setText(Messages.TranslationDialog_To);
    languageToGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    languageToGroup.setLayout(new GridLayout(4, false));

    if (this.columns.length <= 2) {
      Label noColumns = new Label(languageToGroup, SWT.NONE);
      noColumns.setText(Messages.TranslationDialog_NoColumns);
    }

    /*
     * Destination Columns
     */
    this.destinationColumns = new ArrayList<DestinationColumn>();

    int i = 0;
    for (TableColumn column : this.columns) {
      if ((i > 0) && (!column.getText().equals(this.selectedColumn))) {

        // checkbox
        Button checkbox = new Button(languageToGroup, SWT.CHECK);
        checkbox.setSelection(true);

        // label
        Label label = new Label(languageToGroup, SWT.NONE);
        label.setText(column.getText());

        // languages combo
        String selectedLanguage = schema.getISO639LangFromID(column.getText());
        // check if ISO639 exists
        selectedLanguage =
            ((LanguagesUtil.getLanguageName(selectedLanguage) != null) ? selectedLanguage : null);
        String defaultLanguage =
            PreferencesManager.getInstance()
                .getProjectPreferencesManager(this.project)
                .getDefaultLanguageForColumn(column.getText());

        DestinationColumn destColumn =
            new DestinationColumn(checkbox, true, column.getText(), selectedLanguage);

        checkbox.setData(destColumn);
        checkbox.addSelectionListener(
            new SelectionAdapter() {
              @Override
              public void widgetSelected(SelectionEvent e) {
                ((DestinationColumn) ((Button) e.getSource()).getData())
                    .setSelected(((Button) e.getSource()).getSelection());
                validateSelection();
              }
            });
        Combo languagesCombo =
            LanguagesUtil.createLanguagesCombo(
                languageToGroup, selectedLanguage, defaultLanguage, schema);
        destColumn.setLang(LanguagesUtil.getLanguageID(languagesCombo.getText()));
        languagesCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
        languagesCombo.setData(destColumn);
        languagesCombo.addSelectionListener(
            new SelectionAdapter() {
              @Override
              public void widgetSelected(SelectionEvent e) {
                String selectedText = ((Combo) e.getSource()).getText();
                if (!selectedText.equals(LanguagesUtil.getComboSeparator())) {
                  ((DestinationColumn) ((Combo) e.getSource()).getData())
                      .setLang(LanguagesUtil.getLanguageID(selectedText));
                  // update default language
                  PreferencesManager.getInstance()
                      .getProjectPreferencesManager(project)
                      .setDefaultLanguageForColumn(
                          ((DestinationColumn) ((Combo) e.getSource()).getData()).getText(),
                          LanguagesUtil.getLanguageID(selectedText));
                } else {
                  ((DestinationColumn) ((Combo) e.getSource()).getData()).setLang(null);
                }
                validateSelection();
              }
            });

        // status image
        LanguagesUtil.createImageStatus(languageToGroup, selectedLanguage);

        destinationColumns.add(destColumn);
      }
      i++;
    }

    /*
     * Select and Deselect All buttons
     */
    Composite buttonsArea = new Composite(languageToGroup, SWT.NONE);
    buttonsArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 4, 1));
    buttonsArea.setLayout(new GridLayout(2, true));

    Button selectAllButton = new Button(buttonsArea, SWT.PUSH);
    selectAllButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    selectAllButton.setText(Messages.TranslationDialog_SelectAll);
    selectAllButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent event) {
            for (DestinationColumn destColumn : destinationColumns) {
              destColumn.setSelected(true);
            }
            validateSelection();
          }
        });

    Button deselectAllButton = new Button(buttonsArea, SWT.PUSH);
    deselectAllButton.setText(Messages.TranslationDialog_DeselectAll);
    deselectAllButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
    deselectAllButton.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent event) {
            for (DestinationColumn destColumn : destinationColumns) {
              destColumn.setSelected(false);
            }
            validateSelection();
          }
        });
  }