// Добавляет кнопку справа от элемента RelativeTo. T *AddButtonAfter(T *RelativeTo, int LabelId) { T *Item = AddDialogItem(DI_BUTTON, GetLangString(LabelId)); Item->Y1 = Item->Y2 = RelativeTo->Y1; Item->X1 = RelativeTo->X1 + ItemWidth(*RelativeTo) - 1 + 2; DialogItemBinding<T> *Binding = FindBinding(RelativeTo); if (Binding) Binding->AfterLabelID = GetItemID(Item); return Item; }
// Добавляет указанную текстовую строку справа от элемента RelativeTo. T *AddTextAfter(T *RelativeTo, const wchar_t* Label, int skip=1) { T *Item = AddDialogItem(DI_TEXT, Label); Item->Y1 = Item->Y2 = RelativeTo->Y1; Item->X1 = RelativeTo->X1 + ItemWidth(*RelativeTo) + skip; DialogItemBinding<T> *Binding = FindBinding(RelativeTo); if (Binding) Binding->AfterLabelID = GetItemID(Item); return Item; }
// Добавляет указанную текстовую строку слева от элемента RelativeTo. T *AddTextBefore(T *RelativeTo, int LabelId) { T *Item = AddDialogItem(DI_TEXT, GetLangString(LabelId)); Item->Y1 = Item->Y2 = RelativeTo->Y1; Item->X1 = 5 + m_Indent; Item->X2 = Item->X1 + ItemWidth(*Item) - 1; intptr_t RelativeToWidth = RelativeTo->X2 - RelativeTo->X1; RelativeTo->X1 = Item->X2 + 2; RelativeTo->X2 = RelativeTo->X1 + RelativeToWidth; DialogItemBinding<T> *Binding = FindBinding(RelativeTo); if (Binding) Binding->BeforeLabelID = GetItemID(Item); return Item; }
void DialogBuilder::LinkFlags(DialogItemEx *Parent, DialogItemEx *Target, FarDialogItemFlags Flags, bool LinkLabels) { Parent->Flags |= DIF_AUTOMATION; Parent->AddAutomation(Target->ID, Flags, DIF_NONE, DIF_NONE, Flags, DIF_NONE, DIF_NONE); if (!Parent->Selected) Target->Flags |= Flags; if (LinkLabels) { DialogItemBinding<DialogItemEx> *Binding = FindBinding(Target); if (Binding) { LinkFlagsByID(Parent, Binding->BeforeLabelID, Flags); LinkFlagsByID(Parent, Binding->AfterLabelID, Flags); } } }
void DialogBuilder::LinkFlags(DialogItemEx *Parent, DialogItemEx *Target, FARDIALOGITEMFLAGS Flags, bool LinkLabels) { Parent->Flags |= DIF_AUTOMATION; Parent->AddAutomation(Target, Flags, DIF_NONE, DIF_NONE, Flags, DIF_NONE, DIF_NONE); if (!Parent->Selected) Target->Flags |= Flags; if (LinkLabels) { if (const auto Binding = FindBinding(Target)) { if (Binding->BeforeLabelID != -1) LinkFlagsByID(Parent, &m_DialogItems[Binding->BeforeLabelID], Flags); if (Binding->AfterLabelID != -1) LinkFlagsByID(Parent, &m_DialogItems[Binding->AfterLabelID], Flags); } } }
void CInput::EventProcess(Event& event) { if (event.type == EVENT_KEY_DOWN || event.type == EVENT_KEY_UP) { // Use the occasion to update kmods m_kmodState = event.kmodState; } // Use the occasion to update mouse button state if (event.type == EVENT_MOUSE_BUTTON_DOWN) { auto data = event.GetData<MouseButtonEventData>(); m_mouseButtonsState |= data->button; } if (event.type == EVENT_MOUSE_BUTTON_UP) { auto data = event.GetData<MouseButtonEventData>(); m_mouseButtonsState &= ~data->button; } if (event.type == EVENT_KEY_DOWN || event.type == EVENT_KEY_UP) { auto data = event.GetData<KeyEventData>(); data->slot = FindBinding(data->key); } event.kmodState = m_kmodState; event.mousePos = m_mousePos; event.mouseButtonsState = m_mouseButtonsState; if (event.type == EVENT_KEY_DOWN || event.type == EVENT_KEY_UP) { auto data = event.GetData<KeyEventData>(); m_keyPresses[data->slot] = (event.type == EVENT_KEY_DOWN); } /* Motion vector management */ if (event.type == EVENT_KEY_DOWN && !(event.kmodState & KEY_MOD(ALT) ) ) { auto data = event.GetData<KeyEventData>(); if (data->slot == INPUT_SLOT_UP ) m_keyMotion.y = 1.0f; if (data->slot == INPUT_SLOT_DOWN ) m_keyMotion.y = -1.0f; if (data->slot == INPUT_SLOT_LEFT ) m_keyMotion.x = -1.0f; if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 1.0f; if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 1.0f; if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = -1.0f; if (data->slot == INPUT_SLOT_CAMERA_UP ) m_cameraKeyMotion.z = 1.0f; if (data->slot == INPUT_SLOT_CAMERA_DOWN) m_cameraKeyMotion.z = -1.0f; if (data->key == KEY(KP_4) ) m_cameraKeyMotion.x = -1.0f; if (data->key == KEY(KP_6) ) m_cameraKeyMotion.x = 1.0f; if (data->key == KEY(KP_8) ) m_cameraKeyMotion.y = 1.0f; if (data->key == KEY(KP_2) ) m_cameraKeyMotion.y = -1.0f; } else if (event.type == EVENT_KEY_UP) { auto data = event.GetData<KeyEventData>(); if (data->slot == INPUT_SLOT_UP ) m_keyMotion.y = 0.0f; if (data->slot == INPUT_SLOT_DOWN ) m_keyMotion.y = 0.0f; if (data->slot == INPUT_SLOT_LEFT ) m_keyMotion.x = 0.0f; if (data->slot == INPUT_SLOT_RIGHT) m_keyMotion.x = 0.0f; if (data->slot == INPUT_SLOT_GUP ) m_keyMotion.z = 0.0f; if (data->slot == INPUT_SLOT_GDOWN) m_keyMotion.z = 0.0f; if (data->slot == INPUT_SLOT_CAMERA_UP ) m_cameraKeyMotion.z = 0.0f; if (data->slot == INPUT_SLOT_CAMERA_DOWN) m_cameraKeyMotion.z = 0.0f; if (data->key == KEY(KP_4) ) m_cameraKeyMotion.x = 0.0f; if (data->key == KEY(KP_6) ) m_cameraKeyMotion.x = 0.0f; if (data->key == KEY(KP_8) ) m_cameraKeyMotion.y = 0.0f; if (data->key == KEY(KP_2) ) m_cameraKeyMotion.y = 0.0f; } else if (event.type == EVENT_JOY_AXIS) { auto data = event.GetData<JoyAxisEventData>(); if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_X).axis) { m_joyMotion.x = Math::Neutral(data->value / 32768.0f, m_joystickDeadzone); if (GetJoyAxisBinding(JOY_AXIS_SLOT_X).invert) m_joyMotion.x *= -1.0f; } if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_Y).axis) { m_joyMotion.y = -Math::Neutral(data->value / 32768.0f, m_joystickDeadzone); if (GetJoyAxisBinding(JOY_AXIS_SLOT_Y).invert) m_joyMotion.y *= -1.0f; } if (data->axis == GetJoyAxisBinding(JOY_AXIS_SLOT_Z).axis) { m_joyMotion.z = -Math::Neutral(data->value / 32768.0f, m_joystickDeadzone); if (GetJoyAxisBinding(JOY_AXIS_SLOT_Z).invert) m_joyMotion.z *= -1.0f; } } event.motionInput = Math::Clamp(m_joyMotion + m_keyMotion, Math::Vector(-1.0f, -1.0f, -1.0f), Math::Vector(1.0f, 1.0f, 1.0f)); event.cameraInput = m_cameraKeyMotion; }