00001
00002 #if !defined(__INC_DRIVER_H)
00003 #define __INC_DRIVER_H
00004
00005 #include <vector>
00006 #include <map>
00007 #include <string>
00008
00009 #include <sigc++/signal_system.h>
00010
00011 #include <uc++/plugin.h>
00012 #include "gql++/connection.h"
00013
00014 namespace GQL
00015 {
00016
00017 class DriverPropertyInfo
00018 {
00019 public:
00020 DriverPropertyInfo(const string& nam,
00021 const string& descr = string(),
00022 const string& val = string(),
00023 bool req = false,
00024 const vector<string>& cs = vector<string>())
00025 : choices_(cs), description_(descr), name_(nam),
00026 required_(req), value_(val) { }
00027
00028 const vector<string>& choices() const { return(choices_); }
00029 const string& description() const { return(description_); }
00030 const string& name() const { return(description_); }
00031 bool required() const { return(required_); }
00032 const string& value() const { return(value_); }
00033 private:
00034 vector<string> choices_;
00035 string description_;
00036 string name_;
00037 bool required_;
00038 string value_;
00039 };
00040
00041 class Driver : public uC::Plugin
00042 {
00043 public:
00044 Driver(uC::PluginManager *mgr,const string& id, const string& name)
00045 : uC::Plugin(mgr), id_(id), name_(name) {
00046 }
00047 virtual ~Driver();
00048
00049 const string& get_id() const { return(id_); }
00050 const string& get_name() const { return(name_); }
00051 int get_major_version() const { return(major_); }
00052 int get_minor_version() const { return(minor_); }
00053 virtual vector<DriverPropertyInfo> get_property_info(
00054 const string& url,
00055 const map<string, string>& props) const = 0;
00056
00057 virtual bool accept_url(const string& str) const = 0;
00058 virtual Connection *connect(const string& url,
00059 const map<string, string>& prop) = 0;
00060
00061 SigC::Signal0<void> destroy;
00062
00063
00064 virtual string name() const { return(id_); }
00065 virtual string description() const { return(name_); }
00066 protected:
00067 void set_version(int maj, int min) {
00068 minor_ = min;
00069 major_ = maj;
00070 }
00071 private:
00072 int minor_, major_;
00073 string id_, name_;
00074 };
00075
00076
00077 }
00078
00079 #endif