91
91
if (m_igbase.can_act(m_warehouse.owner().player_number())) {
92
Warehouse::StockPolicy policy = m_warehouse.get_stock_policy(get_type() == WORKER, ware);
93
Warehouse::StockPolicy newpolicy;
96
case Warehouse::SP_Normal: newpolicy = Warehouse::SP_Prefer; break;
97
case Warehouse::SP_Prefer: newpolicy = Warehouse::SP_DontStock; break;
98
case Warehouse::SP_DontStock: newpolicy = Warehouse::SP_Remove; break;
99
default: newpolicy = Warehouse::SP_Normal; break;
102
m_igbase.game().send_player_command
103
(*new Widelands::Cmd_SetStockPolicy
104
(m_igbase.game().get_gametime(), m_warehouse.owner().player_number(),
105
m_warehouse, get_type() == WORKER, ware, newpolicy));
111
97
return WaresDisplay::handle_mousepress(btn, x, y);
101
* Wraps the wares display together with some buttons
103
struct WarehouseWaresPanel : UI::Box {
104
WarehouseWaresPanel(UI::Panel * parent, uint32_t width, Interactive_GameBase &, Warehouse &, WaresDisplay::wdType type);
106
void set_policy(Warehouse::StockPolicy);
108
WarehouseWaresDisplay m_display;
109
Interactive_GameBase & m_gb;
111
WaresDisplay::wdType m_type;
115
WarehouseWaresPanel::WarehouseWaresPanel(UI::Panel * parent, uint32_t width, Interactive_GameBase & gb, Warehouse & wh, WaresDisplay::wdType type) :
116
UI::Box(parent, 0, 0, UI::Box::Vertical),
117
m_display(this, width, gb, wh, type),
122
add(&m_display, UI::Box::AlignLeft, true);
124
UI::Box *buttons = new UI::Box(this, 0, 0, UI::Box::Horizontal);
125
add(buttons, UI::Box::AlignLeft);
127
if (m_gb.can_act(m_wh.owner().player_number())) {
128
#define ADD_POLICY_BUTTON(policy, policyname) \
129
buttons->add(new UI::Callback_Button( \
130
buttons, "workarea", \
132
g_gr->get_picture(PicMod_UI,"pics/but4.png"), \
133
g_gr->get_picture(PicMod_Game, \
134
"pics/stock_policy_button_" #policy ".png"),\
135
boost::bind(&WarehouseWaresPanel::set_policy, \
136
this, Warehouse::SP_##policyname), \
137
_("Normal policy")) \
138
, UI::Box::AlignCenter); \
140
ADD_POLICY_BUTTON(normal, Normal)
141
ADD_POLICY_BUTTON(prefer, Prefer)
142
ADD_POLICY_BUTTON(dontstock, DontStock)
143
ADD_POLICY_BUTTON(remove, Remove)
148
* Add Buttons policy buttons
150
void WarehouseWaresPanel::set_policy(Warehouse::StockPolicy newpolicy) {
151
bool is_workers = m_type == WaresDisplay::WORKER;
152
Widelands::Ware_Index nritems =
153
is_workers ? m_wh.owner().tribe().get_nrworkers() :
154
m_wh.owner().tribe().get_nrwares();
155
if (m_gb.can_act(m_wh.owner().player_number())) {
156
for (Widelands::Ware_Index id = Widelands::Ware_Index::First();
157
id < nritems; ++id) {
158
if (m_display.ware_selected(id)) {
159
m_gb.game().send_player_command
160
(*new Widelands::Cmd_SetStockPolicy
161
(m_gb.game().get_gametime(),
162
m_wh.owner().player_number(),
116
172
* Status window for warehouses
149
205
void Warehouse_Window::make_wares_tab
150
206
(WaresDisplay::wdType type, PictureID tabicon, const std::string & tooltip)
152
WaresDisplay * display = new WarehouseWaresDisplay(get_tabs(), Width, igbase(), warehouse(), type);
153
get_tabs()->add("wares", tabicon, display, tooltip);
208
WarehouseWaresPanel * panel = new WarehouseWaresPanel(get_tabs(), Width, igbase(), warehouse(), type);
209
get_tabs()->add("wares", tabicon, panel, tooltip);