From ee90188103fc7b106b8ab15352b597f40952229b Mon Sep 17 00:00:00 2001
From: David Anderson <dvander@alliedmods.net>
Date: Tue, 2 Oct 2007 14:34:45 +0000
Subject: [PATCH] added voting category and a menu option for cancelling votes

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401529
---
 plugins/adminmenu.sp               | 15 ++++++++++++
 plugins/basecommands.sp            | 29 +++++++++++-----------
 plugins/basecommands/cancelvote.sp | 39 ++++++++++++++++++++++++++++++
 plugins/include/adminmenu.inc      |  2 ++
 4 files changed, 70 insertions(+), 15 deletions(-)
 create mode 100644 plugins/basecommands/cancelvote.sp

diff --git a/plugins/adminmenu.sp b/plugins/adminmenu.sp
index 27040b08..3ace75be 100644
--- a/plugins/adminmenu.sp
+++ b/plugins/adminmenu.sp
@@ -55,6 +55,7 @@ new Handle:hAdminMenu = INVALID_HANDLE;
 /* Top menu objects */
 new TopMenuObject:obj_playercmds = INVALID_TOPMENUOBJECT;
 new TopMenuObject:obj_servercmds = INVALID_TOPMENUOBJECT;
+new TopMenuObject:obj_votingcmds = INVALID_TOPMENUOBJECT;
 
 public bool:AskPluginLoad(Handle:myself, bool:late, String:error[], err_max)
 {
@@ -89,6 +90,12 @@ public OnAllPluginsLoaded()
 		TopMenuObject_Category,
 		CategoryHandler,
 		INVALID_TOPMENUOBJECT);
+
+	obj_votingcmds = AddToTopMenu(hAdminMenu,
+		"VotingCommands",
+		TopMenuObject_Category,
+		CategoryHandler,
+		INVALID_TOPMENUOBJECT);
 	
 	Call_StartForward(hOnAdminMenuCreated);
 	Call_PushCell(hAdminMenu);
@@ -120,6 +127,10 @@ public CategoryHandler(Handle:topmenu,
 		{
 			Format(buffer, maxlength, "%T:", "Server Commands", param);
 		}
+		else if (object_id == obj_votingcmds)
+		{
+			Format(buffer, maxlength, "%T:", "Voting Commands", param);
+		}
 	}
 	else if (action == TopMenuAction_DrawOption)
 	{
@@ -131,6 +142,10 @@ public CategoryHandler(Handle:topmenu,
 		{
 			Format(buffer, maxlength, "%T", "Server Commands", param);
 		}
+		else if (object_id == obj_votingcmds)
+		{
+			Format(buffer, maxlength, "%T", "Voting Commands", param);
+		}
 		return ITEMDRAW_DEFAULT;
 	}
 	
diff --git a/plugins/basecommands.sp b/plugins/basecommands.sp
index 36d601fc..f583c36c 100644
--- a/plugins/basecommands.sp
+++ b/plugins/basecommands.sp
@@ -50,6 +50,7 @@ new Handle:hTopMenu = INVALID_HANDLE;
 
 #include "basecommands/kick.sp"
 #include "basecommands/reloadadmins.sp"
+#include "basecommands/cancelvote.sp"
 
 public OnPluginStart()
 {
@@ -110,6 +111,19 @@ public OnAdminMenuReady(Handle:topmenu)
 			"sm_reloadadmins",
 			ADMFLAG_BAN);
 	}
+
+	new TopMenuObject:voting_commands = FindTopMenuCategory(hTopMenu, ADMINMENU_VOTINGCOMMANDS);
+
+	if (voting_commands != INVALID_TOPMENUOBJECT)
+	{
+		AddToTopMenu(hTopMenu,
+			"Cancel Vote",
+			TopMenuObject_Item,
+			AdminMenu_CancelVote,
+			voting_commands,
+			"sm_cancelvote",
+			ADMFLAG_VOTE);
+	}
 }
 
 public OnLibraryRemoved(const String:name[])
@@ -415,18 +429,3 @@ public Action:Timer_ChangeMap(Handle:timer, Handle:dp)
 	return Plugin_Stop;
 }
 
-public Action:Command_CancelVote(client, args)
-{
-	if (!IsVoteInProgress())
-	{
-		ReplyToCommand(client, "[SM] %t", "Vote Not In Progress");
-		return Plugin_Handled;
-	}
-
-	ShowActivity(client, "%t", "Cancelled Vote");
-	
-	CancelVote();
-	
-	return Plugin_Handled;
-}
-
diff --git a/plugins/basecommands/cancelvote.sp b/plugins/basecommands/cancelvote.sp
new file mode 100644
index 00000000..8cf2bb7e
--- /dev/null
+++ b/plugins/basecommands/cancelvote.sp
@@ -0,0 +1,39 @@
+
+PerformCancelVote(client)
+{
+	if (!IsVoteInProgress())
+	{
+		ReplyToCommand(client, "[SM] %t", "Vote Not In Progress");
+		return;
+	}
+
+	ShowActivity(client, "%t", "Cancelled Vote");
+	
+	CancelVote();
+}
+	
+public AdminMenu_CancelVote(Handle:topmenu, 
+							  TopMenuAction:action,
+							  TopMenuObject:object_id,
+							  param,
+							  String:buffer[],
+							  maxlength)
+{
+	if (action == TopMenuAction_DrawOption)
+	{
+		Format(buffer, maxlength, "%T", "Cancel vote", param);
+	}
+	else if (action == TopMenuAction_SelectOption)
+	{
+		PerformCancelVote(param);
+		RedisplayAdminMenu(topmenu, param);	
+	}
+}
+
+public Action:Command_CancelVote(client, args)
+{
+	PerformCancelVote(client);
+
+	return Plugin_Handled;
+}
+
diff --git a/plugins/include/adminmenu.inc b/plugins/include/adminmenu.inc
index 5e265ed6..ff8dab4c 100644
--- a/plugins/include/adminmenu.inc
+++ b/plugins/include/adminmenu.inc
@@ -54,6 +54,8 @@
 #define ADMINMENU_PLAYERCOMMANDS		"PlayerCommands"
 /** Category for server commands. */
 #define ADMINMENU_SERVERCOMMANDS		"ServerCommands"
+/** Category for voting commands. */
+#define ADMINMENU_VOTINGCOMMANDS		"VotingCommands"
 
 /**
  * Called when the admin menu is created and 3rd party plugins can grab