Example #1
0
void RoutineView::HandleEvent(TEvent& Event) {
  int resetSearch = 1;

  EModel::HandleEvent(Event);

  switch (Event.What) {
  case evKeyUp:
    resetSearch = 0;
    break;

  case evKeyDown:

    switch (kbCode(Event.Key.Code)) {
    case kbBackSp:
      resetSearch = 0;

      if (SearchLen > 0) {
        SearchString[--SearchLen] = 0;
        Row                       = SearchPos[SearchLen];
        Msg(S_INFO, "Search: [%s]", SearchString);
      } else Msg(S_INFO, "");
      break;

    case kbEsc:
        Msg(S_INFO, "");
      break;

    default:
      resetSearch = 0;

      if (isAscii(Event.Key.Code) && (SearchLen < MAXISEARCH)) {
        char Ch = (char)Event.Key.Code;

        SearchPos[SearchLen]      = Row;
        SearchString[SearchLen]   = Ch;
        SearchString[++SearchLen] = 0;
        int i = GetMatchingLine(Row, 1);

        if (i == -1) SearchString[--SearchLen] = 0;
        else Row = i;
        Msg(S_INFO, "Search: [%s]", SearchString);
      }
      break;
    }
  }

  if (resetSearch) {
    SearchLen = 0;
  }
}
Example #2
0
int BufferView::ExecCommand(int Command, ExState &State) {

    switch (Command) {
    case ExCloseActivate: {
        EModel *B;

        CancelSearch();
        B = GetBufferById(Row);
        if (B && B != this) {
            View->SwitchToModel(B);
            delete this;
            return ErOK;
        }
    }
    return ErFAIL;
    case ExBufListFileClose: {
        EModel *B = GetBufferById(Row);

        CancelSearch();
        if (B && B != this && Count > 1) {
            if (B->ConfQuit(View->MView->Win)) {
                View->DeleteModel(B);
            }
            UpdateList();
            return ErOK;
        }
    }
    return ErFAIL;
    case ExBufListFileSave: {
        EModel *B = GetBufferById(Row);

        if (B && B->GetContext() == CONTEXT_FILE)
            if (((EBuffer *)B)->Save())
                return ErOK;
    }
    return ErFAIL;

    case ExActivateInOtherWindow: {
        EModel *B = GetBufferById(Row);

        CancelSearch();
        if (B) {
            View->Next->SwitchToModel(B);
            return ErOK;
        }
    }
    return ErFAIL;
    case ExBufListSearchCancel:
        CancelSearch();
        return ErOK;
    case ExBufListSearchNext:
        // Find next matching line
        if (SearchLen) {
            int i = Row + 1;
            i = GetMatchingLine(i == BCount ? 0 : i, 1);
            // Never returns -1 since something already found before call
            Row = SearchPos[SearchLen] = i;
        }
        return ErOK;
    case ExBufListSearchPrev:
        // Find prev matching line
        if (SearchLen) {
            int i = Row - 1;
            i = GetMatchingLine(i == -1 ? BCount - 1 : i, -1);
            // Never returns -1 since something already found before call
            Row = SearchPos[SearchLen] = i;
        }
        return ErOK;
    }

    return EList::ExecCommand(Command, State);
}