3 /// Mode class for the Desktop mode
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__
31 // forward declarations
42 /// The main interface class to the device databases.
44 /// To use this class, use the following steps:
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
54 class BXEXPORT Desktop
57 enum CommandType
{ Unknown
, DatabaseAccess
};
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
;
74 void LoadCommandTable();
78 Desktop(Controller
&con
);
79 Desktop(Controller
&con
, const IConverter
&ic
);
82 //////////////////////////////////
83 // primary operations - required before anything else
85 void Open(const char *password
= 0);
86 void RetryPassword(const char *password
);
88 //////////////////////////////////
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