最近管理器(RecentManager)
RecentManager充当最近使用文件的数据库。你可以使用此类注册新文件、从列表中删除文件、查找最近使用文件。每个用户都拥有一个最近使用的文件列表。
你可以创建一个新的RecentManager,但你可能只想用默认的那个。你可以通过get_default()获取默认RecentManager的引用。
- 20.1.1. 将项目添加到最近文件列表
- 20.1.2. 在最近文件列表中查找项目
- 20.1.3. 修改最近使用文件列表
20.1.1. 将项目添加到最近文件列表
在最简单的情况下,要添加项目到最近文件列表只需要提供一个URI即可。例如:
auto recent_manager = Gtk::RecentManager::get_default(); recent_manager->add_item(uri);
如果你想要使用元数据注册一个文件,你可以将RecentManager::Data参数传递给add_item()。可以在特定的文件项上设置的元数据如下所示:
- app_exec:用于启动此资源的命令行。此字符串可以包含"f"和"u"转义字符,它们将分别扩展为资源文件路径和URI
- app_name:此资源注册的应用程序名
- description:资源的简单描述(UTF-8编码字符串)
- display_name:用于显示的资源名(UTF-8编码字符串)
- groups:与该项相关联的组列表。组本质上是与特定资源相关联的任意字符串。可以将它们视为资源的类别(例如:电子邮件、图形等)或标签
- is_private:此资源是否仅对已注册该资源的应用程序可见
- mime_type:此资源的MIME类型
除了向列表中添加项目以外,你还可以从列表项中删除、修改、查找项目。
20.1.2. 在最近文件列表中查找项目
RecentManager提供了几个函数用以查找最近使用过的文件。你可以使用lookup_item()函数通过URI来查找特定项目,该函数将返回一个RecentInfo类对象。如果指定的URI于最近文件列表中不存在,则lookup_item()将抛出一个RecentManagerError异常。例如:
Glib::RefPtr<Gtk::RecentInfo> info; try { info = recent_manager->lookup_item(uri); } catch(const Gtk::RecentManagerError& ex) { std::cerr << "RecentManagerError: " << ex.what() << std::endl; } if (info) { // item was found }
本质上,RecentInfo是个包含了一个最近使用文件的所有元数据的对象。你可以使用该对象查找这里所列出的任何属性。
如果你不想要查找一个特定的URI,而是想获取整个最近使用的项目列表,RecentManager为此提供了get_items()函数。这个函数返回值是一个std::vector,其包含了所有最近使用的文件。以下代码演示了你该如何获取最近使用文件列表:
auto info_list = recent_manager->get_items();
可以使用Gtk::Settings::property_gtk_recent_files_max_age()设置最近使用文件列表中项目的最长使用期限。默认时长是:30天。