about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorChoupom <andycootlapin@hotmail.fr>2010-09-03 20:05:22 +0200
committeroy <Tom_Adams@web.de>2010-09-05 17:40:51 +0200
commitfcfaa8389f968bc89fbd4afbfc70ea7c3815c7bb (patch)
tree1633fe299e51715b94a07bc14637399ccd356dae /src
parent2800832e12684b5961bbef5291922d11e23b032a (diff)
downloadzcatch-fcfaa8389f968bc89fbd4afbfc70ea7c3815c7bb.tar.gz
zcatch-fcfaa8389f968bc89fbd4afbfc70ea7c3815c7bb.zip
added Remove button in demos browser (#66)
Diffstat (limited to 'src')
-rw-r--r--src/engine/shared/storage.cpp13
-rw-r--r--src/engine/storage.h1
-rw-r--r--src/game/client/components/menus.cpp14
-rw-r--r--src/game/client/components/menus.h1
-rw-r--r--src/game/client/components/menus_demo.cpp19
5 files changed, 41 insertions, 7 deletions
diff --git a/src/engine/shared/storage.cpp b/src/engine/shared/storage.cpp
index e8b0f8bb..74f7cd3f 100644
--- a/src/engine/shared/storage.cpp
+++ b/src/engine/shared/storage.cpp
@@ -1,4 +1,5 @@
 // copyright (c) 2007 magnus auvinen, see licence.txt for more info
+#include <stdio.h> //remove()
 #include <base/system.h>
 #include <engine/storage.h>
 #include "engine.h"
@@ -193,6 +194,18 @@ public:
 		pBuffer[0] = 0;
 		return 0;		
 	}
+ 	
+	virtual bool RemoveFile(const char *pFilename)
+	{
+		char aBuffer[1024];
+		str_format(aBuffer, sizeof(aBuffer), "%s/%s", m_aApplicationSavePath, pFilename);
+		bool Fail = remove(aBuffer);
+		
+		if(Fail)
+			Fail = remove(pFilename);
+		
+		return !Fail;
+	}
 
 	static IStorage *Create(const char *pApplicationName, int NumArgs, const char **ppArguments)
 	{
diff --git a/src/engine/storage.h b/src/engine/storage.h
index 4c80446e..c79f16a8 100644
--- a/src/engine/storage.h
+++ b/src/engine/storage.h
@@ -17,6 +17,7 @@ public:
 	
 	virtual void ListDirectory(int Types, const char *pPath, FS_LISTDIR_CALLBACK pfnCallback, void *pUser) = 0;
 	virtual IOHANDLE OpenFile(const char *pFilename, int Flags, char *pBuffer = 0, int BufferSize = 0) = 0;
+	virtual bool RemoveFile(const char *pFilename) = 0;
 };
 
 extern IStorage *CreateStorage(const char *pApplicationName, int NumArgs, const char **ppArguments);
diff --git a/src/game/client/components/menus.cpp b/src/game/client/components/menus.cpp
index 42f68978..f1250914 100644
--- a/src/game/client/components/menus.cpp
+++ b/src/game/client/components/menus.cpp
@@ -91,6 +91,7 @@ CMenus::CMenus()
 	
 	m_EscapePressed = false;
 	m_EnterPressed = false;
+	m_DeletePressed = false;
 	m_NumInputEvents = 0;
 	
 	m_LastInput = time_get();
@@ -1029,9 +1030,14 @@ bool CMenus::OnInput(IInput::CEvent e)
 		
 	if(IsActive())
 	{
-		// special for popups
-		if(e.m_Flags&IInput::FLAG_PRESS && e.m_Key == KEY_RETURN)
-			m_EnterPressed = true;
+		if(e.m_Flags&IInput::FLAG_PRESS)
+		{
+			// special for popups
+			if(e.m_Key == KEY_RETURN)
+				m_EnterPressed = true;
+			else if(e.m_Key == KEY_DELETE)
+				m_DeletePressed = true;
+		}
 		
 		if(m_NumInputEvents < MAX_INPUTEVENTS)
 			m_aInputEvents[m_NumInputEvents++] = e;
@@ -1116,6 +1122,7 @@ void CMenus::OnRender()
 	{
 		m_EscapePressed = false;
 		m_EnterPressed = false;
+		m_DeletePressed = false;
 		m_NumInputEvents = 0;
 		return;
 	}
@@ -1183,6 +1190,7 @@ void CMenus::OnRender()
 
 	m_EscapePressed = false;
 	m_EnterPressed = false;
+	m_DeletePressed = false;
 	m_NumInputEvents = 0;
 }
 
diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h
index de711a1e..ec2ff264 100644
--- a/src/game/client/components/menus.h
+++ b/src/game/client/components/menus.h
@@ -146,6 +146,7 @@ class CMenus : public CComponent
 	//
 	bool m_EscapePressed;
 	bool m_EnterPressed;
+	bool m_DeletePressed;
 	
 	// for call vote
 	int m_CallvoteSelectedOption;
diff --git a/src/game/client/components/menus_demo.cpp b/src/game/client/components/menus_demo.cpp
index ae4873c1..5321b087 100644
--- a/src/game/client/components/menus_demo.cpp
+++ b/src/game/client/components/menus_demo.cpp
@@ -4,6 +4,7 @@
 #include <engine/demo.h>
 #include <engine/keys.h>
 #include <engine/graphics.h>
+#include <engine/storage.h>
 
 #include <game/client/render.h>
 #include <game/client/gameclient.h>
@@ -472,10 +473,11 @@ void CMenus::RenderDemoList(CUIRect MainView)
 	bool Activated = false;
 	s_SelectedItem = UiDoListboxEnd(&s_ScrollValue, &Activated);
 	
-	CUIRect RefreshRect, PlayRect;
-	ButtonBar.VSplitRight(250.0f, &ButtonBar, &RefreshRect);
-	RefreshRect.VSplitRight(130.0f, &RefreshRect, &PlayRect);
-	PlayRect.VSplitRight(120.0f, 0x0, &PlayRect);
+	CUIRect RefreshRect, PlayRect, DeleteRect;
+	ButtonBar.VSplitRight(130.0f, &ButtonBar, &PlayRect);
+	ButtonBar.VSplitLeft(130.0f, &RefreshRect, &ButtonBar);
+	ButtonBar.VSplitLeft(10.0f, &DeleteRect, &ButtonBar);
+	ButtonBar.VSplitLeft(120.0f, &DeleteRect, &ButtonBar);
 	
 	bool IsDir = false;
 	if(s_SelectedItem >= 0 && s_SelectedItem < m_lDemos.size())
@@ -524,6 +526,15 @@ void CMenus::RenderDemoList(CUIRect MainView)
 		}
 	}
 	
+	static int s_DeleteButton = 0;
+	if(DoButton_Menu(&s_DeleteButton, Localize("Delete"), 0, &DeleteRect) || m_DeletePressed)
+	{
+		if(s_SelectedItem >= 0 && s_SelectedItem < m_lDemos.size() && !IsDir)
+		{
+			Storage()->RemoveFile(m_lDemos[s_SelectedItem].m_aFilename);
+			DemolistPopulate();
+		}
+	}
 }
 
 void CMenus::DemoSetParentDirectory()