private int getNextStamp() {
   for (SearchStringElem elem : ECGContext.getSortedSearchStringHistory()) {
     int next = Math.max(elem.getStamp() + 1, ECGContext.getSortedSearchStringHistory().size());
     return next;
   }
   return 0;
 }
  private void updateSearchHistory(String s) {
    if (s.isEmpty()) {
      return;
    }

    SearchStringElem foundElem = null;
    // first check for already containing search strings
    for (SearchStringElem elem : ECGContext.getSortedSearchStringHistory()) {
      if (elem.getSearchString().equals(s)) {
        foundElem = elem;
        break;
      }
    }

    if (foundElem != null) {
      ECGContext.getSortedSearchStringHistory().remove(foundElem);
      ECGContext.getSortedSearchStringHistory().add(new SearchStringElem(getNextStamp(), s));
    } else {
      // no containing search strings
      SearchStringElem elem = new SearchStringElem(getNextStamp(), s);
      ECGContext.getSortedSearchStringHistory().add(elem);
    }
  }
  @Override
  protected Control createDialogArea(Composite parent) {
    getShell().setImage(Activator.getImage(Activator.IMAGE_GREP_CONSOLE_24));

    composite = (Composite) super.createDialogArea(parent);
    GridLayout gridLayout = (GridLayout) composite.getLayout();
    gridLayout.numColumns = 3;

    lblHint = new Label(composite, SWT.NONE);
    lblHint.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
    new Label(composite, SWT.NONE);

    Label lblInputConsole = new Label(composite, SWT.NONE);
    lblInputConsole.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
    lblInputConsole.setText(Messages.ConsoleConfigDialog_SourceConsole);
    new Label(composite, SWT.NONE);

    consoleList = new List(composite, SWT.BORDER);
    GridData gd_list = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1);
    gd_list.heightHint = 68;
    gd_list.widthHint = 344;
    consoleList.setLayoutData(gd_list);

    lblContainingText = new Label(composite, SWT.NONE);
    lblContainingText.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
    updateLblText();

    Menu menu = new Menu(composite);
    MenuItem menuItem = new MenuItem(menu, SWT.NONE);
    menuItem.setText(Messages.ConsoleConfigDialog_RemoveEntries);
    menuItem.addSelectionListener(
        new SelectionAdapter() {
          @Override
          public void widgetSelected(SelectionEvent e) {
            ECGContext.getSortedSearchStringHistory().clear();
            containingText.setItems(new String[0]);
            containingEndText.setItems(new String[0]);
          }
        });
    lblContainingText.setMenu(menu);
    lblContainingEndText = new Label(composite, SWT.NONE);
    lblContainingEndText.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
    lblContainingEndText.setMenu(menu);
    new Label(composite, SWT.NONE);

    containingText = new CCombo(composite, SWT.BORDER);
    GridData gd_text = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_text.widthHint = 393;
    containingText.setLayoutData(gd_text);
    if (!ECGContext.getSortedSearchStringHistory().isEmpty()) {
      for (SearchStringElem elem : ECGContext.getSortedSearchStringHistory()) {
        containingText.add(elem.getSearchString());
      }
    }
    containingText.setTextLimit(MAX_SEARCH_STRING_LENGTH);

    containingEndText = new CCombo(composite, SWT.BORDER);
    gd_endText = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
    gd_endText.widthHint = 0;
    containingEndText.setLayoutData(gd_endText);
    if (!ECGContext.getSortedSearchStringHistory().isEmpty()) {
      for (SearchStringElem elem : ECGContext.getSortedSearchStringHistory()) {
        containingEndText.add(elem.getSearchString());
      }
    }
    containingEndText.setTextLimit(MAX_SEARCH_STRING_LENGTH);
    containingEndText.setVisible(false);

    btnSetEndMarker = new Button(composite, SWT.CHECK);
    btnSetEndMarker.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1));
    btnSetEndMarker.setText(Messages.ConsoleConfigDialog_RangeMatching);

    btnCaseSensitive = new Button(composite, SWT.CHECK);
    btnCaseSensitive.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
    btnCaseSensitive.setText(Messages.ConsoleConfigDialog_CaseSensitive);

    btnWholeWord = new Button(composite, SWT.CHECK);
    btnWholeWord.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
    btnWholeWord.setText(Messages.ConsoleConfigDialog_WholeWord);

    btnRegualarExpression = new Button(composite, SWT.CHECK);
    GridData gd_btnRegualarExpression = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1);
    gd_btnRegualarExpression.widthHint = 235;
    btnRegualarExpression.setLayoutData(gd_btnRegualarExpression);
    btnRegualarExpression.setText(Messages.ConsoleConfigDialog_RegularExpression);

    btnNotMatching = new Button(composite, SWT.CHECK);
    btnNotMatching.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
    btnNotMatching.setText(Messages.ConsoleConfigDialog_NotMatching);

    new Label(composite, SWT.NONE);

    if (createNew) {
      loadConsoles();
      // consoleList.setEnabled(true);
      getShell()
          .setText(
              Activator.GREP_CONSOLE_NAME
                  + ": "
                  + Messages.ConsoleConfigDialog_NewConsole); // $NON-NLS-1$
      lblHint.setText(Messages.ConsoleConfigDialog_CreateNewGrepConsole);
      consoleList.setFocus();
    } else {
      if (ecgModel.isSourceDisposed()) {
        // add current because it is no more in the list caused of disposal.
        consoleList.add(
            Messages.GrepConsole_SourceConsoleDisposed + ecgModel.getSource().getName());
      }
      loadConsoles();
      getShell()
          .setText(
              Activator.GREP_CONSOLE_NAME + ": " + ecgModel.getSource().getName()); // $NON-NLS-1$
      lblHint.setText(Messages.ConsoleConfigDialog_EditCurrentConsole);
      containingText.setFocus();
    }

    initDataBindings().updateModels();

    updateRangeMatchingArrangement();

    return composite;
  }