O que é o arquivo XML do esquema na pasta data / glib-2.0 do meu aplicativo Quickly?

1

Eu criei um aplicativo Ubuntu com o Quickly, e posso ver um arquivo XML na pasta data / glib-2.0 do meu projeto raiz e não sei exatamente para que serve isso. O XML se parece com isso:

<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="sample-application">
  <schema id="net.launchpad.sample-application" path="/net/launchpad/sample-application/">
    <key name="example" type="s">
      <default>''</default>
      <summary>Sample setting</summary>
      <description>Longer description of this sample setting.  Talk about allowed values and what it does.</description>
    </key>
  </schema>
</schemalist>

Além disso, no código do diálogo de preferências padrão criado com um novo aplicativo, posso ver o seguinte código:

settings = Gio.Settings("net.launchpad.sample-application")
widget = self.builder.get_object('example_entry')
settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)

e não tenho certeza do que isso está fazendo.

    
por trent 20.07.2012 / 12:29

1 resposta

3

O arquivo XML define um conjunto de chaves que você pode usar em todo o seu aplicativo para armazenar as preferências do usuário.

No esquema do elemento, você notará dois atributos: id e caminho. O id é o que você usa para se referir ao esquema no código ao instanciar o objeto de configurações. O caminho é onde as chaves são armazenadas.

Você pode encontrar as configurações instalando o pacote dconf-tools e executando dconf-editor . Em seguida, navegue até o nó definido acima. O nó no XML na questão (/ net / launchpad / sample-application) estaria aqui:

O esquema é usado contra a API GSettings. Você pode ver os documentos baseados no GTK C aqui: link . Esta é uma parte do módulo Gio

Quanto ao código.

settings = Gio.Settings("net.launchpad.sample-application")

Isso cria o objeto GSettings, que você pode usar para vincular widgets a configurações de armazenamento. O parâmetro precisa corresponder exatamente ao atributo id do elemento do esquema no XML.

settings.bind("example", widget, "text", Gio.SettingsBindFlags.DEFAULT)

Isso cria uma ligação entre a chave example no esquema e a propriedade text do widget . O valor que é passado para a chave é a propriedade de texto do widget especificado. Para GtkEntry, o texto é a propriedade mais óbvia a ser usada. Como está sendo ligado, sempre que você altera o valor da propriedade na janela de preferências, ela é atualizada automaticamente. O parâmetro final determina em qual direção a vinculação funciona - consulte os docs para obter mais informações.

O tipo que você especifica no XML da chave deve corresponder a uma das opções disponíveis . Geralmente, um único caractere, que você verá na constante definida. Por exemplo. para um booleano:

  

#define G_VARIANT_TYPE_BOOLEAN ((const GVariantType *) "b")

Então booleano equivale a b .

Então, basta dizer que você queria uma chave booleana, você poderia adicionar o seguinte abaixo do elemento schema, ao lado da outra chave:

<key name="complete" type="b">
  <default>false</default>
  <summary>Whether the task is complete</summary>
  <description>This key is used to determine if a particular part of the application is complete or not</description>
</key>

Em seguida, ligue a propriedade ativa da seguinte forma:

# Get the widget (named chk_complete)
complete = self.ui.chk_complete
# Bind the property
settings.bind("complete", complete, "active", Gio.SettingsBindFlags.DEFAULT)

As configurações podem ser acessadas com a função get, específica para o tipo de dados. por exemplo,

settings = Gio.Settings("net.launchpad.sample-application")
example = settings.get_string("example")
complete = settings.get_boolean("complete")
    
por trent 20.07.2012 / 12:29