在本遍文章中,我们来解说怎么对我们的Ubuntu Scope进行设置。对Scope而言,有些时候我们希望可以使用设置来改变我们的显示。或对我们的搜索进行又一次定义。关于很多其它Scope的开发,请參阅站点:http://developer.ubuntu.com/scopes/

1)首先创建一个最主要的Scope

我们首先打开SDK。并选择“Unity Scope”模版。我们选择一个项目的名称为“settingscope”:



接下来,我们选择“Empty scope”。

这样我们就创建了我们的一个最主要的scope了。




2)增加代码来完毕设置功能


首先,我们打开项目中的“data”目录。并创建一个例如以下的文件名称:

com.ubuntu.developer.liu-xiao-guo.settingscope_settingscope-settings.ini

注意这个文件名称和Scope的设置文件


com.ubuntu.developer.liu-xiao-guo.settingscope_settingscope.ini

仅仅有细小的区别。仅仅是在它的后面加上“-settings"就可以。记住千万不要改变这个规则。注意这个文件名称和项目的名称的不同而不同


为了可以对这个文件进行设置和安装,我们也同一时候须要对“data”文件夹下的“CMakeLists.txt”文件增加例如以下的内容:


configure_file(
"com.ubuntu.developer.liu-xiao-guo.settingscope_settingscope-settings.ini"
"${CMAKE_BINARY_DIR}/src/com.ubuntu.developer.liu-xiao-guo.settingscope_settingscope-settings.ini"
) INSTALL(
FILES "${CMAKE_BINARY_DIR}/src/com.ubuntu.developer.liu-xiao-guo.settingscope_settingscope-settings.ini"
DESTINATION "${SCOPE_INSTALL_DIR}"
)

这样我们的设置文件就能够安装到目标中了。

以下。我们能够对我们的设置文件进行配置。

打开我们的设置文件:


[location]
type = string
defaultValue = London
displayName = Location


[distanceUnit]
type = list
defaultValue = 1
displayName = Distance Unit
displayName[de] = Entfernungseinheit
displayValues = Kilometers;Miles
displayValues[de] = Kilometer;Meilen


[age]
type = number
defaultValue = 23
displayName = Age


[enabled]
type = boolean
defaultValue = true
displayName = Enabled


# Setting without a default value
[color]
type = string
displayName = Color


[limit]
type = number
defaultValue = 20
displayName = 搜寻条数

在这里。我们定义了一些设置的名称。比方“location”。

它被定义为“string”,同一时候它另一个默认的值“London”。

显示的提示为“Location”,当然我们也能够把它改动为“位置”(对中文而言)。

为了可以在应用中訪问我们。我们可以改动我们的代码例如以下:
void Query::run(sc::SearchReplyProxy const& reply) {

    // Read the settings
initScope(); try {
// Start by getting information about the query
const sc::CannedQuery &query(sc::SearchQueryBase::query()); // Trim the query string of whitespace
string query_string = alg::trim_copy(query.query_string()); Client::ResultList results;
if (query_string.empty()) {
// If the string is empty, pick a default
results = client_.search("default");
} else {
// otherwise, use the search string
results = client_.search(query_string);
} // Register a category
auto cat = reply->register_category("results", "Results", "",
sc::CategoryRenderer(CATEGORY_TEMPLATE)); for (const auto &result : results) {
sc::CategorisedResult res(cat); cerr << "it comes here: " << m_limit << endl; // We must have a URI
res.set_uri(result.uri); // res.set_title(result.title);
res.set_title( m_location );
res["subtitle"] = std::to_string(m_limit); // Set the rest of the attributes, art, description, etc
res.set_art(result.art);
res["description"] = result.description; // Push the result
if (!reply->push(res)) {
// If we fail to push, it means the query has been cancelled.
// So don't continue;
return;
}
}
} catch (domain_error &e) {
// Handle exceptions being thrown by the client API
cerr << e.what() << endl;
reply->error(current_exception());
}
} void Query::initScope()
{
unity::scopes::VariantMap config = settings(); // The settings method is provided by the base class
if (config.empty())
cerr << "CONFIG EMPTY!" << endl; m_location = config["location"].get_string(); // Prints "London" unless the user changed the value
cerr << "location: " << m_location << endl; m_limit = config["limit"].get_double();
cerr << "limit: " << m_limit << endl;
}

这里“initScope”在“Run”中被调用。

在InitScope中,我们通过“settings()”来读取设置的值。为了显示的方便,我们在“Run”中,也对读取的值进行简单的显示:


            // res.set_title(result.title);
res.set_title( m_location );
res["subtitle"] = std::to_string(m_limit);

我们又一次执行我们的Scope,并能够看到例如以下的图片:


   

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="350" height="350" alt="">


我们也能够在我们的Application Output窗体中看到设置的变化:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvVWJ1bnR1VG91Y2g=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" width="500" height="200" alt="">


整个项目的源代码能够在例如以下的地址下载:

bzr branch lp:~liu-xiao-guo/debiantrial/settingscope



怎样在Ubuntu Scope中定义设置变量并读取的更多相关文章

  1. 【Javascript】: for循环中定义的变量在for循环体外也有效

    for循环中定义的变量在for循环体外也有效 <script> (function(){ var a = 111; for(var i=0;i<5;i++){ var carl = ...

  2. MFC 如何在一个类中使用在其他类中定义的变量或函数

    [声明:本文的知识点来源于网络,参考网址:https://blog.csdn.net/bill_ming/article/details/7407848] [以下三种方法亲测有效,可以根据具体情况来选 ...

  3. ES6 class类中定义私有变量

    ES6 class类中定义私有变量 class类的不足 看起来, es6 中 class 的出现拉近了 JS 和传统 OOP 语言的距离.但是,它仅仅是一个语法糖罢了,不能实现传统 OOP 语言一样的 ...

  4. sql 语句中定义的变量不能和 sql关键字冲突

    sql 语句中定义的变量不能和 sql关键字冲突 from bs_email_account account LEFT JOIN bs_group_info gp ON account.group_i ...

  5. java接口中定义成员变量

    //抽象类中可以定义如下成员变量:public abstract class People { public String name; public int age; public abstract ...

  6. 怎么在Ubuntu Scope中获取location地址信息

    Location信息对非常多有地址进行搜索的应用来说非常重要.比方对dianping这种应用来说.我们能够通过地址来获取当前位置的一些信息.在这篇文章中,我们来介绍怎样获取Scope架构中的位置信息. ...

  7. IT兄弟连 JavaWeb教程 Servlet中定义的变量的作用域类型

    在Java语言中,局部变量和实力变量有着不同的作用于,它们的区别如下: 局部变量在一个方法中定义,每当一个线程执行局部变量所在的方法时,在线程的堆栈中就会创建这个局部变量,当线程执行完该方法,局部变量 ...

  8. shell脚本中定义路径变量出现的BUG

    =========================================================================== if 语句中的定义路径变量 引发命令的PATH路 ...

  9. Objective-c中定义成员变量

    ios定义成员变量的方法: 如果只是内部访问,完全可以直接用_xxx(下划线),无需自己定义,编译器会自动生成 如果需要外部访问这个变量,可以用 @property xxx ; @synthesize ...

随机推荐

  1. 腾讯Java程序员第二轮面试11个问题,你会几个?

    此前,分享了阿里巴巴.网易.百度等多家名企的JAVA面试题. 这也引来了不少程序员网友们的围观. 其中,也有相当一部分网友是已经从事Java开发好多年的程序员,当他们阅读完JAVA面试题的反应是:一个 ...

  2. js实现小球的弹性碰撞。

      前  言 MYBG 小编最近在做自己的个人网站,其中就用到了一个小球碰撞检测的功能,想自己写,无奈本人能力不足啊(毕竟还是一个菜鸟)!!就想着找个插件用一下也好,可是找了好久也没有找到一个比较好用 ...

  3. UWP Composition API - RadialMenu

    用Windows 8.1的童鞋应该知道OneNote里面有一个RadialMenu.如下图,下图是WIn10应用Drawboard PDF的RadialMenu,Win8.1的机器不好找了.哈哈,由于 ...

  4. Android开发之漫漫长途 Ⅳ——Activity的显示之ViewRootImpl初探

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

  5. Vue.js优雅的实现列表清单的操作

        一.Vue.js简要说明 Vue.js (读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与前端框架Angular一样, Vue.js在设计上采用MVVM模式,当Vie ...

  6. Anaconda快捷搭建Python2和Python3环境

    我们在使用Pycharm编辑Python程序经常会因为不熟悉Python2和Python3的一些代码区别而导致错误,我们知道他们之间很多代码是必须运行在对应版本中的,否则是会报错的.因此,本文介绍一个 ...

  7. MVC 页面静态化

    最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...

  8. CLR之委托的揭秘(二)

    杂谈 在开始真正的代码之前,分析一下上周的一些工作内容,发现自己在代码上还是有很多小毛病需要纠正和去更改的,首先之前一直疏于文档的整理,几乎很少去写文档,第二对于接口开发过程中缺少一定的严谨性,很多问 ...

  9. webpack 3.X学习之CSS处理

    Loaders Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因.通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理. Lo ...

  10. JavaWeb框架SSH_Struts2_(三)

    1. Struts2的拦截器(使用拦截器实现权限控制) 拦截器简介 拦截器概述 拦截器工作原理 拦截器的配置 Struts2的内建拦截器 内建拦截器的介绍 内建拦截器的配置 自定义拦截器 实现自定义拦 ...