core/MenuStyle_Base.cpp
author David Anderson <dvander@alliedmods.net>
Sat May 12 23:50:04 2007 +0000 (2007-05-12)
changeset 771 5b857e400b1a
parent 769 d7dc79f1f93e
child 775 9c537df13ec8
permissions -rw-r--r--
test of properties
dvander@769
     1
/**
dvander@769
     2
 * vim: set ts=4 :
dvander@769
     3
 * ===============================================================
dvander@769
     4
 * SourceMod (C)2004-2007 AlliedModders LLC.  All rights reserved.
dvander@769
     5
 * ===============================================================
dvander@769
     6
 *
dvander@769
     7
 * This file is not open source and may not be copied without explicit
dvander@769
     8
 * written permission of AlliedModders LLC.  This file may not be redistributed 
dvander@769
     9
 * in whole or significant part.
dvander@769
    10
 * For information, see LICENSE.txt or http://www.sourcemod.net/license.php
dvander@769
    11
 *
dvander@769
    12
 * Version: $Id$
dvander@769
    13
 */
dvander@771
    14
dvander@769
    15
#include <stdarg.h>
dvander@769
    16
#include "sm_stringutil.h"
dvander@769
    17
#include "MenuStyle_Base.h"
dvander@769
    18
dvander@769
    19
CBaseMenu::CBaseMenu(IMenuStyle *pStyle) : 
dvander@769
    20
m_pStyle(pStyle), m_Strings(512), m_Pagination(7), m_ExitButton(true)
dvander@769
    21
{
dvander@769
    22
}
dvander@769
    23
dvander@769
    24
CBaseMenu::~CBaseMenu()
dvander@769
    25
{
dvander@769
    26
}
dvander@769
    27
dvander@769
    28
bool CBaseMenu::AppendItem(const char *info, const ItemDrawInfo &draw)
dvander@769
    29
{
dvander@769
    30
	if (m_Pagination == MENU_NO_PAGINATION
dvander@769
    31
		&& m_items.size() >= m_pStyle->GetMaxPageItems())
dvander@769
    32
	{
dvander@769
    33
		return false;
dvander@769
    34
	}
dvander@769
    35
dvander@769
    36
	CItem item;
dvander@769
    37
dvander@769
    38
	item.infoString = m_Strings.AddString(info);
dvander@769
    39
	if (draw.display)
dvander@769
    40
	{
dvander@769
    41
		item.displayString = m_Strings.AddString(draw.display);
dvander@769
    42
	}
dvander@769
    43
	item.style = draw.style;
dvander@769
    44
dvander@769
    45
dvander@769
    46
	m_items.push_back(item);
dvander@769
    47
dvander@769
    48
	return true;
dvander@769
    49
}
dvander@769
    50
dvander@769
    51
bool CBaseMenu::InsertItem(unsigned int position, const char *info, const ItemDrawInfo &draw)
dvander@769
    52
{
dvander@769
    53
	if (m_Pagination == MENU_NO_PAGINATION
dvander@769
    54
		&& m_items.size() >= m_pStyle->GetMaxPageItems())
dvander@769
    55
	{
dvander@769
    56
		return false;
dvander@769
    57
	}
dvander@769
    58
dvander@769
    59
	if (position >= m_items.size())
dvander@769
    60
	{
dvander@769
    61
		return false;
dvander@769
    62
	}
dvander@769
    63
dvander@769
    64
	CItem item;
dvander@769
    65
	item.infoString = m_Strings.AddString(info);
dvander@769
    66
	if (draw.display)
dvander@769
    67
	{
dvander@769
    68
		item.displayString = m_Strings.AddString(draw.display);
dvander@769
    69
	}
dvander@769
    70
	item.style = draw.style;
dvander@769
    71
dvander@769
    72
	CVector<CItem>::iterator iter = m_items.iterAt(position);
dvander@769
    73
	m_items.insert(iter, item);
dvander@769
    74
dvander@769
    75
	return true;
dvander@769
    76
}
dvander@769
    77
dvander@769
    78
bool CBaseMenu::RemoveItem(unsigned int position)
dvander@769
    79
{
dvander@769
    80
	if (position >= m_items.size())
dvander@769
    81
	{
dvander@769
    82
		return false;
dvander@769
    83
	}
dvander@769
    84
dvander@769
    85
	m_items.erase(m_items.iterAt(position));
dvander@769
    86
dvander@769
    87
	if (m_items.size() == 0)
dvander@769
    88
	{
dvander@769
    89
		m_Strings.Reset();
dvander@769
    90
	}
dvander@769
    91
dvander@769
    92
	return true;
dvander@769
    93
}
dvander@769
    94
dvander@769
    95
void CBaseMenu::RemoveAllItems()
dvander@769
    96
{
dvander@769
    97
	m_items.clear();
dvander@769
    98
	m_Strings.Reset();
dvander@769
    99
}
dvander@769
   100
dvander@769
   101
const char *CBaseMenu::GetItemInfo(unsigned int position, ItemDrawInfo *draw/* =NULL */)
dvander@769
   102
{
dvander@769
   103
	if (position >= m_items.size())
dvander@769
   104
	{
dvander@769
   105
		return NULL;
dvander@769
   106
	}
dvander@769
   107
dvander@769
   108
	if (draw)
dvander@769
   109
	{
dvander@769
   110
		draw->display = m_Strings.GetString(m_items[position].displayString);
dvander@769
   111
		draw->style = m_items[position].style;
dvander@769
   112
	}
dvander@769
   113
dvander@769
   114
	return m_Strings.GetString(m_items[position].infoString);
dvander@769
   115
}
dvander@769
   116
dvander@769
   117
unsigned int CBaseMenu::GetItemCount()
dvander@769
   118
{
dvander@769
   119
	return m_items.size();
dvander@769
   120
}
dvander@769
   121
dvander@769
   122
bool CBaseMenu::SetPagination(unsigned int itemsPerPage)
dvander@769
   123
{
dvander@769
   124
	if (itemsPerPage > 7)
dvander@769
   125
	{
dvander@769
   126
		return false;
dvander@769
   127
	}
dvander@769
   128
dvander@769
   129
	m_Pagination = itemsPerPage;
dvander@769
   130
dvander@769
   131
	return true;
dvander@769
   132
}
dvander@769
   133
dvander@769
   134
unsigned int CBaseMenu::GetPagination()
dvander@769
   135
{
dvander@769
   136
	return m_Pagination;
dvander@769
   137
}
dvander@769
   138
dvander@769
   139
IMenuStyle *CBaseMenu::GetDrawStyle()
dvander@769
   140
{
dvander@769
   141
	return m_pStyle;
dvander@769
   142
}
dvander@769
   143
dvander@769
   144
void CBaseMenu::SetDefaultTitle(const char *message)
dvander@769
   145
{
dvander@769
   146
	m_Title.assign(message);
dvander@769
   147
}
dvander@769
   148
dvander@769
   149
const char *CBaseMenu::GetDefaultTitle()
dvander@769
   150
{
dvander@769
   151
	return m_Title.c_str();
dvander@769
   152
}
dvander@769
   153
dvander@769
   154
bool CBaseMenu::GetExitButton()
dvander@769
   155
{
dvander@769
   156
	return m_ExitButton;
dvander@769
   157
}
dvander@769
   158
dvander@769
   159
bool CBaseMenu::SetExitButton(bool set)
dvander@769
   160
{
dvander@769
   161
	m_ExitButton = set;
dvander@769
   162
	return true;
dvander@769
   163
}