void GuiInfoGranary::paint()
{
   //Font &font_red = FontCollection::instance().getFont(FONT_2_RED);
  Font font = Font::create( FONT_2 );

  // summary: total stock, free capacity
  int _paintY = _d->lbTitle->getBottom();
  int currentQty = _gd->building->getGoodStore().getCurrentQty();
  int maxQty = _gd->building->getGoodStore().getMaxQty();
  std::string desc = StringHelper::format( 0xff, _("%d unites en stock. Espace pour %d unites."), currentQty, maxQty-currentQty);

  font.draw( *_d->bgPicture, desc, 16, _paintY+5, false );
  _paintY+=40;

  int _col2PaintY = _paintY;
  drawGood(G_WHEAT, 0, _paintY);
  drawGood(G_MEAT, 0, _paintY);
  drawGood(G_FRUIT, 1, _col2PaintY);
  drawGood(G_VEGETABLE, 1, _col2PaintY);

  _paintY+=12;
  GuiPaneling::instance().draw_black_frame(*_d->bgPicture, 16, _paintY, getWidth()-32, 62);
  _paintY+=12;

  drawWorkers( _paintY );
}
void InfoBoxHouse::_paint()
{
  int lbHeight = 20;
  GuiPaneling::instance().draw_black_frame( *_d->bgPicture, 16, 150, 
                                               _d->btnExit->getRight() - _d->btnHelp->getLeft(), 
                                               _d->btnExit->getTop() - 150 - 5 );

  drawHabitants();
    
  int taxes = -1; // _house->getMonthlyTaxes();
  Label* taxesLb = new Label( this, Rect( 16 + 15, _ed->lbHabitants->getBottom(), getWidth() - 16, 
                                            _ed->lbHabitants->getBottom() + lbHeight ) );
  char buffer[200];
  if (taxes == -1)
  {
    sprintf(buffer, _("Aucun percepteur ne passe ici. Ne paye pas de taxes"));
    taxesLb->setFont( Font::create( FONT_2_RED ) );
  }
  else
  {
    sprintf(buffer, _("Paye %d Denarii de taxes par mois"), taxes);
  }

  taxesLb->setText( buffer );
  //_paintY+=22;
  
  _ed->lbCrime = new Label( this, taxesLb->getRelativeRect() + Point( 0, 22 ) );
  sprintf(buffer, _("Inhabitants didn't report about crimes"));
  _ed->lbCrime->setText( buffer );

  int startY = _ed->lbCrime->getBottom() + 10;
  if( _ed->house->getLevelSpec().getHouseLevel() > 2 )
  {
    drawGood(G_WHEAT, 0, 0, startY );
  }
  else
  {
    Label* lb = new Label( this, _ed->lbCrime->getRelativeRect() + Point( 0, 30 ) ); 
    lb->setHeight( 40 );
    lb->setLineIntervalOffset( -6 );
    lb->setText( _("Inabitants of tents provide food themselves, conducting a subsistence economy") );
    lb->setWordWrap( true );
    startY = lb->getTop();
  }

  drawGood(G_POTTERY, 0, 1, startY);
  drawGood(G_FURNITURE, 1, 1, startY);
  drawGood(G_OIL, 2, 1, startY);
  drawGood(G_WINE, 3, 1, startY);
}
AboutGranary::AboutGranary(Widget* parent, PlayerCityPtr city, const Tile& tile )
  : AboutConstruction( parent, Rect( 0, 0, 510, 280 ), Rect( 16, 130, 510 - 16, 130 + 62) )
{
  setupUI( ":/gui/granaryinfo.gui" );

  _granary = ptr_cast<Granary>( tile.overlay() );

  setBase( ptr_cast<Construction>( _granary ) );
  _setWorkingVisible( true );

  PushButton* btnOrders;
  Label* lbUnits;
  GET_WIDGET_FROM_UI( btnOrders )
  GET_WIDGET_FROM_UI( lbUnits )

  CONNECT( btnOrders, onClicked(), this, AboutGranary::showSpecialOrdersWindow );

  std::string title = MetaDataHolder::findPrettyName( _granary->type() );
  setTitle( _(title) ); 

  if( lbUnits )
  {
    // summary: total stock, free capacity
    std::string desc = utils::format( 0xff, "%d %s, %s %d",
                                             _granary->store().qty(),
                                             _("##units_in_stock##"), _("##freespace_for##"),
                                             _granary->store().freeQty() );
    lbUnits->setPosition( _lbTitleRef()->leftbottom() + Point( 0, 5 ) );
    lbUnits->setText( desc );

    drawGood(good::wheat, 0, lbUnits->bottom() );
    drawGood(good::meat, 0, lbUnits->bottom() + 25);
    drawGood(good::fruit, 1, lbUnits->bottom() );
    drawGood(good::vegetable, 1, lbUnits->bottom() + 25);
  }

  _updateWorkersLabel( Point( 32, lbUnits->bottom() + 60 ), 542, _granary->maximumWorkers(), _granary->numberWorkers() );
}
void GuiInfoMarket::paint()
{
  if( _md->market->getWorkers() > 0 )
  {
    GoodStore& goods = _md->market->getGoodStore();
    int furageSum = 0;
    // for all furage types of good
    for (int goodType = 0; goodType<G_OLIVE; ++goodType)
    {
      furageSum += goods.getCurrentQty( (GoodType)goodType );     
    }

    int paintY = 78;
    if( 0 < furageSum )
    {
      drawGood(G_WHEAT, 0, paintY );
      drawGood(G_FISH, 1, paintY);
      drawGood(G_MEAT, 2, paintY);
      drawGood(G_FRUIT, 3, paintY);
      drawGood(G_VEGETABLE, 4, paintY);
      _md->lbAbout->setHeight( 25 );
    }
    else
    {
      _md->lbAbout->setHeight( 50 );
    }

    paintY += 24;
    drawGood(G_POTTERY, 0, paintY);
    drawGood(G_FURNITURE, 1, paintY);
    drawGood(G_OIL, 2, paintY);
    drawGood(G_WINE, 3, paintY); 

    _md->lbAbout->setText( 0 == furageSum ? _("##market_search_food_source##") : _("##market_about##"));
  }
  else
  {
    _md->lbAbout->setHeight( 50 );
    _md->lbAbout->setText( _("##market_not_work##") );
  }

  drawWorkers();
}
InfoBoxWarehouse::InfoBoxWarehouse( Widget* parent, const Tile& tile )
  : InfoBoxSimple( parent, Rect( 0, 0, 510, 360 ), Rect( 16, 225, 510 - 16, 225 + 62 ) )
{
  _warehouse = tile.getOverlay().as<Warehouse>();

  Size btnOrdersSize( 350, 20 );
  PushButton* btnOrders = new PushButton( this, Rect( Point( (getWidth() - btnOrdersSize.getWidth()) / 2, getHeight() - 34 ), btnOrdersSize ),
                                          _("##special_orders##"), -1, false, PushButton::whiteBorderUp );

  CONNECT( btnOrders, onClicked(), this, InfoBoxWarehouse::showSpecialOrdersWindow );

  setTitle( MetaDataHolder::getPrettyName( _warehouse->getType() ) );

  // summary: total stock, free capacity
  int _paintY = _getTitle()->getBottom();

  drawGood(Good::wheat,     0, _paintY+25);
  drawGood(Good::vegetable, 0, _paintY+50);
  drawGood(Good::fruit,     0, _paintY+75);
  drawGood(Good::olive,     0, _paintY+100);
  drawGood(Good::grape,     0, _paintY+125);
  drawGood(Good::fish,      0, _paintY+150);

  drawGood(Good::meat,      1, _paintY+25);
  drawGood(Good::wine,      1, _paintY+50);
  drawGood(Good::oil,       1, _paintY+75);
  drawGood(Good::iron,      1, _paintY+100);
  drawGood(Good::timber,    1, _paintY+125);

  drawGood(Good::clay,      2, _paintY+25);
  drawGood(Good::marble,    2, _paintY+50);
  drawGood(Good::weapon,    2, _paintY+75);
  drawGood(Good::furniture, 2, _paintY+100);
  drawGood(Good::pottery,   2, _paintY+125);

  _drawWorkers( Point( 16 + 20, 225 + 10 ), 542, _warehouse->getMaxWorkers(), _warehouse->getWorkersCount() );
}
AboutWarehouse::AboutWarehouse(Widget* parent, PlayerCityPtr city, const Tile& tile )
  : AboutConstruction( parent, Rect( 0, 0, 510, 360 ), Rect( 16, 225, 510 - 16, 225 + 62 ) )
{
  setupUI( ":/gui/warehouseinfo.gui" );

  _warehouse = ptr_cast<Warehouse>( tile.overlay() );

  setBase( ptr_cast<Construction>( _warehouse ) );
  _setWorkingVisible( true );

  /*StringArray warnings;
  if( _warehouse->onlyDispatchGoods() )  { warnings << "##warehouse_low_personal_warning##";  }
  if( _warehouse->getGoodStore().freeQty() == 0 ) { warnings << "##warehouse_full_warning##";  }

  if( !warnings.empty() )
  {
    Label* lb = new Label( this, Rect( 20, height() - 54, width() - 20, height() - 34 ), _(warnings.rand()) );
    lb->setTextAlignment( alignCenter, alignCenter );
  }*/

  PushButton* btnOrders;
  GET_WIDGET_FROM_UI( btnOrders );
  CONNECT( btnOrders, onClicked(), this, AboutWarehouse::showSpecialOrdersWindow );

  std::string title = MetaDataHolder::findPrettyName( _warehouse->type() );
  setTitle( _(title) );

  // summary: total stock, free capacity
  int _paintY = _lbTitleRef() ? _lbTitleRef()->bottom() : 50;

  drawGood(good::wheat,     0, _paintY+0);
  drawGood(good::vegetable, 0, _paintY+25);
  drawGood(good::fruit,     0, _paintY+50);
  drawGood(good::olive,     0, _paintY+75);
  drawGood(good::grape,     0, _paintY+100);
  drawGood(good::fish,      0, _paintY+125);

  drawGood(good::meat,      1, _paintY+0);
  drawGood(good::wine,      1, _paintY+25);
  drawGood(good::oil,       1, _paintY+50);
  drawGood(good::iron,      1, _paintY+75);
  drawGood(good::timber,    1, _paintY+100);

  drawGood(good::clay,      2, _paintY+0);
  drawGood(good::marble,    2, _paintY+25);
  drawGood(good::weapon,    2, _paintY+50);
  drawGood(good::furniture, 2, _paintY+75);
  drawGood(good::pottery,   2, _paintY+100);

  _updateWorkersLabel( Point( 20, 10 ), 542, _warehouse->maximumWorkers(), _warehouse->numberWorkers() );
}
void InfoBoxWarehouse::paint()
{
  //Font &font_red = FontCollection::instance().getFont(FONT_2_RED);
  Font font = Font::create( FONT_2 );

  // summary: total stock, free capacity
  int _paintY = _d->lbTitle->getBottom();

  int _col2PaintY = _paintY;
  drawGood(G_WHEAT, 0, _paintY);
  drawGood(G_VEGETABLE, 0, _paintY);
  drawGood(G_FRUIT, 0, _paintY);
  drawGood(G_OLIVE, 0, _paintY);
  drawGood(G_GRAPE, 0, _paintY);

  _paintY = _col2PaintY;
  drawGood(G_MEAT, 1, _paintY);
  drawGood(G_WINE, 1, _paintY);
  drawGood(G_OIL, 1, _paintY);
  drawGood(G_IRON, 1, _paintY);
  drawGood(G_TIMBER, 1, _paintY);

  _paintY = _col2PaintY;
  drawGood(G_CLAY, 2, _paintY);
  drawGood(G_MARBLE, 2, _paintY);
  drawGood(G_WEAPON, 2, _paintY);
  drawGood(G_FURNITURE, 2, _paintY);
  drawGood(G_POTTERY, 2, _paintY);

  _wd->workerFramePos = Point( 16, 170 );
  GuiPaneling::instance().draw_black_frame(*_d->bgPicture, _wd->workerFramePos.getX(), _wd->workerFramePos.getY(), getWidth()-32, 62);

  drawWorkers();
}