summaryrefslogblamecommitdiff
path: root/src/gui/beingpopup.cpp
blob: 87db79aa65ddddc27a286bec9bd23a5fb2582480 (plain) (tree)
1
2
3
4
5
6
  
                       
                                           
                                                    
  
                                             

















                                                                         
                            


                        
                        
                      


                              
 
                           
 
                  
 
                          




                                          
                 
                                  
                                  
 
                                                   
                    
                                            
                    

                                                  
 



                                                                          


                     
                       




                         
                                                               








                                

                                  
 




                                                              
                                                                       





                                                      





                                                            
                                                                           
     
 


                             
                           







                                                       
                        
                        
                         








                                                       
                        
                        
                         


                            
                                                                          


                             
                        
                         
     






                                                      
                         
     





                                                
                                                






                                         
                                         
 
                                                 

                   
/*
 *  The ManaPlus Client
 *  Copyright (C) 2010  The Mana Developers
 *  Copyright (C) 2011-2012  The ManaPlus Developers
 *
 *  This file is part of The ManaPlus Client.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "gui/beingpopup.h"

#include "being.h"
#include "graphics.h"
#include "playerrelations.h"
#include "units.h"

#include "gui/gui.h"
#include "gui/palette.h"
#include "gui/sdlfont.h"
#include "gui/theme.h"

#include "gui/widgets/label.h"

#include "utils/gettext.h"

#include <guichan/font.hpp>

#include "debug.h"

BeingPopup::BeingPopup() :
    Popup("BeingPopup", "beingpopup.xml"),
    mBeingName(new Label("A")),
    mBeingParty(new Label("A")),
    mBeingGuild(new Label("A")),
    mBeingRank(new Label("A")),
    mBeingComment(new Label("A"))
{
    // Being Name
    mBeingName->setFont(boldFont);
    mBeingName->setPosition(0, 0);

    const int fontHeight = mBeingName->getHeight();

    // Being's party
    mBeingParty->setPosition(0, fontHeight);
    // Being's party
    mBeingGuild->setPosition(0, 2 * fontHeight);
    mBeingRank->setPosition(0, 3 * fontHeight);
    mBeingComment->setPosition(0, 4 * fontHeight);

    mBeingParty->setForegroundColor(Theme::getThemeColor(Theme::POPUP));
    mBeingGuild->setForegroundColor(Theme::getThemeColor(Theme::POPUP));
    mBeingRank->setForegroundColor(Theme::getThemeColor(Theme::POPUP));
    mBeingComment->setForegroundColor(Theme::getThemeColor(Theme::POPUP));

    add(mBeingName);
    add(mBeingParty);
    add(mBeingGuild);
    add(mBeingRank);
    add(mBeingComment);
}

BeingPopup::~BeingPopup()
{
}

void BeingPopup::show(const int x, const int y, Being *const b)
{
    if (!b)
    {
        setVisible(false);
        return;
    }

    Label *label1 = mBeingParty;
    Label *label2 = mBeingGuild;
    Label *label3 = mBeingRank;
    Label *label4 = mBeingComment;

    b->updateComment();

    if (b->getType() == Being::NPC && b->getComment().empty())
    {
        setVisible(false);
        return;
    }

    mBeingName->setCaption(b->getName() + b->getGenderSignWithSpace());
    if (gui)
    {
        if (player_relations.isGoodName(b))
            mBeingName->setFont(boldFont);
        else
            mBeingName->setFont(gui->getSecureFont());
    }
    if (b->isAdvanced())
    {
        mBeingName->setForegroundColor(Theme::getThemeColor(
            Theme::PLAYER_ADVANCED));
    }
    else
    {
        mBeingName->setForegroundColor(Theme::getThemeColor(Theme::POPUP));
    }

    mBeingName->adjustSize();
    label1->setCaption("");
    label2->setCaption("");
    label3->setCaption("");
    label4->setCaption("");

    if (!(b->getPartyName().empty()))
    {
        label1->setCaption(strprintf(_("Party: %s"),
                           b->getPartyName().c_str()));
        label1->adjustSize();
    }
    else
    {
        label4 = label3;
        label3 = label2;
        label2 = label1;
        label1 = nullptr;
    }

    if (!(b->getGuildName().empty()))
    {
        label2->setCaption(strprintf(_("Guild: %s"),
                           b->getGuildName().c_str()));
        label2->adjustSize();
    }
    else
    {
        label4 = label3;
        label3 = label2;
        label2 = nullptr;
    }

    if (b->getPvpRank() > 0)
    {
        label3->setCaption(strprintf(_("Pvp rank: %u"), b->getPvpRank()));
        label3->adjustSize();
    }
    else
    {
        label4 = label3;
        label3 = nullptr;
    }

    if (!b->getComment().empty())
    {
        label4->setCaption(strprintf(_("Comment: %s"),
            b->getComment().c_str()));
        label4->adjustSize();
    }
    else
    {
        label4 = nullptr;
    }

    int minWidth = mBeingName->getWidth();
    if (label1 && label1->getWidth() > minWidth)
        minWidth = label1->getWidth();
    if (label2 && label2->getWidth() > minWidth)
        minWidth = label2->getWidth();
    if (label3 && label3->getWidth() > minWidth)
        minWidth = label3->getWidth();
    if (label4 && label4->getWidth() > minWidth)
        minWidth = label4->getWidth();

    int height = getFont()->getHeight();
    if (label1)
        height += getFont()->getHeight();
    if (label2)
        height += getFont()->getHeight();
    if (label3)
        height += getFont()->getHeight();
    if (label4)
        height += getFont()->getHeight();

    const int pad = 2 * getPadding();
    setContentSize(minWidth + pad, height + pad);
    position(x, y);
    return;
}