mirror of
https://github.com/FunKey-Project/RetroFE.git
synced 2025-12-26 16:48:51 +01:00
292 lines
8.1 KiB
C++
292 lines
8.1 KiB
C++
/* This file is part of RetroFE.
|
|
*
|
|
* RetroFE 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 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* RetroFE 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 RetroFE. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "ReloadableText.h"
|
|
#include "../ViewInfo.h"
|
|
#include "../../Database/Configuration.h"
|
|
#include "../../Utility/Log.h"
|
|
#include "../../SDL.h"
|
|
#include <fstream>
|
|
#include <vector>
|
|
#include <iostream>
|
|
#include <time.h>
|
|
#include <algorithm>
|
|
|
|
ReloadableText::ReloadableText(std::string type, Page &page, Configuration &config, Font *font, std::string layoutKey, std::string timeFormat, std::string textFormat, std::string singlePrefix, std::string singlePostfix, std::string pluralPrefix, std::string pluralPostfix, int displayOffset, float scaleX, float scaleY)
|
|
: Component(page)
|
|
, config_(config)
|
|
, imageInst_(NULL)
|
|
, type_(type)
|
|
, layoutKey_(layoutKey)
|
|
, fontInst_(font)
|
|
, timeFormat_(timeFormat)
|
|
, textFormat_(textFormat)
|
|
, singlePrefix_(singlePrefix)
|
|
, singlePostfix_(singlePostfix)
|
|
, pluralPrefix_(pluralPrefix)
|
|
, pluralPostfix_(pluralPostfix)
|
|
, displayOffset_(displayOffset)
|
|
, scaleX_(scaleX)
|
|
, scaleY_(scaleY)
|
|
{
|
|
allocateGraphicsMemory();
|
|
}
|
|
|
|
|
|
|
|
ReloadableText::~ReloadableText()
|
|
{
|
|
if (imageInst_ != NULL)
|
|
{
|
|
delete imageInst_;
|
|
}
|
|
}
|
|
|
|
void ReloadableText::update(float dt)
|
|
{
|
|
if (newItemSelected ||
|
|
(newScrollItemSelected && getMenuScrollReload()) ||
|
|
type_ == "time")
|
|
{
|
|
ReloadTexture();
|
|
newItemSelected = false;
|
|
}
|
|
|
|
// needs to be ran at the end to prevent the NewItemSelected flag from being detected
|
|
Component::update(dt);
|
|
|
|
}
|
|
|
|
void ReloadableText::allocateGraphicsMemory()
|
|
{
|
|
ReloadTexture();
|
|
|
|
// NOTICE! needs to be done last to prevent flags from being missed
|
|
Component::allocateGraphicsMemory();
|
|
}
|
|
|
|
|
|
void ReloadableText::freeGraphicsMemory()
|
|
{
|
|
Component::freeGraphicsMemory();
|
|
|
|
if (imageInst_ != NULL)
|
|
{
|
|
delete imageInst_;
|
|
imageInst_ = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void ReloadableText::initializeFonts()
|
|
{
|
|
fontInst_->initialize();
|
|
}
|
|
|
|
|
|
void ReloadableText::deInitializeFonts()
|
|
{
|
|
fontInst_->deInitialize();
|
|
}
|
|
|
|
|
|
void ReloadableText::ReloadTexture()
|
|
{
|
|
if (imageInst_ != NULL)
|
|
{
|
|
delete imageInst_;
|
|
imageInst_ = NULL;
|
|
}
|
|
|
|
Item *selectedItem = page.getSelectedItem( displayOffset_ );
|
|
|
|
if (selectedItem != NULL)
|
|
{
|
|
std::stringstream ss;
|
|
std::string text = "";
|
|
if (type_ == "time")
|
|
{
|
|
time_t now = time(0);
|
|
struct tm tstruct;
|
|
char buf[80];
|
|
tstruct = *localtime(&now);
|
|
strftime(buf, sizeof(buf), timeFormat_.c_str(), &tstruct);
|
|
ss << buf;
|
|
}
|
|
if (type_ == "numberButtons")
|
|
{
|
|
text = selectedItem->numberButtons;
|
|
}
|
|
else if (type_ == "numberPlayers")
|
|
{
|
|
text = selectedItem->numberPlayers;
|
|
}
|
|
else if (type_ == "ctrlType")
|
|
{
|
|
text = selectedItem->ctrlType;
|
|
}
|
|
else if (type_ == "numberJoyWays")
|
|
{
|
|
text = selectedItem->joyWays;
|
|
}
|
|
else if (type_ == "rating")
|
|
{
|
|
text = selectedItem->rating;
|
|
}
|
|
else if (type_ == "score")
|
|
{
|
|
text = selectedItem->score;
|
|
}
|
|
else if (type_ == "year")
|
|
{
|
|
text = selectedItem->year;
|
|
}
|
|
else if (type_ == "title")
|
|
{
|
|
text = selectedItem->title;
|
|
}
|
|
else if(type_ == "developer")
|
|
{
|
|
text = selectedItem->developer;
|
|
// Overwrite in case developer has not been specified
|
|
if (text == "")
|
|
{
|
|
text = selectedItem->manufacturer;
|
|
}
|
|
}
|
|
else if (type_ == "manufacturer")
|
|
{
|
|
text = selectedItem->manufacturer;
|
|
}
|
|
else if (type_ == "genre")
|
|
{
|
|
text = selectedItem->genre;
|
|
}
|
|
else if (type_ == "playlist")
|
|
{
|
|
text = playlistName;
|
|
}
|
|
else if (type_ == "firstLetter")
|
|
{
|
|
text = selectedItem->fullTitle.at(0);
|
|
}
|
|
else if (type_ == "collectionName")
|
|
{
|
|
text = page.getCollectionName();
|
|
}
|
|
else if (type_ == "collectionSize")
|
|
{
|
|
if (page.getCollectionSize() == 0)
|
|
{
|
|
ss << singlePrefix_ << page.getCollectionSize() << pluralPostfix_;
|
|
}
|
|
else if (page.getCollectionSize() == 1)
|
|
{
|
|
ss << singlePrefix_ << page.getCollectionSize() << singlePostfix_;
|
|
}
|
|
else
|
|
{
|
|
ss << pluralPrefix_ << page.getCollectionSize() << pluralPostfix_;
|
|
}
|
|
}
|
|
else if (type_ == "collectionIndex")
|
|
{
|
|
if (page.getSelectedIndex() == 0)
|
|
{
|
|
ss << singlePrefix_ << (page.getSelectedIndex()+1) << pluralPostfix_;
|
|
}
|
|
else if (page.getSelectedIndex() == 1)
|
|
{
|
|
ss << singlePrefix_ << (page.getSelectedIndex()+1) << singlePostfix_;
|
|
}
|
|
else
|
|
{
|
|
ss << pluralPrefix_ << (page.getSelectedIndex()+1) << pluralPostfix_;
|
|
}
|
|
}
|
|
else if (type_ == "collectionIndexSize")
|
|
{
|
|
if (page.getSelectedIndex() == 0)
|
|
{
|
|
ss << singlePrefix_ << (page.getSelectedIndex()+1) << "/" << page.getCollectionSize() << pluralPostfix_;
|
|
}
|
|
else if (page.getSelectedIndex() == 1)
|
|
{
|
|
ss << singlePrefix_ << (page.getSelectedIndex()+1) << "/" << page.getCollectionSize() << singlePostfix_;
|
|
}
|
|
else
|
|
{
|
|
ss << pluralPrefix_ << (page.getSelectedIndex()+1) << "/" << page.getCollectionSize() << pluralPostfix_;
|
|
}
|
|
}
|
|
|
|
if (!selectedItem->leaf) // item is not a leaf
|
|
{
|
|
(void)config_.getProperty("collections." + selectedItem->name + "." + type_, text );
|
|
}
|
|
|
|
bool overwriteXML = false;
|
|
config_.getProperty( "overwriteXML", overwriteXML );
|
|
if ( text == "" || overwriteXML ) // No text was found yet; check the info in stead
|
|
{
|
|
std::string text_tmp;
|
|
selectedItem->getInfo( type_, text_tmp );
|
|
if ( text_tmp != "" )
|
|
{
|
|
text = text_tmp;
|
|
}
|
|
}
|
|
|
|
if (text == "0")
|
|
{
|
|
text = singlePrefix_ + text + pluralPostfix_;
|
|
}
|
|
else if (text == "1")
|
|
{
|
|
text = singlePrefix_ + text + singlePostfix_;
|
|
}
|
|
else if (text != "")
|
|
{
|
|
text = pluralPrefix_ + text + pluralPostfix_;
|
|
}
|
|
|
|
if (text != "")
|
|
{
|
|
if (textFormat_ == "uppercase")
|
|
{
|
|
std::transform(text.begin(), text.end(), text.begin(), ::toupper);
|
|
}
|
|
if (textFormat_ == "lowercase")
|
|
{
|
|
std::transform(text.begin(), text.end(), text.begin(), ::tolower);
|
|
}
|
|
ss << text;
|
|
}
|
|
|
|
imageInst_ = new Text(ss.str(), page, fontInst_, scaleX_, scaleY_);
|
|
}
|
|
}
|
|
|
|
|
|
void ReloadableText::draw()
|
|
{
|
|
if(imageInst_)
|
|
{
|
|
imageInst_->baseViewInfo = baseViewInfo;
|
|
imageInst_->draw();
|
|
}
|
|
}
|