Example #1
0
//intercept return key and map it to the tab key so the dialog doesnt exit
bool CEditNetDlg::eventFilter(QObject* o, QEvent* e)
{
	if (e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease)
	{
		QKeyEvent* ke = (QKeyEvent*)e;
		if (ke->key() == Qt::Key_Return || ke->key() == Qt::Key_Enter)
		{
			QKeyEvent rep(ke->type(), Qt::Key_Tab, Qt::NoModifier, QString::null, ke->isAutoRepeat(), ke->count());
			*ke = rep;
		}
	}
	return QDialog::eventFilter(o, e);
}
void
DBusInputContextConnection::sendKeyEvent(const QKeyEvent &keyEvent,
                                         Maliit::EventRequestType requestType)
{
    if (activeConnection) {
        MInputContextConnection::sendKeyEvent(keyEvent, requestType);

        ComMeegoInputmethodInputcontext1Interface *proxy = mProxys.value(activeConnection);
        if (proxy) {
            proxy->keyEvent(keyEvent.type(), keyEvent.key(), keyEvent.modifiers(),
                            keyEvent.text(), keyEvent.isAutoRepeat(), keyEvent.count(), requestType);
        }
    }
}
Example #3
0
bool Window::eventFilter(QObject*, QEvent* event) {
	if (event->type() != QEvent::KeyPress) {
		return false;
	}

	QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
	if (keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down) {
		QKeyEvent* newEvent = new QKeyEvent(
			keyEvent->type(), keyEvent->key(), keyEvent->ascii(),
			keyEvent->state(), keyEvent->text());
		QApplication::postEvent(mView, newEvent);
		return true;
	}

	return false;
}
bool QtKeyEventProvider::eventFilter(QObject * obj, QEvent * event)
{
    if (event->type() == QEvent::KeyPress ||
        event->type() == QEvent::KeyRelease)
    {
        QKeyEvent * qKeyEvent = dynamic_cast<QKeyEvent*>(event);
        if (qKeyEvent) {
            auto eventType = QtEventTransformer::keyboardTypeFromQtType(qKeyEvent->type());
            auto key = QtEventTransformer::fromQtKeyCode(qKeyEvent->key(), qKeyEvent->modifiers());
            KeyboardEvent * keyEvent = new KeyboardEvent(eventType
                , key, qKeyEvent->nativeScanCode(), qKeyEvent->modifiers());
            passEvent(keyEvent);
            return false;
        }
    }
    return QObject::eventFilter(obj, event);
}
Example #5
0
Qt::KeyboardModifiers ShortcutDialog::getModifiers(const QKeyEvent &event)
{
    int key = event.key();
    Qt::KeyboardModifiers mods = event.modifiers();

    if (key == Qt::Key_Meta || key == Qt::Key_Super_L || key == Qt::Key_Super_R
            || key == Qt::Key_Hyper_L || key == Qt::Key_Hyper_R)
    {
        m_metaPressed = (event.type() == QEvent::KeyPress);
        COPYQ_LOG(QString("Shortcut \"Meta\" key %1.").arg(m_metaPressed ? "pressed" : "released"));
    }
    if (m_metaPressed)
        mods |= Qt::MetaModifier;
    else
        mods &= ~Qt::MetaModifier;

    return mods;
}
bool QComposeInputContext::filterEvent(const QEvent *event)
{
    // if there were errors when generating the compose table input
    // context should not try to filter anything, simply return false
    if ((m_tableState & TableGenerator::NoErrors) != TableGenerator::NoErrors)
        return false;

    QKeyEvent *keyEvent = (QKeyEvent *)event;
    // should pass only the key presses
    if (keyEvent->type() != QEvent::KeyPress) {
        return false;
    }

    int keyval = keyEvent->key();
    int keysym = 0;

    if (ignoreKey(keyval))
        return false;

    QString text = keyEvent->text();
    if (!composeKey(keyval) && text.isEmpty())
        return false;

    keysym = keyEvent->nativeVirtualKey();

    int nCompose = 0;
    while (m_composeBuffer[nCompose] != 0 && nCompose < QT_KEYSEQUENCE_MAX_LEN)
        nCompose++;

    if (nCompose == QT_KEYSEQUENCE_MAX_LEN) {
        reset();
        nCompose = 0;
    }

    m_composeBuffer[nCompose] = keysym;
    // check sequence
    if (checkComposeTable())
        return true;

    return false;
}
void MInputContextConnection::sendKeyEvent(const QKeyEvent &keyEvent,
                                           Maliit::EventRequestType requestType)
{
    if (requestType != Maliit::EventRequestSignalOnly
        && preedit.isEmpty()
        && keyEvent.key() == Qt::Key_Backspace
        && keyEvent.type() == QEvent::KeyPress) {
        QString surrString(widgetState[SurroundingTextAttribute].toString());
        const int cursorPosition(widgetState[CursorPositionAttribute].toInt());
        bool validAnchor(false);

        if (!surrString.isEmpty()
            && cursorPosition > 0
            // we don't support selections
            && anchorPosition(validAnchor) == cursorPosition
            && validAnchor) {
            widgetState[SurroundingTextAttribute] = surrString.remove(cursorPosition - 1, 1);
            widgetState[CursorPositionAttribute] = cursorPosition - 1;
            widgetState[AnchorPositionAttribute] = cursorPosition - 1;
        }
    }
}
//------------------------------------------------------------------------------
bool IgnoreUndoRedo::eventFilter(QObject* watched, QEvent* event)
{
	if (event->type() == QEvent::KeyPress)
	{
		QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
		if (keyEvent->matches(QKeySequence::Undo)
			|| keyEvent->matches(QKeySequence::Redo))
		{
			QCoreApplication::postEvent(recipient, new QKeyEvent(
				keyEvent->type(), keyEvent->key(), keyEvent->modifiers(),
				keyEvent->nativeScanCode(), keyEvent->nativeVirtualKey(),
				keyEvent->nativeModifiers(), keyEvent->text(),
				keyEvent->isAutoRepeat(), keyEvent->count()
			));
			return true;
		}
		else
		{
			return false;
		}
	}
	else
		return QObject::eventFilter(watched, event);
}
Example #9
0
int ShortcutDialog::getModifiers(const QKeyEvent &event)
{
    int key = event.key();
    const Qt::KeyboardModifiers mods = event.modifiers();
    int result = 0;

    if (key == Qt::Key_Meta || key == Qt::Key_Super_L || key == Qt::Key_Super_R
            || key == Qt::Key_Hyper_L || key == Qt::Key_Hyper_R)
    {
        m_metaPressed = (event.type() == QEvent::KeyPress);
        COPYQ_LOG(QString("Shortcut \"Meta\" key %1.").arg(m_metaPressed ? "pressed" : "released"));
    }

    if (mods & Qt::ShiftModifier)
        result |= Qt::SHIFT;
    if (mods & Qt::ControlModifier)
        result |= Qt::CTRL;
    if (mods & Qt::AltModifier)
        result |= Qt::ALT;
    if (m_metaPressed || mods & Qt::MetaModifier)
        result |= Qt::META;

    return result;
}
Example #10
0
bool TestFramework::eventFilter(QObject* obj, QEvent* e) 
{
	if (test_running_)
	{
//   		if (e == last_event_) return false;
//   		last_event_ = e;

		bool stop = false;
		if (e->type() == QEvent::KeyPress)
		{
			QKeyEvent* ke = dynamic_cast<QKeyEvent*>(e);
			// pause macro if pause key is pressed
			if (ke->key() == Qt::Key_Pause) stop = true;
			else if (ke->key() == Qt::Key_X && ke->modifiers() == Qt::AltModifier)
			{
				// if a user presses Alt-X: quit immediately
				abortTest();
				getMainControl()->quit(0);
				return true;
			}
		}
		else if (e->type() == QEvent::MouseButtonPress ||
						 e->type() == QEvent::MouseButtonRelease)
		{
			// abort macro if user presses mouse button:
			if (!RTTI::isKindOf<MyMouseEvent>(*e) && e->spontaneous())
			{
 				stop = true;
			}
		}
		else
		{
			return false;
		}

		if (stop)
		{
			abortTest();
			qApp->installEventFilter(this);
			return true;
		}

		return false;
	}
	
	// if test is paused and pause key is pressed->resume macro
	if (!recording_ && e->type() == QEvent::KeyPress && lines_.size() > 0)
	{
		QKeyEvent* ke = dynamic_cast<QKeyEvent*>(e);
		if (ke->key() == Qt::Key_Pause)
		{
			processEvent_();
			timer_.reset();
			timer_.start();
			test_running_ = true;
			thread_.start();
			return true;
		}

		return false;
	}

	if (!recording_) return false;

	if (!RTTI::isKindOf<QKeyEvent>(*e) &&
			!RTTI::isKindOf<QMouseEvent>(*e) &&
			!RTTI::isKindOf<QShortcutEvent>(*e))
	{
		return false;
	}

	if (e->type() == QEvent::ShortcutOverride) return false;
 	if (e->type() == QEvent::KeyRelease) return false;
	QMouseEvent* 		me = dynamic_cast<QMouseEvent*>(e);
	QKeyEvent* 			ke = dynamic_cast<QKeyEvent*>(e);
	QShortcutEvent* se = dynamic_cast<QShortcutEvent*>(e);

	if (ke != 0 && 
			ke->type() == QEvent::KeyPress &&
			ke->key() == Qt::Key_Pause)
	{
		stopTest();
		return false;
	}

	///////////////////////////////////////////////////////
	// uniquely identify the active widget:
	// walk up the QObject tree and collect all names of QWidgets
	///////////////////////////////////////////////////////
	
	// take the sending object
 	QObject* o = obj;
	QObject* parent = 0;
	x_ = y_ = 0;

	// for mouse events: take widget under the mouse cursor
	if (me != 0) 
	{
		widget_ = qApp->widgetAt(me->globalPos());
		if (widget_ == 0) return false;
		if (widget_->objectName() == "" &&
				widget_->actions().size() == 0)
		{
			widget_ = dynamic_cast<QWidget*>(widget_->parent());
			if (widget_ == 0 || widget_->objectName() == "") return false;
		}
		o = widget_;

		QPoint global = me->globalPos();
		// if we can not get local coordinates: abort
 		QPoint local = widget_->mapFromGlobal(global);
		if (local.x() < 0 || local.y() < 0 ||
				local.x() >= widget_->width() || local.y() >= widget_->height()) 
		{
			return false;
		}

		// for menus: take the position of the action under the cursor
		QMenu* menu = dynamic_cast<QMenu*>(o);
		if (menu)
		{
			QAction* action = menu->actionAt(local);
			if (action != 0)
			{
				o = action;
				parent = menu;
				QRect rect = menu->actionGeometry(action);
				local.rx() -= rect.x();
				local.ry() -= rect.y();

				if (rect.width() == 0 || rect.height() == 0) return false;
				x_ = local.x();
				y_ = local.y();
			}
		}

		if (x_ == 0 && y_ == 0)
		{
			// take the position as percent of the widget's actual size
			if (widget_->width() == 0 || widget_->height() == 0) return false;
			x_ = local.x();
			y_ = local.y();
		}
	}

	String names;
	while (o != 0)
	{
		String name = ascii(o->objectName());
		if (name == "")
		{
			QWidget* widget = dynamic_cast<QWidget*>(o);
			if (widget != 0)
			{
				QList<QAction*> actions = widget->actions();
				if (actions.size() == 1)
				{
					name = ascii((**actions.begin()).objectName());
				}
			}
		}
		else
		{
			// if a parent has more childs with the same name: add a suffix with the number
			if (!parent) parent = o->parent();
			if (parent != 0)
			{
				QList<QWidget*> childs = parent->findChildren<QWidget*>(name.c_str());
				if (childs.size() > 1)
				{
					Position pos = 0;
					QList<QWidget*>::iterator wit = childs.begin();
					for (; wit != childs.end(); wit++)
					{
						if (*wit == o)
						{
							name += "#";
							name += String(pos);
							break;
						}

						pos++;
					}
				}
			}
		}

		if (name != "") names = name + "|" + names;
		o = o->parent();
	}


	String event_string;
	event_string += String((int)e->type()) + "|";
	event_string += String(getMainControl()->isBusy()) + "|";

	if (me != 0)
	{
		if (me->button() == Qt::NoButton &&
				!switch_move->isChecked() && 
				me->type() == QEvent::MouseMove &&	
				widget_ == last_widget_)
		{
			return false;
		}

 		last_widget_ = widget_;

		event_string += String((int)MOUSE) + "|";
		event_string += String((int) me->modifiers()) + "|";
		event_string += String((int) me->button()) + "|";
		event_string += String((int) me->buttons()) + "|";
		event_string += String(x_) + "|";
		event_string += String(y_) + "|";

		// prevent mouse move events with same position
		if (event_string == last_event_string_ &&
				names 			 == last_names_)
		{
			return false;
		}
	}
	else if (ke != 0)
	{
		// prevent accepting key events that are resend further up in the widget tree
		if (timer_.getClockTime() < 0.01) return false;

		int m = (int) ke->modifiers();
		// sometimes Qt sends nonsense Key messages
		if (m > (int)(Qt::AltModifier | Qt::ControlModifier | Qt::ShiftModifier)) return false;

		event_string += String((int)KEY) + "|";
		event_string += String(m);
		event_string += "|";
		event_string += String(ke->key()) + "|";
	}
	else if (se != 0)
	{
		event_string += String((int)SHORTCUT) + "|";
		event_string += String(se->shortcutId()) + "|";
		event_string += ascii(se->key().toString()) + "|";
	}

	float time = timer_.getClockTime();
	timer_.reset();

	outfile_ << "I°"
					 << time << "°"
					 << names << "°"
					 << event_string << std::endl;

	last_event_string_ = event_string;
	last_names_  			 = names;

	return false;
}
Example #11
0
bool WindowServerLuna::processSystemShortcut(QEvent* event)
{
	if (SystemUiController::instance()->bootFinished() &&
		(event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease)) {

		static bool symDown = false;

		QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
		switch (keyEvent->key()) {
		case Qt::Key_Control:
			symDown = keyEvent->type() == QEvent::KeyPress;
			break;

// QT5_TODO: Are these equivalent?
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
        case KEYS::Key_Power: {
#else
        case KEYS::Key_HardPower: {
#endif
			m_powerVolumeKeyComboState.powerKeyPress = (keyEvent->type() == QEvent::KeyPress);
			if (!m_powerVolumeKeyComboState.powerKeyPress) {
				cancelFullEraseCountdown();
			}
			else if (m_powerVolumeKeyComboState.msmEntryComboDown()) {
				SystemService::instance()->enterMSM();
				return true;
			}
			else if (m_powerVolumeKeyComboState.comboDown())
				return true;
			break;
		}
		case Qt::Key_VolumeDown: {
			m_powerVolumeKeyComboState.volDownKeyPress = (keyEvent->type() == QEvent::KeyPress);
			if (m_powerVolumeKeyComboState.msmEntryComboDown()) {
				SystemService::instance()->enterMSM();
				return true;
			}
			break;
		}
		case Qt::Key_VolumeUp: {
			m_powerVolumeKeyComboState.volUpKeyPress = (keyEvent->type() == QEvent::KeyPress);
			if (!m_powerVolumeKeyComboState.volUpKeyPress) {
				cancelFullEraseCountdown();
			}
			else if (m_powerVolumeKeyComboState.comboDown())
				return true;
			break;
		}
        case KEYS::Key_CoreNavi_Home: {
			bool ret = triggerFullEraseCountdown();
			if (ret) {
				// Eat up the home key event
				return true;
			}
			break;
		}
		}
/*
#if !defined(TARGET_DEVICE)
		KeyMapType key = getDetailsForQtKey(keyEvent->key(), keyEvent->modifiers());
		switch (key.qtKey) {

		case Qt::Key_D: {
			// force the device into Dock Mode
			if (symDown && (keyEvent->type() == QEvent::KeyPress) && (!SystemUiController::instance()->isInDockMode())) {
				m_displayMgr->dock();
				return true;
			}
			break;
		}

		case Qt::Key_L: {
			// force the device into Dock Mode
			if (symDown && (keyEvent->type() == QEvent::KeyPress) && (!m_displayMgr->isLocked())) {
				m_displayMgr->lock();
				return true;
			}
			break;
		}
		default:
			break;
		}
#endif*/
	}
	return WindowServer::processSystemShortcut(event);
}


QPixmap* WindowServerLuna::takeScreenShot()
{
	QPixmap* pix = new QPixmap(m_screenWidth, m_screenHeight);
	QPainter painter(pix);
	bool visibleReticle = (m_reticle ? m_reticle->isVisible() : false);
    if (visibleReticle)
    	m_reticle->setVisible(false);
	render(&painter);
	painter.end();
	if(visibleReticle)
		m_reticle->setVisible(true);
	g_message("%s",__PRETTY_FUNCTION__);
	return pix;
}

void WindowServerLuna::slotMemoryStateChanged(bool critical)
{
    g_debug("%s: %s", __PRETTY_FUNCTION__, critical ? "critical" : "non-critical");
	if (critical) {
		createMemoryAlertWindow();
	}
	else {

		if (m_memoryAlert) {
			QmlAlertWindow* win = m_memoryAlert.data();
			m_memoryAlert.clear();

			win->close();
		}
	}
}
Example #12
0
bool JointItem::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) {
        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
        int key = keyEvent->key();
        if(key == Qt::Key_Left || key == Qt::Key_Right  || key == Qt::Key_Up ||
                key == Qt::Key_Down || key == Qt::Key_PageUp || key == Qt::Key_PageDown) {

            QSlider *slider;
            QLabel *label;

            if(obj == ui->sliderPositionPosition) {
                motionDone = false;
                slider = ui->sliderPositionPosition;
                label = ui->labelPositionPosition;
                if(keyEvent->type() == QEvent::KeyPress) {
                    onSliderPositionPressed();
                }
                if(keyEvent->type() == QEvent::KeyRelease) {
                    onSliderPositionReleased();
                }
            }
            if(obj == ui->sliderPositionVelocity) {
                motionDone = false;
                slider = ui->sliderPositionVelocity;
                label = ui->labelPositionVelocity;
            }
            if(obj == ui->sliderPositionDirect) {
                motionDone = false;
                slider = ui->sliderPositionDirect;
                label = ui->labelPositionDirectPosition;
                if(keyEvent->type() == QEvent::KeyPress) {
                    onSliderPositionPressed();
                }
                if(keyEvent->type() == QEvent::KeyRelease) {
                    onSliderPositionReleased();
                }
            }
            if(obj == ui->sliderMixedPosition) {
                motionDone = false;
                slider = ui->sliderMixedPosition;
                label = ui->labelMixedPosition;
                if(keyEvent->type() == QEvent::KeyPress) {
                    onSliderPositionPressed();
                }
                if(keyEvent->type() == QEvent::KeyRelease) {
                    onSliderPositionReleased();
                }
            }
            if(obj == ui->sliderMixedVelocity) {
                slider = ui->sliderMixedVelocity;
                label = ui->labelMixedVelocity;
            }
            if(obj == ui->sliderTorqueTorque) {
                slider = ui->sliderTorqueTorque;
                label = ui->labelTorqueTorque;
                if(keyEvent->type() == QEvent::KeyPress) {
                    onSliderTorquePressed();
                }
                if(keyEvent->type() == QEvent::KeyRelease) {
                    onSliderTorqueReleased();
                }
            }
            if(obj == ui->sliderOpenloopOutput) {
                slider = ui->sliderOpenloopOutput;
                label = ui->labelOpenLoopOutput;
                if(keyEvent->type() == QEvent::KeyPress) {
                    onSliderOpenloopPressed();
                }
                if(keyEvent->type() == QEvent::KeyRelease) {
                    onSliderOpenloopReleased();
                }
            }
            if(obj == ui->sliderVelocityVelocity) {
                slider = ui->sliderVelocityVelocity;
                label = ui->labelVelocityVelocity;
                if(keyEvent->type() == QEvent::KeyPress) {
                    onSliderVelocityPressed();
                }
                if(keyEvent->type() == QEvent::KeyRelease) {
                    onSliderVelocityReleased();
                }
            }



            if(keyEvent->type() == QEvent::KeyPress) {
                if(key == Qt::Key_Left || key == Qt::Key_Down) {
                    slider->setValue(slider->value() - 1);
                }
                if(key == Qt::Key_Right || key == Qt::Key_Up) {
                    slider->setValue(slider->value() + 1);
                }
                if(key == Qt::Key_PageUp) {
                    slider->setValue(slider->value() + 10);
                }
                if(key == Qt::Key_PageDown) {
                    slider->setValue(slider->value() - 10);
                }
                if(obj == ui->sliderTorqueTorque) {
                    updateSliderTorqueLabel(slider,label,slider->value());
                } else {
                    updateSliderLabel(slider,label,slider->value());
                }
            }


            return true;
        }
        return QObject::eventFilter(obj, event);

    } else {
        // standard event processing
        return QObject::eventFilter(obj, event);
    }
}
Example #13
0
bool CoreNaviManager::handleEvent(QEvent *event) {
	if (!m_leds) {
		return false;
	}

	QKeyEvent *keyEvent = NULL;
	if (QEvent::KeyPress == event->type() || QEvent::KeyRelease == event->type()) {
		keyEvent = static_cast<QKeyEvent*> (event);
	}

#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
	if (keyEvent && keyEvent->isGestureKey()) {
#else
    if (keyEvent && keyEvent->type() == QEvent::Gesture) {
#endif
		switch (keyEvent->key()) {
        case KEYS::Key_CoreNavi_QuickLaunch:
        case KEYS::Key_CoreNavi_Launcher:
        case KEYS::Key_CoreNavi_Previous:
        case KEYS::Key_CoreNavi_Next:
        case KEYS::Key_CoreNavi_Back:
        case KEYS::Key_CoreNavi_Menu:
        case KEYS::Key_CoreNavi_SwipeDown:
        case KEYS::Key_CoreNavi_Home:
			//One shot events
			if (keyEvent->type() == QEvent::KeyPress) {
				if (m_hasLightBar) {
					renderGestureOnLightbar(keyEvent->key());
				} else {
					renderGesture(keyEvent->key());
				}
			}
			break;
        case KEYS::Key_CoreNavi_Meta:
			if (!m_hasLightBar) {
				//continous glow
				if (keyEvent->type() == QEvent::KeyPress) {
					setMetaGlow(true);
				} else {
					setMetaGlow(false);
				}
			} else {
				if (useLightbar()) {
					if (keyEvent->type() == QEvent::KeyPress && m_systemUiController->isCardWindowMaximized()
							&& !m_systemUiController->isScreenLocked()) {
						// this is just finger down in the meta area, triggering hold timer
						g_debug("Key down in core navi area, triggering lightbarHoldTimer");
						m_metaKeyDown = true;
						m_lightbarHoldTimer.start(300, true);
					} else if (keyEvent->type() == QEvent::KeyRelease) {
						m_lightbarHoldTimer.stop();
						if (!m_systemUiController->isScreenLocked() && m_systemUiController->isCardWindowMaximized()
								&& !m_allGlow && !m_lightbarSwipeLeftTimer.running()
								&& !m_lightbarSwipeRightTimer.running() && !m_lightbarRestoreTimer.running()) {
							m_metaKeyDown = false;
							g_debug("key up, setting leds back to %d", m_brightness);
							m_leds->ledSet(m_leds->All(), m_brightness);
							m_allGlow = true;
						}
					}
				}
			}
			break;
		default:
			break;
		}
	}
	return false;
}


bool CoreNaviManager::handleEvent(sptr<Event> e)
{
	return false;
}

CoreNaviManager::LedRequest::LedRequest (const std::string& appId, const std::string& requestId)
{ 
    this->appId = appId; 
    this->requestId = requestId;
}
/** Filter the Keyboard events of QLineEdit composing the widget. */
bool AustrianSocialNumberEdit::eventFilter(QObject *obj, QEvent *e)
{
    if (e->type()!=QEvent::KeyPress && e->type()!=QEvent::KeyRelease)
        return false;

    QKeyEvent *kevent = static_cast<QKeyEvent*>(e);
    if (!kevent)
        return false;

    QLineEdit *lineEdit = static_cast<QLineEdit*>(obj);
    if (!lineEdit)
        return false;

    int currentId = m_Edits.indexOf(lineEdit);
    if (currentId==-1)
        return false;
    int nextTab = -1;

    // only key release events
    if (kevent->type()==QKeyEvent::KeyPress) {
//        qWarning() << "KeyPress"  << kevent;//;->text() << kevent->key();
        switch (kevent->key()) {
        case Qt::Key_0:
        case Qt::Key_1:
        case Qt::Key_2:
        case Qt::Key_3:
        case Qt::Key_4:
        case Qt::Key_5:
        case Qt::Key_6:
        case Qt::Key_7:
        case Qt::Key_8:
        case Qt::Key_9: return false;
            if(lineEdit->cursorPosition() == lineEdit->maxLength()-1) {
                focusNextChild();
                return false;
            }
        case Qt::Key_Right:  // Ok
            if (lineEdit->cursorPosition()==lineEdit->maxLength()  // if we are at the end of the edit
                    && currentId != m_Edits.count()-1) {            // and it's not the last edit in the Widget
                focusNextChild();
            }
            return true;
        case Qt::Key_Left:
            // Manage autoRepeat keys
            if (lineEdit->cursorPosition()==0  // if we are at the beginning of the edit
                    && currentId != 0) {    // and it's not the first edit in the widget
                focusPreviousChild(); // -> go one edit left
            }
            return true;
        case Qt::Key_Backspace:
        {
            if (lineEdit->cursorPosition() == 0 // if we are at the beginning of the edit
                    && currentId != 0) {         // and it's not the first edit in the widget
                focusPreviousChild();
                return false;   // process Backspace as usual
//            if (kevent->isAutoRepeat()) {
//                int pos = lineEdit->cursorPosition();
//                removeChar(currentId, pos);
//                --pos;
//                if (pos==0) --pos;
//                setCursorPosition(currentId, pos);
            }
//            e->ignore();
            return false;
//            break;
        }
        case Qt::Key_Delete:
            if (kevent->isAutoRepeat()) {
                int pos = lineEdit->cursorPosition();
                ++pos;
                removeChar(currentId, pos);
                setCursorPosition(currentId, pos-1);
            }
            e->ignore();
            return true;
        default: return false;
        }
    }
//    else if (kevent->type()==QKeyEvent::KeyRelease) {
//        //        qWarning() << "KeyReleased"  << kevent->text() << kevent->key();

//        switch (kevent->key()) {
//        case Qt::Key_0:
//        case Qt::Key_1:
//        case Qt::Key_2:
//        case Qt::Key_3:
//        case Qt::Key_4:
//        case Qt::Key_5:
//        case Qt::Key_6:
//        case Qt::Key_7:
//        case Qt::Key_8:
//        case Qt::Key_9:
//        {
//            addChar(kevent->text(), currentId, lineEdit->cursorPosition());
//            return true;
//            break;
//        }
//        case Qt::Key_Home:
//            nextTab = 0;
//            break;
//        case Qt::Key_End:
//            nextTab = m_Edits.count()-2;
//            break;
//        case Qt::Key_Left:
////            if (l->cursorPosition()==0) {
////                setCursorPosition(currentId, -1);
//                return true;
////            }
//            break;
//        case Qt::Key_Right:
//            return true;
//            break;
//        case Qt::Key_Delete:
//        {
//            // remove char at
//            int pos = lineEdit->cursorPosition();
//            ++pos;
//            removeChar(currentId, pos);
//            setCursorPosition(currentId, pos-1);
//            return true;
//        }
//        case Qt::Key_Backspace:
//        {
//            // remove char at
//            int pos = lineEdit->cursorPosition();
//            removeChar(currentId, pos);
//            --pos;
//            if (pos==0) --pos;
//            setCursorPosition(currentId, pos);
//            return true;
//        }
//        default: return false;
//        }
//    }

    return false;
}
/** Filter the Keyboard events of QLineEdit composing the widget. */
bool FrenchSocialNumber::eventFilter(QObject *o, QEvent *e)
{
    if (e->type()!=QEvent::KeyPress && e->type()!=QEvent::KeyRelease)
        return false;

    QKeyEvent *kevent = static_cast<QKeyEvent*>(e);
    if (!kevent)
        return false;

    QLineEdit *l = static_cast<QLineEdit*>(o);
    if (!l)
        return false;

    int currentId = m_Edits.indexOf(l);
    if (currentId==-1)
        return false;
    int nextTab = -1;

    // only key release events
    if (kevent->type()==QKeyEvent::KeyPress) {
//        qWarning() << "KeyPress"  << kevent;//;->text() << kevent->key();
        switch (kevent->key()) {
        case Qt::Key_0:
        case Qt::Key_1:
        case Qt::Key_2:
        case Qt::Key_3:
        case Qt::Key_4:
        case Qt::Key_5:
        case Qt::Key_6:
        case Qt::Key_7:
        case Qt::Key_8:
        case Qt::Key_9:
        case Qt::Key_A:
        case Qt::Key_B:
            // no management of auto-repeat
            e->ignore();
            return true;
        case Qt::Key_Left:
            // Manage autoRepeat keys
            if (l->cursorPosition()==0)
                setCursorPosition(currentId, -1);
            break;
        case Qt::Key_Right:  // Ok
            if (l->cursorPosition()==m_NbChars.at(currentId)) {
                nextTab = currentId+1;
                if (nextTab >= m_Edits.count())
                    return true;
                setCursorPosition(nextTab, 0);
                return true;
            }
            break;
        case Qt::Key_Backspace:
        {
            if (kevent->isAutoRepeat()) {
                int pos = l->cursorPosition();
                removeChar(currentId, pos);
                --pos;
                if (pos==0) --pos;
                setCursorPosition(currentId, pos);
            }
            e->ignore();
            return true;
            break;
        }
        case Qt::Key_Delete:
            if (kevent->isAutoRepeat()) {
                int pos = l->cursorPosition();
                ++pos;
                removeChar(currentId, pos);
                setCursorPosition(currentId, pos-1);
            }
            e->ignore();
            return true;
        default: return false;
        }
    } else if (kevent->type()==QKeyEvent::KeyRelease) {
        //        qWarning() << "KeyReleased"  << kevent->text() << kevent->key();

        switch (kevent->key()) {
        case Qt::Key_0:
        case Qt::Key_1:
        case Qt::Key_2:
        case Qt::Key_3:
        case Qt::Key_4:
        case Qt::Key_5:
        case Qt::Key_6:
        case Qt::Key_7:
        case Qt::Key_8:
        case Qt::Key_9:
        {
            addChar(kevent->text(), currentId, l->cursorPosition());
            return true;
            break;
        }
        case Qt::Key_A:
        case Qt::Key_B:
        {
            // only departement 2ndchar
            if (currentId==3 && l->cursorPosition()==1) {
                addChar(kevent->text(), currentId, l->cursorPosition());
                return true;
            }
            break;
        }
        case Qt::Key_Home:
            nextTab = 0;
            break;
        case Qt::Key_End:
            nextTab = m_Edits.count()-2;
            break;
        case Qt::Key_Left:
//            if (l->cursorPosition()==0) {
//                setCursorPosition(currentId, -1);
                return true;
//            }
            break;
        case Qt::Key_Right:
            return true;
            break;
        case Qt::Key_Delete:
        {
            // remove char at
            int pos = l->cursorPosition();
            ++pos;
            removeChar(currentId, pos);
            setCursorPosition(currentId, pos-1);
            return true;
        }
        case Qt::Key_Backspace:
        {
            // remove char at
            int pos = l->cursorPosition();
            removeChar(currentId, pos);
            --pos;
            if (pos==0) --pos;
            setCursorPosition(currentId, pos);
            return true;
        }
        default: return false;
        }
    }

    return false;
}
Example #16
0
void DashboardEditor::sendKeyEvent(const QKeyEvent &ev)
{
    QKeyEvent *new_ev = new QKeyEvent(ev.type(), ev.key(), ev.modifiers(), ev.text(), ev.isAutoRepeat(), ev.count());
    qApp->postEvent(m_target, new_ev);
}