1 //-------------------------------------------------------------------------
2 //
3 // This code was taken from Open Scene Graph and incorporated from into
4 // OSSIM.
5 //
6 //-------------------------------------------------------------------------
7 // $Id: ossimApplicationUsage.h 19692 2011-05-31 16:55:47Z dburken $
8 #ifndef ossimApplicationUsage_HEADER
9 #define ossimApplicationUsage_HEADER 1
10 
11 #include <ossim/base/ossimConstants.h>
12 #include <ossim/base/ossimString.h>
13 #include <map>
14 
15 class OSSIMDLLEXPORT ossimApplicationUsage
16 {
17 public:
18 
19    static ossimApplicationUsage* instance();
20 
ossimApplicationUsage()21    ossimApplicationUsage() {}
22 
23    ossimApplicationUsage(const ossimString& commandLineUsage);
24 
25    typedef std::map<ossimString,ossimString,ossimStringLtstr> UsageMap;
26 
27    void setApplicationName(const ossimString& name);
28    const ossimString& getApplicationName() const;
29 
30    void setDescription(const ossimString& desc);
31    const ossimString& getDescription() const;
32 
33    enum Type
34    {
35       OSSIM_COMMAND_LINE_OPTION    = 0x1,
36       OSSIM_ENVIRONMENTAL_VARIABLE = 0x2
37    };
38 
39    void addUsageExplanation(Type type,const ossimString& option,const ossimString& explanation);
40 
41    void setCommandLineUsage(const ossimString& explanation);
42 
43    const ossimString& getCommandLineUsage() const;
44 
45 
46    void addCommandLineOption(const ossimString& option,const ossimString& explanation);
47 
48    const UsageMap& getCommandLineOptions() const;
49 
50 
51    void addEnvironmentalVariable(const ossimString& option,const ossimString& explanation);
52 
53    const UsageMap& getEnvironmentalVariables() const;
54 
55 
56    void write(std::ostream& output, const UsageMap& um);
57 
58    void write(std::ostream& output,
59               unsigned int type=OSSIM_COMMAND_LINE_OPTION|OSSIM_ENVIRONMENTAL_VARIABLE);
60 
61 protected:
62    void getFormatedString(ossimString& str,
63                           const UsageMap& um);
64 
65    ossimString theApplicationName;
66    ossimString theDescription;
67    ossimString theCommandLineUsage;
68    UsageMap    theCommandLineOptions;
69    UsageMap    theEnvironmentalVariables;
70 };
71 
72 class ApplicationUsageProxy
73 {
74 public:
75 
76    /** register an explanation of commandline/evironmentalvaraible/keyboard mouse usage.*/
ApplicationUsageProxy(ossimApplicationUsage::Type type,const ossimString & option,const ossimString & explanation)77    ApplicationUsageProxy(ossimApplicationUsage::Type type,const ossimString& option,const ossimString& explanation)
78    {
79       ossimApplicationUsage::instance()->addUsageExplanation(type,option,explanation);
80    }
81 };
82 
83 
84 #endif
85