1 #ifndef __LDHTMLINVENTORY_H__
2 #define __LDHTMLINVENTORY_H__
3 
4 #include <TCFoundation/TCObject.h>
5 #include <TCFoundation/TCStlIncludes.h>
6 #include <LDLoader/LDLPalette.h>
7 #include <stdio.h>
8 
9 class LDPartsList;
10 class LDPartCount;
11 class LDLPalette;
12 class LDPreferences;
13 class LDrawModelViewer;
14 class LDViewPoint;
15 
16 typedef enum
17 {
18 	LDPLCFirst = 1,
19 	LDPLCPart = LDPLCFirst,
20 	LDPLCDescription,
21 	LDPLCColor,
22 	LDPLCQuantity,
23 	LDPLCLast = LDPLCQuantity
24 } LDPartListColumn;
25 
26 typedef std::vector<LDPartListColumn> LDPartListColumnVector;
27 typedef std::map<LDPartListColumn, bool> LDPartListColumnBoolMap;
28 
29 class LDHtmlInventory : public TCObject
30 {
31 public:
32 	LDHtmlInventory(void);
33 
34 	void setShowModelFlag(bool value);
getShowModelFlag(void)35 	bool getShowModelFlag(void) { return m_showModel; }
36 	void setExternalCssFlag(bool value);
getOverwriteSnapshotFlag(void)37 	bool getOverwriteSnapshotFlag(void) const { return m_overwriteSnapshot; }
38 	void setOverwriteSnapshotFlag(bool value);
getExternalCssFlag(void)39 	bool getExternalCssFlag(void) { return m_externalCss; }
40 	void setPartImagesFlag(bool value);
getPartImagesFlag(void)41 	bool getPartImagesFlag(void) { return m_partImages; }
42 	void setShowFileFlag(bool value);
getShowFileFlag(void)43 	bool getShowFileFlag(void) { return m_showFile; }
44 	void setShowTotalFlag(bool value);
getShowTotalFlag(void)45 	bool getShowTotalFlag(void) { return m_showTotal; }
getColumnOrder(void)46 	const LDPartListColumnVector &getColumnOrder(void) const
47 	{
48 		return m_columnOrder;
49 	}
50 	void setColumnOrder(const LDPartListColumnVector &value);
getLastSavePath(void)51 	const char *getLastSavePath(void) { return m_lastSavePath.c_str(); }
52 	const char *getSnapshotPath(void) const;
53 	bool isColumnEnabled(LDPartListColumn column);
54 	bool isSnapshotNeeded(void) const;
55 	std::string defaultFilename(const char *modelFilename);
56 
57 	bool generateHtml(const char *filename, LDPartsList *partsList,
58 		const char *modelName);
59 
60 	void prepForSnapshot(LDrawModelViewer *modelViewer);
61 	void restoreAfterSnapshot(LDrawModelViewer *modelViewer);
62 
63 	static const char *getColumnName(LDPartListColumn column);
64 	static CUCSTR getColumnNameUC(LDPartListColumn column);
65 protected:
66 	virtual ~LDHtmlInventory(void);
67 	virtual void dealloc(void);
68 	void writeHeader(FILE *file);
69 	void writeFooter(FILE *file);
70 	void writeTableHeader(FILE *file, int totalParts);
71 	void writeTableFooter(FILE *file);
72 	void writePartRow(FILE *file, const LDPartCount &partCount,
73 		LDLPalette *palette, const LDLColorInfo &colorInfo, int colorNumber);
74 	bool writeExternalCss(void);
75 	FILE *safeOpenCssFile(const std::string &cssFilename, bool &match);
76 	void writePartHeaderCell(FILE *file);
77 	void writeHeaderCell(FILE *file, LDPartListColumn column, int colSpan);
78 	void writeHeaderCell(FILE *file, LDPartListColumn column);
79 	void writePartCell(FILE *file, const LDPartCount &partCount,
80 		LDLPalette *palette, const LDLColorInfo &colorInfo, int colorNumber);
81 	void writeDescriptionCell(FILE *file, const LDPartCount &partCount);
82 	void writeColorCell(FILE *file, LDLPalette *palette,
83 		const LDLColorInfo &colorInfo, int colorNumber);
84 	void writeQuantityCell(FILE *file, const LDPartCount &partCount,
85 		int colorNumber);
86 	void writeCell(FILE *file, LDPartListColumn column,
87 		const LDPartCount &partCount, LDLPalette *palette,
88 		const LDLColorInfo &colorInfo, int colorNumber);
89 	void populateColumnMap(void);
90 	std::string getSnapshotFilename(void) const;
91 
92 	std::string m_modelName;
93 	LDPreferences *m_prefs;
94 
95 	bool m_showModel;
96 	bool m_overwriteSnapshot;
97 	bool m_externalCss;
98 	bool m_partImages;
99 	bool m_showFile;
100 	bool m_showTotal;
101 	std::string m_lastSavePath;
102 	std::string m_lastFilename;
103 	int m_columns;
104 	LDPartListColumnVector m_columnOrder;
105 	LDPartListColumnBoolMap m_columnMap;
106 	LDViewPoint *m_viewPoint;
107 	mutable std::string m_snapshotPath;
108 
109 	static const char *sm_style;
110 	static const char *sm_cssHeader;
111 	static const char *sm_cssFilename;
112 };
113 
114 #endif // __LDHTMLINVENTORY_H__
115