File: DevStudioFileStore.h

package info (click to toggle)
cccc 3.pre84-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 3,816 kB
  • ctags: 4,969
  • sloc: ansic: 33,244; cpp: 10,694; java: 622; makefile: 164; sh: 11
file content (72 lines) | stat: -rw-r--r-- 2,695 bytes parent folder | download | duplicates (10)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// DevStudioFileStore.h: interface for the DevStudioFileStore class.
// 
// This file defines a class DevStudioFileStore which exists to encapsulate 
// the operations required to parse the .dsp and .dsw files used by 
// MS Developer studio and get the names of the files in any or all of the 
// projects in the workspace.


#if !defined(AFX_DEVSTUDIOFILESTORE_H__76B7B6C2_AA85_11D3_AFED_444553540000__INCLUDED_)
#define AFX_DEVSTUDIOFILESTORE_H__76B7B6C2_AA85_11D3_AFED_444553540000__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000


#include <string>
#include <set>
#include <map>

// The answers to queries on the class below will be 
// a collection of names.
// For the moment, I can't see why we would not want to have
// an automatically sorted list with duplicates eliminated.
typedef std::set<std::string> FilenameList;

class DevStudioFileStore  
{
public:
	DevStudioFileStore(IApplication *pApp, const std::string& wsDir, const std::string& wsName);
	virtual ~DevStudioFileStore();

	void listWorkspaceFiles(FilenameList& fileList);
	void listProjectFiles(std::string projectName, FilenameList& fileList);

	// A diagnostic function to list the files in each project
	void dumpProjectFileList();

	// a function to propose a working directory for the run.
	// If the IApplication object allowed access to the 
	// path to the .dsw file, this would be an excellent 
	// choice, but as it is there is no way of getting this,
	// so we propose either the directory containing the active
	// project (if one exists), or the directory containing
	// the active document (if one exists), or the current directory.
	std::string suggestedWorkingDirectory();

private:
	IApplication* m_pApplication;
	std::string m_WorkspaceName;
	std::string m_WorkspaceDirectory;

	typedef std::map<std::string,FilenameList> ProjectFileStore;
	ProjectFileStore m_ProjectFileStore;

	// A utility function to accept a base directory and a relative file name,
	// and translate to the canonical name of the file they specify.
	std::string composeFilename(const std::string& baseDir, const std::string& relname);

	// A utility function to open a .dsp or .dsw file, search for lines with a 
	// given prefix, and translate the remainder of those lines to filenames 
	// using the location of the opened file as the base directory.
	void collectFilenames(const std::string& dsFile, const std::string& pfx, 
		FilenameList& fileList);


	// A utility function to copy a std::string (or by implicit conversion
	// a const char*) to the Macro output tab.
	void dump(const std::string& str);
};

#endif // !defined(AFX_DEVSTUDIOFILESTORE_H__76B7B6C2_AA85_11D3_AFED_444553540000__INCLUDED_)