[Scummvm-cvs-logs] SF.net SVN: scummvm:[42687] tools/branches/gsoc2009-gui

Remere at users.sourceforge.net Remere at users.sourceforge.net
Fri Jul 24 09:53:06 CEST 2009


Revision: 42687
          http://scummvm.svn.sourceforge.net/scummvm/?rev=42687&view=rev
Author:   Remere
Date:     2009-07-24 07:53:05 +0000 (Fri, 24 Jul 2009)

Log Message:
-----------
*Moved more functionality from ToolGUI to Tool
*ToolsGUI now inherits Tools, so you only need to list all supported tools in one place.

Modified Paths:
--------------
    tools/branches/gsoc2009-gui/gui/gui_tools.cpp
    tools/branches/gsoc2009-gui/gui/gui_tools.h
    tools/branches/gsoc2009-gui/gui/main.cpp
    tools/branches/gsoc2009-gui/gui/pages.cpp
    tools/branches/gsoc2009-gui/tools.cpp
    tools/branches/gsoc2009-gui/tools.h

Modified: tools/branches/gsoc2009-gui/gui/gui_tools.cpp
===================================================================
--- tools/branches/gsoc2009-gui/gui/gui_tools.cpp	2009-07-24 07:51:38 UTC (rev 42686)
+++ tools/branches/gsoc2009-gui/gui/gui_tools.cpp	2009-07-24 07:53:05 UTC (rev 42687)
@@ -32,115 +32,63 @@
 
 #include <algorithm>
 
+#include "../compress.h"
 #include "gui_tools.h"
 
-// Include all tools
-#include "../compress_agos.h"
-#include "../compress_gob.h"
-#include "../compress_kyra.h"
-#include "../compress_queen.h"
-#include "../compress_saga.h"
-#include "../compress_scumm_bun.h"
-#include "../compress_scumm_san.h"
-#include "../compress_scumm_sou.h"
-#include "../compress_sword1.h"
-#include "../compress_sword2.h"
-#include "../compress_touche.h"
-#include "../compress_tinsel.h"
-#include "../compress_touche.h"
-#include "../compress_tucker.h"
-#include "../encode_dxa.h"
-#include "../extract_agos.h"
-#include "../extract_gob_stk.h"
-#include "../extract_kyra.h"
-#include "../extract_loom_tg16.h"
-#include "../extract_mm_apple.h"
-#include "../extract_mm_c64.h"
-#include "../extract_mm_nes.h"
-#include "../extract_parallaction.h"
-#include "../extract_scumm_mac.h"
-#include "../extract_zak_c64.h"
-
-
 // Our global tools object, which holds all tools
-Tools g_tools;
+ToolsGUI g_tools;
 
-Tools::Tools() {
+ToolsGUI::ToolsGUI() {
 }
 
-void Tools::init() {
-
-	// Compress agos also has a --mac parameter, need to add an additional page / option for this
-	addTool(new ToolGUI(new CompressAgos()));
-	// Compress gob also has a --f parameter, need to add an additional page / option for this
-	addTool(new ToolGUI(new CompressGob()));
-	addTool(new ToolGUI(new CompressKyra()));
-	addTool(new ToolGUI(new CompressQueen()));
-	addTool(new ToolGUI(new CompressSaga()));
-	addTool(new ToolGUI(new CompressScummBun()));
-	addTool(new ToolGUI(new CompressScummSan()));
-	addTool(new ToolGUI(new CompressScummSou()));
-	addTool(new ToolGUI(new CompressSword1()));
-	addTool(new ToolGUI(new CompressSword2()));
-	addTool(new ToolGUI(new CompressTinsel()));
-	addTool(new ToolGUI(new CompressTouche()));
-	addTool(new ToolGUI(new CompressTucker()));
-	addTool(new ToolGUI(new EncodeDXA(), TOOLTYPE_COMPRESSION));
-
-	addTool(new ToolGUI(new ExtractAgos()));
-	addTool(new ToolGUI(new ExtractGobStk()));
-	addTool(new ToolGUI(new ExtractKyra()));
-	addTool(new ToolGUI(new ExtractLoomTG16()));
-	addTool(new ToolGUI(new ExtractMMApple()));
-	addTool(new ToolGUI(new ExtractMMC64()));
-	addTool(new ToolGUI(new ExtractMMNes()));
-	addTool(new ToolGUI(new ExtractParallaction()));
-	addTool(new ToolGUI(new ExtractScummMac()));
-	addTool(new ToolGUI(new ExtractZakC64()));
+void ToolsGUI::init() {
+	for (ToolList::iterator tool = _tools.begin(); tool != _tools.end(); ++tool)
+		_toolmap[wxString((*tool)->getName().c_str(), wxConvUTF8)] = new ToolGUI(*tool);
 }
 
-Tools::~Tools() {
-	for (std::map<wxString, ToolGUI *>::iterator iter = tools.begin(); iter != tools.end(); ++iter)
+ToolsGUI::~ToolsGUI() {
+	for (std::map<wxString, ToolGUI *>::iterator iter = _toolmap.begin(); iter != _toolmap.end(); ++iter)
 		delete iter->second;
 }
 
-void Tools::addTool(ToolGUI* tool) {
-	tools[tool->_name] = tool;
-}
-
-wxArrayString Tools::getToolList(ToolType tt) const {
+wxArrayString ToolsGUI::getToolList(ToolType tt) const {
 	wxArrayString l;
-	for (std::map<wxString, ToolGUI *>::const_iterator iter = tools.begin(); iter != tools.end(); ++iter)
-		if (tt == TOOLTYPE_ALL || iter->second->_type == tt)
+	for (std::map<wxString, ToolGUI *>::const_iterator iter = _toolmap.begin(); iter != _toolmap.end(); ++iter)
+		if (tt == TOOLTYPE_ALL || iter->second->getType() == tt)
 			l.Add(iter->first);
 	l.Sort();
 	std::unique(l.begin(), l.end());
 	return l;
 }
 
-wxArrayString Tools::getToolList(const Filename &filename, ToolType tt) const {
+wxArrayString ToolsGUI::getToolList(const Filename &filename, ToolType tt) const {
 	wxArrayString l;
-	for (std::map<wxString, ToolGUI *>::const_iterator iter = tools.begin(); iter != tools.end(); ++iter)
-		if (tt == TOOLTYPE_ALL || iter->second->_type == tt)
-			if (iter->second->inspectInput(filename))
-				l.Add(iter->second->_name);
+
+	for (std::map<wxString, ToolGUI *>::const_iterator tool = _toolmap.begin(); tool != _toolmap.end(); ++tool) {
+		if (tt == TOOLTYPE_ALL || tool->second->getType() == tt) {
+			if(tool->second->inspectInput(filename)) {
+				l.Add(tool->second->getName());
+			}
+		}
+	}
+
 	l.Sort();
 	std::unique(l.begin(), l.end());
 	return l;
 }
 
-const ToolGUI &Tools::operator[](const wxString& name) const {
-	std::map<wxString, ToolGUI *>::const_iterator iter = tools.find(name);
+const ToolGUI &ToolsGUI::operator[](const wxString& name) const {
+	std::map<wxString, ToolGUI *>::const_iterator iter = _toolmap.find(name);
 
-	wxASSERT_MSG(iter != tools.end(), wxT("All tools should be added, never try to access a tool that does not exist."));
+	wxASSERT_MSG(iter != _toolmap.end(), wxT("All tools should be added, never try to access a tool that does not exist."));
 
 	return *iter->second;
 }
 
-const ToolGUI *Tools::get(const wxString& name) const {
-	std::map<wxString, ToolGUI *>::const_iterator iter = tools.find(name);
+const ToolGUI *ToolsGUI::get(const wxString& name) const {
+	std::map<wxString, ToolGUI *>::const_iterator iter = _toolmap.find(name);
 
-	if (iter == tools.end())
+	if (iter == _toolmap.end())
 		return NULL;
 
 	return iter->second;
@@ -150,25 +98,11 @@
 
 ToolGUI::ToolGUI(Tool *tool, ToolType type) {
 	_backend = tool;
-	_name = wxString(tool->_name.c_str(), wxConvUTF8);
-
-	if(type == TOOLTYPE_UNKNOWN) {
-		if (_name.Find(wxT("extract")) != wxNOT_FOUND)
-			_type = TOOLTYPE_EXTRACTION;
-		else if (_name.Find(wxT("compress")) != wxNOT_FOUND)
-			_type = TOOLTYPE_COMPRESSION;
-		else {
-			wxLogError(wxT("Tools with unknown type shouldn't exist."));
-			_type = TOOLTYPE_UNKNOWN;
-		}
-	} else
-		_type = type;
-
-	_inHelpText = wxT("Please select any additional input files.");
 }
 
 ToolGUI::~ToolGUI() {
-	delete _backend;
+	//The parent Tools client deletes the backends
+	//delete _backend;
 }
 
 bool ToolGUI::inspectInput(const Filename &filename) const {
@@ -179,6 +113,18 @@
 	return _backend->_inputPaths;
 }
 
+wxString ToolGUI::getName() const {
+	return wxString(_backend->getName().c_str(), wxConvUTF8);
+}
+
+wxString ToolGUI::getHelp() const {
+	return wxString(_backend->getHelp().c_str(), wxConvUTF8);
+}
+
+ToolType ToolGUI::getType() const {
+	return _backend->getType();
+}
+
 bool ToolGUI::supportsAudioFormat(AudioFormat format) const {
 	return (_backend->_supportedFormats & format) == format;
 }
@@ -199,6 +145,8 @@
 
 	CompressionTool *compression = dynamic_cast<CompressionTool *>(_backend);
 	if (compression) {
+		compression->_format               = conf.selectedAudioFormat;
+
 		// mp3
 		compression->_mp3ABRBitrate        = (const char *)conf.mp3ABRBitrate.mb_str();
 		compression->_mp3CompressionType   = (const char *)conf.mp3CompressionType.mb_str();
@@ -224,8 +172,8 @@
 
 wxString ToolGUI::getExecutable() const {
 #ifdef WIN32
-	return _name + wxT(".exe");
+	return getName() + wxT(".exe");
 #else
-	return _name;
+	return getName();
 #endif
 }

Modified: tools/branches/gsoc2009-gui/gui/gui_tools.h
===================================================================
--- tools/branches/gsoc2009-gui/gui/gui_tools.h	2009-07-24 07:51:38 UTC (rev 42686)
+++ tools/branches/gsoc2009-gui/gui/gui_tools.h	2009-07-24 07:53:05 UTC (rev 42687)
@@ -20,8 +20,8 @@
  *
  */
 
-#ifndef TOOLS_H
-#define TOOLS_H
+#ifndef GUI_TOOLS_H
+#define GUI_TOOLS_H
 
 #include <wx/string.h>
 
@@ -29,7 +29,7 @@
 #include <vector>
 
 #include "configuration.h"
-#include "../tool.h"
+#include "../tools.h"
 
 
 /**
@@ -73,10 +73,26 @@
 	bool inspectInput(const Filename &filename) const;
 
 	/**
-	 *
+	 * Returns the list of valid inputs of this tool, along with the 
+	 * paths already set (if applicable)
 	 */
 	ToolInputs getInputList() const;
 
+	/**
+	 * Returns the name of the tool
+	 */
+	wxString getName() const;
+
+	/**
+	 * Returns the helptext of the tool
+	 */
+	wxString getHelp() const;
+
+	/**
+	 * Returns the type of the tool
+	 */
+	ToolType getType() const;
+
 	// Helper functions to get info about the tool
 	
 	/**
@@ -107,22 +123,15 @@
 	 */
 	void run(const Configuration &conf) const;
 
-
-	/** Name of the tool */
-	wxString _name;
 	/** The actual tool instance, which runs the compression/extraction */
 	Tool *_backend;
-	/** Type of tool, either extract, compress or unknown */
-	ToolType _type;
-	/** The help text displayed on the input/output page */
-	wxString _inHelpText;
 };
 
 // Collection of all tools
-class Tools {
+class ToolsGUI : public Tools {
 public:
-	Tools();
-	~Tools();
+	ToolsGUI();
+	~ToolsGUI();
 
 	/**
 	 * Must be called before the tools can be used
@@ -166,16 +175,9 @@
 	wxArrayString getToolList(const Filename &filename, ToolType tt = TOOLTYPE_ALL) const;
 
 protected:
-	/**
-	 * Adds a supported tool. Should not be done after construction, since it might break pointers
-	 *
-	 * @param tool the tool to add.
-	 */
-	void addTool(ToolGUI *tool);
-
-	std::map<wxString, ToolGUI *> tools;
+	std::map<wxString, ToolGUI *> _toolmap;
 };
 
-extern Tools g_tools;
+extern ToolsGUI g_tools;
 
 #endif

Modified: tools/branches/gsoc2009-gui/gui/main.cpp
===================================================================
--- tools/branches/gsoc2009-gui/gui/main.cpp	2009-07-24 07:51:38 UTC (rev 42686)
+++ tools/branches/gsoc2009-gui/gui/main.cpp	2009-07-24 07:53:05 UTC (rev 42687)
@@ -36,7 +36,7 @@
 #include "main.h"
 
 #include "pages.h"
-#include "tools.h"
+#include "gui_tools.h"
 
 class ScummVMToolsApp : public wxApp
 {

Modified: tools/branches/gsoc2009-gui/gui/pages.cpp
===================================================================
--- tools/branches/gsoc2009-gui/gui/pages.cpp	2009-07-24 07:51:38 UTC (rev 42686)
+++ tools/branches/gsoc2009-gui/gui/pages.cpp	2009-07-24 07:53:05 UTC (rev 42687)
@@ -198,7 +198,7 @@
 
 	// Load configuration
 	if (_configuration.selectedTool != NULL)
-		tool->SetStringSelection(_configuration.selectedTool->_name);
+		tool->SetStringSelection(_configuration.selectedTool->getName());
 
 	return panel;
 }
@@ -373,7 +373,7 @@
 	const ToolGUI &tool = *_configuration.selectedTool;
 
 	// some help perhaps?
-	sizer->Add(new wxStaticText(panel, wxID_ANY, tool._inHelpText));
+	sizer->Add(new wxStaticText(panel, wxID_ANY, tool.getHelp()));
 
 	sizer->AddSpacer(10);
 
@@ -538,7 +538,7 @@
 }
 
 void ChooseOutPage::onNext(wxWindow *panel) {
-	if (_configuration.selectedTool->_type == TOOLTYPE_COMPRESSION)
+	if (_configuration.selectedTool->getType() == TOOLTYPE_COMPRESSION)
 		switchPage(new ChooseAudioFormatPage(_topframe));
 	else
 		switchPage(new ProcessPage(_topframe));
@@ -1021,7 +1021,7 @@
 	const ToolGUI *tool = _configuration.selectedTool;
 
 	// Write some text that we've started...
-	_outwin->WriteText(wxT("Running ") + tool->_name + wxT("\n\n"));
+	_outwin->WriteText(wxT("Running ") + tool->getName() + wxT("\n\n"));
 
 	// Child thread to run the tool
 	_thread = new ProcessToolThread(tool, _configuration, _output);
@@ -1222,7 +1222,7 @@
 	sizer->AddSpacer(15);
 
 	wxString text;
-	if (_configuration.selectedTool->_type == TOOLTYPE_COMPRESSION)
+	if (_configuration.selectedTool->getType() == TOOLTYPE_COMPRESSION)
 		text = wxT("You have finished the wizard! Your files should now be compressed.");
 	else
 		text = wxT("You have finished the wizard! Your files should now be extracted.");

Modified: tools/branches/gsoc2009-gui/tools.cpp
===================================================================
--- tools/branches/gsoc2009-gui/tools.cpp	2009-07-24 07:51:38 UTC (rev 42686)
+++ tools/branches/gsoc2009-gui/tools.cpp	2009-07-24 07:53:05 UTC (rev 42687)
@@ -67,7 +67,7 @@
 	_tools.push_back(new CompressTinsel());
 	_tools.push_back(new CompressTouche());
 	_tools.push_back(new CompressTucker());
-	//_tools.push_back(new EncodeDXA());
+	_tools.push_back(new EncodeDXA());
 
 	_tools.push_back(new ExtractAgos());
 	_tools.push_back(new ExtractGobStk());
@@ -82,17 +82,16 @@
 }
 
 Tools::~Tools() {
-	for (ToolList::iterator iter = _tools.begin(); iter != _tools.end(); ++iter) {
+	for (ToolList::iterator iter = _tools.begin(); iter != _tools.end(); ++iter)
 		delete *iter;
-	}
 }
 
-Tools::ToolList Tools::inspectInput(ToolType type, std::deque<char *> arguments) {
+Tools::ToolList Tools::inspectInput(ToolType type, std::deque<char *> files) const {
 	ToolList choices;
-	for (ToolList::iterator tool = _tools.begin(); tool != _tools.end(); ++tool) {
+	for (ToolList::const_iterator tool = _tools.begin(); tool != _tools.end(); ++tool) {
 		if (type == TOOLTYPE_ALL || (*tool)->getType() == type) {
-			if ((*tool)->_inputPaths.size() == arguments.size()) {
-				for (std::deque<char *>::const_iterator filename = arguments.begin(); filename != arguments.end(); ++filename) {
+			if ((*tool)->_inputPaths.size() == files.size()) {
+				for (std::deque<char *>::const_iterator filename = files.begin(); filename != files.end(); ++filename) {
 					if((*tool)->inspectInput(*filename)) {
 						choices.push_back(*tool);
 						break;

Modified: tools/branches/gsoc2009-gui/tools.h
===================================================================
--- tools/branches/gsoc2009-gui/tools.h	2009-07-24 07:51:38 UTC (rev 42686)
+++ tools/branches/gsoc2009-gui/tools.h	2009-07-24 07:53:05 UTC (rev 42687)
@@ -27,6 +27,11 @@
 
 #include <deque>
 
+/**
+ * This class holds a list of all the tools available
+ * Used by both the GUI and CLI as a base class to get ahold
+ * of all the tools.
+ */
 class Tools {
 public:
 	Tools();
@@ -34,9 +39,14 @@
 
 	typedef std::vector<Tool *> ToolList;
 	
-	ToolList inspectInput(ToolType type, std::deque<char *> arguments);
+	/**
+	 * Returns a list of the tools that supports opening the input file
+	 * specified in the input list.
+	 */
+	ToolList inspectInput(ToolType type, std::deque<char *> files) const;
 
 protected:
+	/** List of all tools */
 	ToolList _tools;
 };
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list