Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mouse click with shift and crtl #108

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion examples/GTest/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,13 @@ TEST(GTestExample, BasicUITest)
srv->wait(std::chrono::milliseconds(500));
srv->mouseClick(spix::ItemPath("mainWindow/Button_1"), spix::MouseButtons::Right);
srv->wait(std::chrono::milliseconds(500));
srv->mouseClick(spix::ItemPath("mainWindow/Button_2"), spix::MouseButtons::Left, spix::KeyModifiers::Shift);
srv->wait(std::chrono::milliseconds(500));
srv->mouseClick(spix::ItemPath("mainWindow/Button_2"), spix::MouseButtons::Left, spix::KeyModifiers::Control);
srv->wait(std::chrono::milliseconds(500));
srv->mouseClick(spix::ItemPath("mainWindow/Button_2"), spix::MouseButtons::Left,
spix::KeyModifiers::Shift | spix::KeyModifiers::Control);
srv->wait(std::chrono::milliseconds(500));

auto result = srv->getStringProperty("mainWindow/results", "text");

Expand All @@ -74,7 +81,10 @@ Button 2 clicked
Button 1 clicked
Button 2 clicked
Button 1 clicked
Button 1 right clicked)RSLT";
Button 1 right clicked
Button 2 shift clicked
Button 2 control clicked
Button 2 shift control clicked)RSLT";

EXPECT_EQ(result, expected_result);

Expand Down
15 changes: 13 additions & 2 deletions examples/GTest/main.qml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,11 @@ Window {
{
if(mouse.button & Qt.RightButton)
resultsView.appendText("Button 1 right clicked")
else
else if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ShiftModifier))
resultsView.appendText("Button 1 shift clicked")
else if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ControlModifier))
resultsView.appendText("Button 1 shift control clicked")
else
resultsView.appendText("Button 1 clicked")
}
}
Expand All @@ -47,7 +51,14 @@ Window {
{
if(mouse.button & Qt.RightButton)
resultsView.appendText("Button 2 right clicked")
else
else if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ShiftModifier))
if ((mouse.modifiers & Qt.ControlModifier))
resultsView.appendText("Button 2 shift control clicked")
else
resultsView.appendText("Button 2 shift clicked")
else if ((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ControlModifier))
resultsView.appendText("Button 2 control clicked")
else
resultsView.appendText("Button 2 clicked")
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/include/Spix/TestServer.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ class SPIX_EXPORT TestServer {
// Commands
void wait(std::chrono::milliseconds waitTime);
void mouseClick(ItemPath path);
void mouseClick(ItemPath path, MouseButton mouseButton);
void mouseClick(ItemPath path, MouseButton mouseButton, KeyModifier keyModifier = spix::KeyModifiers::None);
void mouseBeginDrag(ItemPath path);
void mouseEndDrag(ItemPath path);
void mouseDropUrls(ItemPath path, const std::vector<std::string>& urls);
Expand Down
10 changes: 6 additions & 4 deletions lib/src/AnyRpcServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ AnyRpcServer::AnyRpcServer(int anyrpcPort)
"Click on the object at the given path | mouseClick(string path)",
[this](std::string path) { mouseClick(std::move(path)); });

utils::AddFunctionToAnyRpc<void(std::string, int)>(methodManager, "mouseClickWithButton",
"Click on the object at the given path with the given mouse button | mouseClickWithButton(string path, int "
"mouseButton)",
[this](std::string path, int mouseButton) { mouseClick(std::move(path), mouseButton); });
utils::AddFunctionToAnyRpc<void(std::string, int, int)>(methodManager, "mouseClickWithButton",
"Click on the object at the given path with the given mouse button and Control Keys | "
"mouseClickWithButton(string path, int mouseButton)",
[this](std::string path, int mouseButton, int keyModifier = KeyModifiers::None) {
mouseClick(std::move(path), mouseButton, keyModifier);
});

utils::AddFunctionToAnyRpc<void(std::string)>(methodManager, "mouseBeginDrag",
"Begin a drag with the mouse | mouseBeginDrag(string path)",
Expand Down
7 changes: 4 additions & 3 deletions lib/src/Commands/ClickOnItem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@
namespace spix {
namespace cmd {

ClickOnItem::ClickOnItem(ItemPosition path, MouseButton mouseButton)
ClickOnItem::ClickOnItem(ItemPosition path, MouseButton mouseButton, KeyModifier keyModifier)
: m_position(std::move(path))
, m_mouseButton(mouseButton)
, m_keyModifier(keyModifier)
{
}

Expand All @@ -29,8 +30,8 @@ void ClickOnItem::execute(CommandEnvironment& env)

auto size = item->size();
auto mousePoint = m_position.positionForItemSize(size);
env.scene().events().mouseDown(item.get(), mousePoint, m_mouseButton);
env.scene().events().mouseUp(item.get(), mousePoint, m_mouseButton);
env.scene().events().mouseDown(item.get(), mousePoint, m_mouseButton, m_keyModifier);
env.scene().events().mouseUp(item.get(), mousePoint, m_mouseButton, m_keyModifier);
}

} // namespace cmd
Expand Down
3 changes: 2 additions & 1 deletion lib/src/Commands/ClickOnItem.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ namespace cmd {

class SPIX_EXPORT ClickOnItem : public Command {
public:
ClickOnItem(ItemPosition path, MouseButton mouseButton);
ClickOnItem(ItemPosition path, MouseButton mouseButton, KeyModifier keyModifier = KeyModifiers::None);

void execute(CommandEnvironment& env) override;

private:
ItemPosition m_position;
MouseButton m_mouseButton;
KeyModifier m_keyModifier;
};

} // namespace cmd
Expand Down
2 changes: 1 addition & 1 deletion lib/src/Commands/DragBegin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ void DragBegin::execute(CommandEnvironment& env)

auto size = item->size();
Point midPoint(size.width / 2.0, size.height / 2.0);
env.scene().events().mouseDown(item.get(), midPoint, MouseButtons::Left);
env.scene().events().mouseDown(item.get(), midPoint, MouseButtons::Left, KeyModifiers::None);
env.scene().events().mouseMove(item.get(), midPoint);
}

Expand Down
2 changes: 1 addition & 1 deletion lib/src/Commands/DragEnd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ void DragEnd::execute(CommandEnvironment& env)
auto size = item->size();
Point midPoint(size.width / 2.0, size.height / 2.0);
env.scene().events().mouseMove(item.get(), midPoint);
env.scene().events().mouseUp(item.get(), midPoint, MouseButtons::Left);
env.scene().events().mouseUp(item.get(), midPoint, MouseButtons::Left, KeyModifiers::None);
}

} // namespace cmd
Expand Down
4 changes: 2 additions & 2 deletions lib/src/Scene/Events.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class Events {
public:
virtual ~Events() = default;

virtual void mouseDown(Item* item, Point loc, MouseButton button) = 0;
virtual void mouseUp(Item* item, Point loc, MouseButton button) = 0;
virtual void mouseDown(Item* item, Point loc, MouseButton button, KeyModifier mod) = 0;
virtual void mouseUp(Item* item, Point loc, MouseButton button, KeyModifier mod) = 0;
virtual void mouseMove(Item* item, Point loc) = 0;
virtual void stringInput(Item* item, const std::string& text) = 0;
virtual void keyPress(Item* item, int keyCode, KeyModifier mod) = 0;
Expand Down
4 changes: 2 additions & 2 deletions lib/src/Scene/Mock/MockEvents.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@

namespace spix {

void MockEvents::mouseDown(Item* item, Point loc, MouseButton /*button*/)
void MockEvents::mouseDown(Item* item, Point loc, MouseButton /*button*/, KeyModifier /*mod*/)
{
if (onMouseClickEvent) {
onMouseClickEvent(item, loc, true, false);
}
}

void MockEvents::mouseUp(Item* item, Point loc, MouseButton /*button*/)
void MockEvents::mouseUp(Item* item, Point loc, MouseButton /*button*/, KeyModifier /*mod*/)
{
if (onMouseClickEvent) {
onMouseClickEvent(item, loc, false, true);
Expand Down
4 changes: 2 additions & 2 deletions lib/src/Scene/Mock/MockEvents.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ namespace spix {

class SPIX_EXPORT MockEvents : public Events {
public:
void mouseDown(Item* item, Point loc, MouseButton button) override;
void mouseUp(Item* item, Point loc, MouseButton button) override;
void mouseDown(Item* item, Point loc, MouseButton button, KeyModifier mod) override;
void mouseUp(Item* item, Point loc, MouseButton button, KeyModifier mod) override;
void mouseMove(Item* item, Point loc) override;
void stringInput(Item* item, const std::string& text) override;
void keyPress(Item* item, int keyCode, KeyModifier mod) override;
Expand Down
12 changes: 6 additions & 6 deletions lib/src/Scene/Qt/QtEvents.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ void sendQtKeyEvent(Item* item, bool press, int keyCode, KeyModifier mod)

} // namespace

void QtEvents::mouseDown(Item* item, Point loc, MouseButton button)
void QtEvents::mouseDown(Item* item, Point loc, MouseButton button, KeyModifier mod)
{
QPointF windowLoc;
auto window = getWindowAndPositionForItem(item, loc, windowLoc);
Expand All @@ -102,12 +102,12 @@ void QtEvents::mouseDown(Item* item, Point loc, MouseButton button)
Qt::MouseButton eventCausingButton = getQtMouseButtonValue(button);
Qt::MouseButtons activeButtons = getQtMouseButtonValue(m_pressedMouseButtons);

QMouseEvent* event
= new QMouseEvent(QEvent::MouseButtonPress, windowLoc, eventCausingButton, activeButtons, Qt::NoModifier);
auto qtmod = getQtKeyboardModifiers(mod);
QMouseEvent* event = new QMouseEvent(QEvent::MouseButtonPress, windowLoc, eventCausingButton, activeButtons, qtmod);
QGuiApplication::postEvent(window, event);
}

void QtEvents::mouseUp(Item* item, Point loc, MouseButton button)
void QtEvents::mouseUp(Item* item, Point loc, MouseButton button, KeyModifier mod)
{
QPointF windowLoc;
auto window = getWindowAndPositionForItem(item, loc, windowLoc);
Expand All @@ -125,9 +125,9 @@ void QtEvents::mouseUp(Item* item, Point loc, MouseButton button)
Qt::MouseButton eventCausingButton = getQtMouseButtonValue(button);
Qt::MouseButtons activeButtons = getQtMouseButtonValue(m_pressedMouseButtons);
#endif

auto qtmod = getQtKeyboardModifiers(mod);
QMouseEvent* event
= new QMouseEvent(QEvent::MouseButtonRelease, windowLoc, eventCausingButton, activeButtons, Qt::NoModifier);
= new QMouseEvent(QEvent::MouseButtonRelease, windowLoc, eventCausingButton, activeButtons, qtmod);
QGuiApplication::postEvent(window, event);
}

Expand Down
4 changes: 2 additions & 2 deletions lib/src/Scene/Qt/QtEvents.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ namespace spix {

class QtEvents : public Events {
public:
void mouseDown(Item* item, Point loc, MouseButton button) override;
void mouseUp(Item* item, Point loc, MouseButton button) override;
void mouseDown(Item* item, Point loc, MouseButton button, KeyModifier mod) override;
void mouseUp(Item* item, Point loc, MouseButton button, KeyModifier mod) override;
void mouseMove(Item* item, Point loc) override;
void stringInput(Item* item, const std::string& text) override;
void keyPress(Item* item, int keyCode, KeyModifier mod) override;
Expand Down
6 changes: 3 additions & 3 deletions lib/src/TestServer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,12 @@ void TestServer::wait(std::chrono::milliseconds waitTime)

void TestServer::mouseClick(ItemPath path)
{
m_cmdExec->enqueueCommand<cmd::ClickOnItem>(path, spix::MouseButtons::Left);
m_cmdExec->enqueueCommand<cmd::ClickOnItem>(path, spix::MouseButtons::Left, spix::KeyModifiers::None);
}

void TestServer::mouseClick(ItemPath path, MouseButton mouseButton)
void TestServer::mouseClick(ItemPath path, MouseButton mouseButton, KeyModifier keyModifier)
{
m_cmdExec->enqueueCommand<cmd::ClickOnItem>(path, mouseButton);
m_cmdExec->enqueueCommand<cmd::ClickOnItem>(path, mouseButton, keyModifier);
}

void TestServer::mouseBeginDrag(ItemPath path)
Expand Down
Loading