book.h

来自「Recite(一个辅助英语学习软件源码) 该程序的UI部分使用了WTL7.5。」· C头文件 代码 · 共 88 行

H
88
字号
//PK 2006/08/29 - 2007/03/10
#pragma once

#include "global.h"
#include <rpc.h>

const int BOOK_NAME_MAX_LEN = 128;
const int CONTRIBUTOR_NAME_MAX_LEN = 32;

//PK for UUID's serialization
namespace boost {
	namespace serialization {
		template<class Archive>
		void serialize(Archive & ar, UUID & id, const unsigned int version)
		{
			ar & id.Data1;
			ar & id.Data2;
			ar & id.Data3;
			ar & id.Data4;
		}
	}
}

class CRecords;
class CItem;

class CBook
{
public:
	typedef vector<CItem *> t_items;

	CBook();
	~CBook();

	bool add_item(CItem * item);
	bool delete_item(unsigned int id);
	bool delete_item(CItem * item);
	bool delete_self();

	bool load(const fs::path & dir);	//PK load all items from the directory
	bool save();	//PK when make modifications, call this method will save them.

	unsigned int size() { return _items.size(); }
	
	CRecords & recorder() { return *_recorders; }
	const fs::path & dir() { return _dir; }
	void dir(const fs::path & dir) { _dir = dir; }
	const string & get_book_id() {  assert(!_id_str.empty()); return _id_str; }

	bool is_active() { return _is_active; }
	void set_active(bool b) { _is_active = b; }

	CItem * get_item(const string title);
	CItem * get_item(unsigned int index);

	void dirty();

	const string & book_name() { return _book_name; }
	void book_name(const string & name) { _book_name = name; }
	void book_info_changed(const string & name, const string & contributor);
	const string & contributor() { return _contributor; }

	bool is_recorders_matched();
	void trim_recorders();
	void change_record_name(const string & src, const string & tar);

private:
	//PK the object cannot be copyed
	CBook(const CBook &);
	const CBook & operator = (const CBook &);

	void _clear_items();
	bool _load_info();
	bool _save_info();
	bool _load_items();
	bool _load_records();
	bool _restore_item_info();	//PK restore the item's info from records
	string _id2str(UUID & id);

	fs::path _dir;
	UUID _id;
	string _id_str;
	string _book_name;
	string _contributor;
	t_items _items;
	CRecords * _recorders;
	bool _is_active;
};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?