Ejemplo n.º 1
0
HANDLE WINAPI OpenW(const OpenInfo *OInfo)
{
	static FarDialogItem DlgItems[]={
		/* 0*/  {DI_DOUBLEBOX,2, 1,37, 5, {0},NULL      ,NULL      ,0                                ,GetMsg(MTitle)},
		/* 1*/  {DI_EDIT     ,4, 2,34, 2, {1},PluginName,NULL      ,DIF_HISTORY                      ,L""},
		/* 2*/  {DI_CHECKBOX ,4, 3, 0, 0, {0},0         ,NULL      ,0                                ,GetMsg(MCase)},
		/* 3*/  {DI_BUTTON   ,0, 4, 0, 0, {0},0         ,NULL      ,DIF_CENTERGROUP|DIF_DEFAULTBUTTON,GetMsg(MOk)},
		/* 4*/  {DI_BUTTON   ,0, 4, 0, 0, {0},0         ,NULL      ,DIF_CENTERGROUP                  ,GetMsg(MCancel)}
	};

	CFarSettings settings(PluginId);
	bPrevCaseSensitive = settings.Get(L"CaseSensitive", false);
	DlgItems[ixCaseSensitive].Selected = bPrevCaseSensitive ? 1 : 0;
	HANDLE hEdit = Info.DialogInit(&PluginId, &DialogId,
		-1, -1, 40, 7,
		PluginName,
		DlgItems, ArraySize(DlgItems),
		0, 0,
		MyDlgProc, 0);
	if (hEdit == INVALID_HANDLE_VALUE)
		return INVALID_HANDLE_VALUE;

	EditorInfo einfo = {sizeof(EditorInfo)};
	Info.EditorControl(-1, ECTL_GETINFO, 0, &einfo);
	InitialLine = einfo.CurLine;
	InitialCol = einfo.CurPos;
	InitialTop = einfo.TopScreenLine;
	TotalLines = einfo.TotalLines;

	nChanges = 0;
	bSequentialInput = true;
	bLineChanged = false;
	ctx = SearchAlloc();

	if (Info.DialogRun(hEdit)!=ixOk)
		UndoAll();

	RemoveHighlight();

	settings.Set(L"CaseSensitive", bPrevCaseSensitive);

	Info.DialogFree(hEdit);
	if (Length(PrevPattern)<MAX_PATTERN_LEN)
		SearchFree(ctx);
	else
		SearchHFree(ctx);
	SetLength(&PrevPattern,0);

	return INVALID_HANDLE_VALUE;
}
Ejemplo n.º 2
0
ECode CCandidateView::OnTouchEvent(
    /* [in] */ IMotionEvent* event,
    /* [out] */ Boolean* res)
{
    VALIDATE_NOT_NULL(res);
    Boolean tmp = FALSE;
    if (mGestureDetector->OnTouchEvent(event, &tmp), tmp) {
        *res = TRUE;
        return NOERROR;
    }

    Int32 action = 0, x = 0, y = 0;
    event->GetAction(&action);
    Float fx, fy;
    event->GetX(&fx);
    event->GetY(&fy);
    x = (Int32)fx;
    y = (Int32)fy;
    mTouchX = x;

    switch (action) {
    case IMotionEvent::ACTION_DOWN:
        mScrolled = FALSE;
        Invalidate();
        break;
    case IMotionEvent::ACTION_MOVE:
        if (y <= 0) {
            // Fling up!?
            if (mSelectedIndex >= 0) {
                mService->PickSuggestionManually(mSelectedIndex);
                mSelectedIndex = -1;
            }
        }
        Invalidate();
        break;
    case IMotionEvent::ACTION_UP:
        if (!mScrolled) {
            if (mSelectedIndex >= 0) {
                mService->PickSuggestionManually(mSelectedIndex);
            }
        }
        mSelectedIndex = -1;
        RemoveHighlight();
        RequestLayout();
        break;
    }
    *res = TRUE;
    return NOERROR;
}
Ejemplo n.º 3
0
void TextField::OnFocusLost()
{
    UIManager::GetInstance().DirtyRenderList(mHwndId);
    auto mani = UIManager::GetInstance().GetTextManipulator();
    auto propertyList = IsInPropertyList();
    if (propertyList)
    {
        auto parent = GetParent();
        assert(parent && parent->GetType() == ComponentType::ListItem);
        ListItem* valueItem = (ListItem*)parent.get();
        auto index = valueItem->GetRowIndex();
        propertyList->RemoveHighlight(index);
        auto uiEditor = UIManager::GetInstance().GetUIEditor();
        auto editingUI = uiEditor->GetCurSelected();
        std::string key, value;
        propertyList->GetCurKeyValue(key, value);
        if (editingUI)
        {
            char buf[UIManager::PROPERTY_BUF_SIZE] = { 0 };
            auto prop = UIProperty::IsUIProperty(key.c_str());
            if (prop != UIProperty::COUNT) {
                auto got = editingUI->GetProperty(prop, buf, UIManager::PROPERTY_BUF_SIZE, false);
                if (got)
                    SetText(AnsiToWide(buf));
            }
            else {
                auto e = UIEvents::IsUIEvents(key.c_str());
                if (e != UIEvents::EVENT_NUM) {
                    auto szEvent = editingUI->GetEvent(e);
                    editingUI->SetEvent(e, szEvent);
                }
            }
        }
    }
    mani->SetText(0);
    mani->RemoveObserver(ITextManipulatorObserver::Default, std::dynamic_pointer_cast<ITextManipulatorObserver>(mSelfPtr.lock()));
    TriggerRedraw();
}
Ejemplo n.º 4
0
static void Filter(const wchar_t *sFilter, bool bCaseSensitive)
{
	if (sFilter!=NULL) {
		size_t nFilter = wcslen(sFilter);
		if (nFilter>0xFFFF) nFilter = 0xFFFF;
		wchar_t *sFilterLower=NULL;
		EditorUndoRedo eur = {sizeof(EditorUndoRedo)};
		EditorSetPosition es = {sizeof(EditorSetPosition)};
		char *Lines; //маска удалённых строк

		Lines = MakeLineMask();
		StackPush(Lines);

		if (nFilter<=MAX_PATTERN_LEN) {
			SearchPrepare(ctx, sFilter, bCaseSensitive);
		}
		else {
			SearchHPrepare(ctx, sFilter, (WORD)nFilter, bCaseSensitive);
			if (!bCaseSensitive) {
				SetLength(&sFilterLower, (int)nFilter);
				wcscpy(sFilterLower, sFilter);
				CharLower(sFilterLower);
			}
		}
		//непустой фильтр - создаём блок Undo и меняем текст внутри него
		eur.Command=EUR_BEGIN;
		Info.EditorControl(-1, ECTL_UNDOREDO, 0, &eur);

		//ищем текст из диалога в каждой строке
		EditorInfo einfo = {sizeof(EditorInfo)};
		Info.EditorControl(-1, ECTL_GETINFO, 0, &einfo);
		intptr_t nLines = einfo.TotalLines;
		intptr_t line = nLines;
		es.CurPos = 0;
		es.CurTabPos = es.LeftPos = es.Overtype = es.TopScreenLine = -1;
		while (--line>=0) {
			es.CurLine = line;
			Info.EditorControl(-1, ECTL_SETPOSITION, 0, &es);

			EditorGetString egs = {sizeof(EditorGetString), -1};
			Info.EditorControl(-1, ECTL_GETSTRING, 0, &egs);
			const wchar_t *found;
			if (nFilter <= MAX_PATTERN_LEN)
				found = Search(ctx, egs.StringText);
			else
				found = SearchH(ctx,
					bCaseSensitive ? sFilter : sFilterLower,
					(WORD)nFilter,
					egs.StringText,
					egs.StringLength,
					bCaseSensitive);
			if (found==NULL) {
				Info.EditorControl(-1, ECTL_DELETESTRING, 0, NULL);
				MarkDeletedLine(Lines, line);
			}
		}

		es.CurLine = 0;
		es.CurPos = 0;
		es.TopScreenLine = 0;
		es.CurTabPos = es.LeftPos = es.Overtype = -1;
		Info.EditorControl(-1, ECTL_SETPOSITION, 0, &es);

		RemoveHighlight();

		eur.Command=EUR_END;
		Info.EditorControl(-1, ECTL_UNDOREDO, 0, &eur);

		nChanges++;
		if (nFilter<=MAX_PATTERN_LEN) {
			SearchUnprepare(ctx,sFilter,bCaseSensitive);
		}
		else {
			if (!bCaseSensitive)
				SetLength(&sFilterLower, 0);
		}
	}
}