Added CODFILE_TYPE_SIMPLE check back in
[barry.git] / src / m_desktop.h
blob5ae6bcea3bcc7e21a409c7650234f4138247d0b8
1 ///
2 /// \file m_desktop.h
3 /// Mode class for the Desktop mode
4 ///
6 /*
7 Copyright (C) 2005-2009, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #ifndef __BARRY_M_DESKTOP_H__
23 #define __BARRY_M_DESKTOP_H__
25 #include "dll.h"
26 #include "socket.h"
27 #include "record.h"
29 namespace Barry {
31 // forward declarations
32 class Parser;
33 class Builder;
34 class Controller;
35 class IConverter;
37 namespace Mode {
40 // Desktop class
42 /// The main interface class to the device databases.
43 ///
44 /// To use this class, use the following steps:
45 ///
46 /// - Create a Controller object (see Controller class for more details)
47 /// - Create this Mode::Desktop object, passing in the Controller
48 /// object during construction
49 /// - Call Open() to open database socket and finish constructing.
50 /// - Call GetDBDB() to get the device's database database
51 /// - Call GetDBID() to get a database ID by name
52 /// - Call LoadDatabase() to retrieve and store a database
53 ///
54 class BXEXPORT Desktop
56 public:
57 enum CommandType { Unknown, DatabaseAccess };
59 private:
60 Controller &m_con;
62 SocketHandle m_socket;
64 CommandTable m_commandTable;
65 DatabaseDatabase m_dbdb;
67 uint16_t m_ModeSocket; // socket recommended by device
68 // when mode was selected
70 // external objects (optional, can be null)
71 const IConverter *m_ic;
73 protected:
74 void LoadCommandTable();
75 void LoadDBDB();
77 public:
78 Desktop(Controller &con);
79 Desktop(Controller &con, const IConverter &ic);
80 ~Desktop();
82 //////////////////////////////////
83 // primary operations - required before anything else
85 void Open(const char *password = 0);
86 void RetryPassword(const char *password);
88 //////////////////////////////////
89 // meta access
91 /// Returns DatabaseDatabase object for this connection.
92 /// Must call Open() first, which loads the DBDB.
93 const DatabaseDatabase& GetDBDB() const { return m_dbdb; }
94 unsigned int GetDBID(const std::string &name) const;
95 unsigned int GetDBCommand(CommandType ct);
97 void SetIConverter(const IConverter &ic);
99 //////////////////////////////////
100 // Desktop mode - database specific
102 // dirty flag related functions, for sync operations
103 void GetRecordStateTable(unsigned int dbId, RecordStateTable &result);
104 void AddRecord(unsigned int dbId, Builder &build); // RecordId is
105 // retrieved from build, and duplicate IDs are allowed,
106 // but *not* recommended!
107 void GetRecord(unsigned int dbId, unsigned int stateTableIndex, Parser &parser);
108 void SetRecord(unsigned int dbId, unsigned int stateTableIndex, Builder &build);
109 void ClearDirty(unsigned int dbId, unsigned int stateTableIndex);
110 void DeleteRecord(unsigned int dbId, unsigned int stateTableIndex);
112 // pure load/save operations
113 void LoadDatabase(unsigned int dbId, Parser &parser);
114 void SaveDatabase(unsigned int dbId, Builder &builder);
116 template <class RecordT, class StorageT> void LoadDatabaseByType(StorageT &store);
117 template <class RecordT, class StorageT> void SaveDatabaseByType(StorageT &store);
119 template <class StorageT> void LoadDatabaseByName(const std::string &name, StorageT &store);
120 template <class StorageT> void SaveDatabaseByName(const std::string &name, StorageT &store);
122 template <class RecordT> void AddRecordByType(uint32_t recordId, const RecordT &rec);
126 }} // namespace Barry::Mode
128 #endif