1
0

Add middle click.

This commit is contained in:
Howaner 2014-07-05 14:00:04 +02:00
parent 7cc7429fa0
commit 7a78f23b4a
2 changed files with 88 additions and 21 deletions

View File

@ -15,6 +15,7 @@
#include "../Root.h" #include "../Root.h"
#include "../FastRandom.h" #include "../FastRandom.h"
#include "../BlockArea.h" #include "../BlockArea.h"
#include "polarssl/camellia.h"
@ -60,12 +61,16 @@ void cSlotArea::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickA
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem); ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
return; return;
} }
case caDblClick: case caDblClick:
{ {
DblClicked(a_Player, a_SlotNum); DblClicked(a_Player, a_SlotNum);
return; return;
} }
case caMiddleClick:
{
MiddleClicked(a_Player, a_SlotNum);
return;
}
default: default:
{ {
break; break;
@ -226,6 +231,24 @@ void cSlotArea::DblClicked(cPlayer & a_Player, int a_SlotNum)
void cSlotArea::MiddleClicked(cPlayer & a_Player, int a_SlotNum)
{
cItem Slot(*GetSlot(a_SlotNum, a_Player));
cItem & DraggingItem = a_Player.GetDraggingItem();
if (!a_Player.IsGameModeCreative() || Slot.IsEmpty() || !DraggingItem.IsEmpty())
{
return;
}
DraggingItem = Slot;
DraggingItem.m_ItemCount = DraggingItem.GetMaxStackSize();
}
void cSlotArea::OnPlayerAdded(cPlayer & a_Player) void cSlotArea::OnPlayerAdded(cPlayer & a_Player)
{ {
UNUSED(a_Player); UNUSED(a_Player);
@ -410,6 +433,12 @@ cSlotAreaCrafting::cSlotAreaCrafting(int a_GridSize, cWindow & a_ParentWindow) :
void cSlotAreaCrafting::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickAction, const cItem & a_ClickedItem) void cSlotAreaCrafting::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_ClickAction, const cItem & a_ClickedItem)
{ {
if (a_ClickAction == caMiddleClick)
{
MiddleClicked(a_Player, a_SlotNum);
return;
}
// Override for craft result slot // Override for craft result slot
if (a_SlotNum == 0) if (a_SlotNum == 0)
{ {
@ -423,6 +452,7 @@ void cSlotAreaCrafting::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction
} }
return; return;
} }
super::Clicked(a_Player, a_SlotNum, a_ClickAction, a_ClickedItem); super::Clicked(a_Player, a_SlotNum, a_ClickAction, a_ClickedItem);
UpdateRecipe(a_Player); UpdateRecipe(a_Player);
} }
@ -651,15 +681,27 @@ void cSlotAreaAnvil::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_C
return; return;
} }
if (a_ClickAction == caDblClick) switch (a_ClickAction)
{ {
return; case caDblClick:
} {
return;
if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick)) }
{ case caShiftLeftClick:
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem); case caShiftRightClick:
return; {
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
return;
}
case caMiddleClick:
{
MiddleClicked(a_Player, a_SlotNum);
return;
}
default:
{
break;
}
} }
cItem Slot(*GetSlot(a_SlotNum, a_Player)); cItem Slot(*GetSlot(a_SlotNum, a_Player));
@ -1057,12 +1099,16 @@ void cSlotAreaEnchanting::Clicked(cPlayer & a_Player, int a_SlotNum, eClickActio
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem); ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
return; return;
} }
case caDblClick: case caDblClick:
{ {
DblClicked(a_Player, a_SlotNum); DblClicked(a_Player, a_SlotNum);
return; return;
} }
case caMiddleClick:
{
MiddleClicked(a_Player, a_SlotNum);
return;
}
default: default:
{ {
break; break;
@ -1414,6 +1460,12 @@ void cSlotAreaFurnace::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a
return; return;
} }
if (a_ClickAction == caMiddleClick)
{
MiddleClicked(a_Player, a_SlotNum);
return;
}
cItem & DraggingItem = a_Player.GetDraggingItem(); cItem & DraggingItem = a_Player.GetDraggingItem();
if (!DraggingItem.IsEmpty()) if (!DraggingItem.IsEmpty())
{ {
@ -1676,16 +1728,28 @@ void cSlotAreaArmor::Clicked(cPlayer & a_Player, int a_SlotNum, eClickAction a_C
return; return;
} }
if ((a_ClickAction == caShiftLeftClick) || (a_ClickAction == caShiftRightClick)) switch (a_ClickAction)
{ {
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem); case caDblClick:
return; {
} // Armors haven't a dbl click
return;
// Armors haven't a dbl click }
if (a_ClickAction == caDblClick) case caShiftLeftClick:
{ case caShiftRightClick:
return; {
ShiftClicked(a_Player, a_SlotNum, a_ClickedItem);
return;
}
case caMiddleClick:
{
MiddleClicked(a_Player, a_SlotNum);
return;
}
default:
{
break;
}
} }
cItem Slot(*GetSlot(a_SlotNum, a_Player)); cItem Slot(*GetSlot(a_SlotNum, a_Player));

View File

@ -46,10 +46,13 @@ public:
/// Called from Clicked when the action is a shiftclick (left or right) /// Called from Clicked when the action is a shiftclick (left or right)
virtual void ShiftClicked(cPlayer & a_Player, int a_SlotNum, const cItem & a_ClickedItem); virtual void ShiftClicked(cPlayer & a_Player, int a_SlotNum, const cItem & a_ClickedItem);
/// Called from Clicked when the action is a caDblClick /// Called from Clicked when the action is a caDblClick
virtual void DblClicked(cPlayer & a_Player, int a_SlotNum); virtual void DblClicked(cPlayer & a_Player, int a_SlotNum);
/** Called from Clicked when the action is a middleclick */
virtual void MiddleClicked(cPlayer & a_Player, int a_SlotNum);
/// Called when a new player opens the same parent window. The window already tracks the player. CS-locked. /// Called when a new player opens the same parent window. The window already tracks the player. CS-locked.
virtual void OnPlayerAdded(cPlayer & a_Player); virtual void OnPlayerAdded(cPlayer & a_Player);