Konfigurační dialog pro plugin

Nejprve je potřeba vytvořit v hlavním souboru pluginu (plugin.py) další třídu, která bude představovat jeho konfigurační rozhraní.

class config:
   def __init__(self,main):
      self.main=main
      self.config={}

Pak musíme při inicializaci pluginu Jabbimu říct, že má náš plugin konfigurační dialog. To uděláme nastavením proměnné self.configDialog na následujícím místě pluginu:

class Plugin(plugins.PluginBase):
   def __init__(self, main, homedir, plugindir):
      ...........
      self.configDialog=config(self)
      ...........
      if main:
         ...........

Teď už můžeme přidávat položky do konfiguračního dialogu. Každá položka konfiguračního dialogu představuje jednu položku v pythonním slovníku self.config třídy config, kde tato položka je rovněž slovník (dict). Každá položka musí obsahovat tyto klíče:

  • "type" - udává typ položky
  • "label" - popisek položky, který uvidí uživatel
  • "value" - standardní hodnota položky, která bude použita při vytvoření konfiguračního souboru spjatého s dialogem

Položky můžeme v dialogu třídit těmito klíči:

  • groupbox - název QGroupBoxu, ve kterém položka bude.
    self.config['sendMessages']={'type':'boolean','label':self.main.tr("Send message automaticaly"),'value':'True',"groupbox":self.main.tr("Messages")}
    
  • tab - název tabu, ve kterém položka bude

Groupboxy i taby se vytvářejí automaticky.

Další doplňující klíče:

  • tooltip - přiradí položce tooltip
  • disabled - přítomnost tohoto klíče zajistí to, že bude položka deaktivována a nebude s ní možno pracovat

Ukážeme si příklady všech položek a popíšeme všechny možné typy.

1. Zaškrtávací tlačítko (type boolean)

self.config['sendMessages']={'type':'boolean','label':self.main.tr("Send message automaticaly"),'value':'True'}

U typy boolean lze použít ještě tyto nepovinné klíče:

  • "enable" - seznam položek konfiguračního dialogu, jejichž editace se má povolit při zaškrtnutí tlačítka.
self.config['sendMessages']={'type':'boolean','label':self.main.tr("Send message automaticaly"),'value':'True',"enable":["sendMessagesPrivate","sendMessagesGroup"]}
self.config['sendMessagesPrivate']={'type':'boolean','label':self.main.tr("Send only private messages"),'value':'True'}
self.config['sendMessagesGroup']={'type':'boolean','label':self.main.tr("Send only group messages"),'value':'True'}
  • "disable" - opak enable; seznam položek, které se mají stát needitovatelnými, pokud se tlačítko zaškrtne
  • "show" - seznam položek, které se mají zobrazit, pokud se tlačítko zaškrtne
  • "hide" - seznam položek, které nemají být vidět, pokud je tlačítko zaškrtnuté

2. Radio button (zaškrtávací tlačítko s omezeným výběrem) (type boolean-radio)

self.config['rosterMode']={'type':'boolean-radio','label':'','value':'normal','options':{'normal':self.main.tr('Normal'),'compact':self.main.tr('Compact')}}

Klíč options udává jednotlivé radio buttony, ze kterých může uživatel vybírat. Slovník pod klíčem options má jako klič hodnotu daného radio buttonu a jako proměnnou popis k radio buttonu. Value musí být jednen z klíčů radio buttonu. Do konfiguračního souboru je ukládán vždy klíč volby options, nikdy ne popis.

3. Jednořádkové vstupní pole (QLineEdit) (type text-single)

self.config['resource']={'type':'text-single','label':self.main.tr("Resource:"),'value':'jabbim'}

4. Víceřádkové vstupní pole (QTextEdit) (type text-multi)

self.config['awayMessage']={'type':'text-multi','label':self.main.tr("Away text"),'value':self.main.tr("I'm not here since [last].")}

5. Vstupní pole pro hesla (type text-private)

self.config['passwd']={'type':'text-private','label':preferencesWindow.tr("Password:"),'value':''}

6. Rozbalovací seznam

self.config['player']={'type':'list-single','label':self.main.tr("Player"), 'items':{'Winamp':self.main.tr('winamp')}, 'value':'winamp'}

Pro klíč items platí stejné podmínky jako pro options u Radio buttonů.

7. Celočíselné hodnoty (QSpinBox) (type number-spin)

self.config['priority']={'type':'number-spin','label':self.main.tr("Priority:"),'value':'0'}

Zobrazí vstupní pole, do nějž lze zadat pouze celá čísla.

8. Seznam Jabber ID (type jid-list)

T0 B3 C0NT1N|_|3D