| 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-- |
| 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 |
} |