WarehouseSpecialOrdersWindow::WarehouseSpecialOrdersWindow( Widget* parent, const Point& pos, WarehousePtr warehouse )
: BaseSpecialOrdersWindow( parent, pos, defaultHeight ), __INIT_IMPL(WarehouseSpecialOrdersWindow)
{
  __D_IMPL(d, WarehouseSpecialOrdersWindow)

  setupUI( ":/gui/warehousespecial.gui");
  setTitle( _("##warehouse_orders##") );

  d->warehouse = warehouse;
  int index=0;
  for( int goodType=Good::wheat; goodType <= Good::marble; goodType++ )
  {
    const GoodOrders::Order rule = d->warehouse->store().getOrder( (Good::Type)goodType );

    if( rule != GoodOrders::none )
    {
      addOrderWidget<WarehousePtr>( index, (Good::Type)goodType, _ordersArea(), d->warehouse );
      index++;
    }
  }

  GET_DWIDGET_FROM_UI( d, btnToggleDevastation )
  GET_DWIDGET_FROM_UI( d, btnTradeCenter )

  CONNECT( d->btnToggleDevastation, onClicked(), this, WarehouseSpecialOrdersWindow::toggleDevastation );
  _updateBtnDevastation();
}
GranarySpecialOrdersWindow::GranarySpecialOrdersWindow( Widget* parent, const Point& pos, GranaryPtr granary )
: BaseSpecialOrdersWindow( parent, pos, defaultHeight ), __INIT_IMPL(GranarySpecialOrdersWindow)
{
  __D_IMPL(d, GranarySpecialOrdersWindow)

  setupUI( ":/gui/granaryspecial.gui" );

  setTitle( _("##granary_orders##") );
  int index=0;
  d->granary = granary;
  for( auto& goodType : good::foods() )
  {
    const good::Orders::Order rule = granary->store().getOrder( goodType );
    
    if( rule != good::Orders::none )
    {
      OrderGoodWidget::create( index, goodType, _ordersArea(), granary->store() );
      index++;
    }
  }

  d->btnToggleDevastation = new PushButton( this, Rect( 80, height() - 45, width() - 80, height() - 25 ),
                                             "", -1, false, PushButton::whiteBorderUp );

  CONNECT( d->btnToggleDevastation, onClicked(), this, GranarySpecialOrdersWindow::toggleDevastation );
  _updateBtnDevastation();
}
GranarySpecialOrdersWindow::GranarySpecialOrdersWindow( Widget* parent, const Point& pos, GranaryPtr granary )
: BaseSpecialOrdersWindow( parent, pos, defaultHeight )
{
  setTitle( _("##granary_orders##") );
  int index=0;
  _granary = granary;
  for( int goodType=Good::wheat; goodType <= Good::vegetable; goodType++ )
  {
    const GoodOrders::Order rule = granary->store().getOrder( (Good::Type)goodType );
    
    if( rule != GoodOrders::none )
    {
      addOrderWidget<GranaryPtr>( index, (Good::Type)goodType, _ordersArea(), granary );
      index++;
    }
  }

  _btnToggleDevastation = new PushButton( this, Rect( 80, height() - 45, width() - 80, height() - 25 ),
                                          "", -1, false, PushButton::whiteBorderUp );

  CONNECT( _btnToggleDevastation, onClicked(), this, GranarySpecialOrdersWindow::toggleDevastation );
  _updateBtnDevastation();
}