Merge pull request #20 from Nextra/mexit

Newmenus: Add MEXIT_FORCE and fix possible crash
This commit is contained in:
Vincent Herbet 2014-05-23 13:45:23 +02:00
commit 4d3e219d84
3 changed files with 37 additions and 23 deletions

View File

@ -361,13 +361,13 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
{ {
if (start + items_per_page >= numItems) if (start + items_per_page >= numItems)
{ {
end = numItems - 1; end = numItems;
flags &= ~Display_Next; flags &= ~Display_Next;
} else { } else {
end = start + items_per_page - 1; end = start + items_per_page;
} }
} else { } else {
end = numItems - 1; end = numItems;
if (end > 10) if (end > 10)
{ {
end = 10; end = 10;
@ -388,7 +388,7 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
int slots = 0; int slots = 0;
int option_display = 0; int option_display = 0;
for (item_t i = start; i <= end; i++) for (item_t i = start; i < end; i++)
{ {
// reset enabled // reset enabled
enabled = true; enabled = true;
@ -560,9 +560,14 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
/* Keep padding */ /* Keep padding */
option += 2; option += 2;
} }
}
if (!m_NeverExit) if ((items_per_page && !m_NeverExit) || (m_ForceExit && numItems < 10))
{ {
/* Visual pad has not been added yet */
if (!items_per_page)
m_Text.append("\n");
keys |= (1<<option++); keys |= (1<<option++);
if (m_AutoColors) if (m_AutoColors)
{ {
@ -581,7 +586,6 @@ const char *Menu::GetTextString(int player, page_t page, int &keys)
} }
m_Text.append(buffer); m_Text.append(buffer);
} }
}
return m_Text.c_str(); return m_Text.c_str();
} }
@ -990,8 +994,13 @@ static cell AMX_NATIVE_CALL menu_setprop(AMX *amx, cell *params)
if (ans == 1 || ans == 0) if (ans == 1 || ans == 0)
{ {
pMenu->m_NeverExit = false; pMenu->m_NeverExit = false;
pMenu->m_ForceExit = false;
} else if (ans == 2) {
pMenu->m_NeverExit = false;
pMenu->m_ForceExit = true;
} else if (ans == -1) { } else if (ans == -1) {
pMenu->m_NeverExit = true; pMenu->m_NeverExit = true;
pMenu->m_ForceExit = false;
} }
break; break;
} }

View File

@ -138,6 +138,7 @@ public:
String m_ItemColor; String m_ItemColor;
bool m_NeverExit; bool m_NeverExit;
bool m_ForceExit;
bool m_AutoColors; bool m_AutoColors;
int menuId; int menuId;

View File

@ -12,6 +12,10 @@
#define _newmenus_included #define _newmenus_included
#define MEXIT_ALL 1 /* Menu will have an exit option (default)*/ #define MEXIT_ALL 1 /* Menu will have an exit option (default)*/
#define MEXIT_FORCE 2 /* Menu will have an exit option, even when pagination is disabled.
* There have to be less than 10 items in the menu or it won't appear. The exit
* option will be appended to the last item with no extra slot padding. If you
* want it in the 10th slot you have to pad it manually with menu_addblank2 */
#define MEXIT_NEVER -1 /* Menu will not have an exit option */ #define MEXIT_NEVER -1 /* Menu will not have an exit option */
#define MPROP_PERPAGE 1 /* Number of items per page (param1 = number, 0=no paginating, 7=default) */ #define MPROP_PERPAGE 1 /* Number of items per page (param1 = number, 0=no paginating, 7=default) */