Add inventory right click drag and drop
This commit is contained in:
parent
2c16a11527
commit
f6321e277b
|
@ -2950,9 +2950,11 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(event.EventType==EET_MOUSE_INPUT_EVENT
|
if((event.EventType==EET_MOUSE_INPUT_EVENT &&
|
||||||
&& event.MouseInput.Event != EMIE_MOUSE_MOVED) {
|
event.MouseInput.Event != EMIE_MOUSE_MOVED) ||
|
||||||
// Mouse event other than movement
|
(event.MouseInput.Event == EMIE_MOUSE_MOVED &&
|
||||||
|
event.MouseInput.isRightPressed() && getItemAtPos(m_pointer).i != getItemAtPos(m_old_pointer).i)){
|
||||||
|
// Mouse event other than movement or crossing the border of inventory field while holding rmb
|
||||||
|
|
||||||
// Get selected item and hovered/clicked item (s)
|
// Get selected item and hovered/clicked item (s)
|
||||||
|
|
||||||
|
@ -3008,7 +3010,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
|
||||||
(m_selected_item->i == s.i);
|
(m_selected_item->i == s.i);
|
||||||
|
|
||||||
// buttons: 0 = left, 1 = right, 2 = middle
|
// buttons: 0 = left, 1 = right, 2 = middle
|
||||||
// up/down: 0 = down (press), 1 = up (release), 2 = unknown event
|
// up/down: 0 = down (press), 1 = up (release), 2 = unknown event, -1 movement
|
||||||
int button = 0;
|
int button = 0;
|
||||||
int updown = 2;
|
int updown = 2;
|
||||||
if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
|
if(event.MouseInput.Event == EMIE_LMOUSE_PRESSED_DOWN)
|
||||||
|
@ -3023,6 +3025,8 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
|
||||||
{ button = 1; updown = 1; }
|
{ button = 1; updown = 1; }
|
||||||
else if(event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP)
|
else if(event.MouseInput.Event == EMIE_MMOUSE_LEFT_UP)
|
||||||
{ button = 2; updown = 1; }
|
{ button = 2; updown = 1; }
|
||||||
|
else if(event.MouseInput.Event == EMIE_MOUSE_MOVED)
|
||||||
|
{ updown = -1;}
|
||||||
|
|
||||||
// Set this number to a positive value to generate a move action
|
// Set this number to a positive value to generate a move action
|
||||||
// from m_selected_item to s.
|
// from m_selected_item to s.
|
||||||
|
@ -3113,6 +3117,16 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
|
||||||
|
|
||||||
m_selected_dragging = false;
|
m_selected_dragging = false;
|
||||||
}
|
}
|
||||||
|
else if(updown == -1) {
|
||||||
|
// Mouse has been moved and rmb is down and mouse pointer just
|
||||||
|
// entered a new inventory field (checked in the entry-if, this
|
||||||
|
// is the only action here that is generated by mouse movement)
|
||||||
|
if(m_selected_item != NULL && s.isValid()){
|
||||||
|
// Move 1 item
|
||||||
|
// TODO: middle mouse to move 10 items might be handy
|
||||||
|
move_amount = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Possibly send inventory action to server
|
// Possibly send inventory action to server
|
||||||
if(move_amount > 0)
|
if(move_amount > 0)
|
||||||
|
@ -3212,6 +3226,7 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
|
||||||
m_selected_dragging = false;
|
m_selected_dragging = false;
|
||||||
m_selected_content_guess = ItemStack();
|
m_selected_content_guess = ItemStack();
|
||||||
}
|
}
|
||||||
|
m_old_pointer = m_pointer;
|
||||||
}
|
}
|
||||||
if(event.EventType==EET_GUI_EVENT) {
|
if(event.EventType==EET_GUI_EVENT) {
|
||||||
|
|
||||||
|
|
|
@ -301,6 +301,7 @@ protected:
|
||||||
std::string m_formspec_string;
|
std::string m_formspec_string;
|
||||||
InventoryLocation m_current_inventory_location;
|
InventoryLocation m_current_inventory_location;
|
||||||
|
|
||||||
|
|
||||||
std::vector<ListDrawSpec> m_inventorylists;
|
std::vector<ListDrawSpec> m_inventorylists;
|
||||||
std::vector<ImageDrawSpec> m_backgrounds;
|
std::vector<ImageDrawSpec> m_backgrounds;
|
||||||
std::vector<ImageDrawSpec> m_images;
|
std::vector<ImageDrawSpec> m_images;
|
||||||
|
@ -323,6 +324,7 @@ protected:
|
||||||
InventoryLocation m_selected_content_guess_inventory;
|
InventoryLocation m_selected_content_guess_inventory;
|
||||||
|
|
||||||
v2s32 m_pointer;
|
v2s32 m_pointer;
|
||||||
|
v2s32 m_old_pointer; // Mouse position after previous mouse event
|
||||||
gui::IGUIStaticText *m_tooltip_element;
|
gui::IGUIStaticText *m_tooltip_element;
|
||||||
|
|
||||||
u32 m_tooltip_show_delay;
|
u32 m_tooltip_show_delay;
|
||||||
|
|
Loading…
Reference in New Issue