Nesse artigo, veremos os detalhes da classe KCModule, que é a classe base para os módulos de configuração disponíveis no systemsettings da Kde. Módulos de configuração são plugins que são carregados apenas quando são necessários. O módulo é um widget simples que exibe o item a ser modificado. Ele possui uma interface bem simples. Toda a lógica necessária e itens da interface são fornecidos pelo centro de controle e não precisam ser uma preocupação para o autor do módulo.
Para criar um módulo, você tem que criar uma biblioteca que contenha uma função como a seguinte:
#include <KPluginFactory> K_PLUGIN_FACTORY(MyKCModuleFactory, registerPlugin<MyKCModule>() ) K_EXPORT_PLUGIN(MyKCModuleFactory("yourLibName","name_of_the_po_file") )
O parâmetro opcional “name_of_the_po_file” tem que ser correspondente com os alvos de mensagens que contenham as strings a ser traduzidas. Ao invés de usar o nome da biblioteca para yourLibName
você pode também usar outro nome que seja especificado no arquivo .desktop na opção X-KDE-FactoryName
. Isso é útil para ter de uma função na mesma biblioteca.
O construtor do módulo KCModule fica parecido com isso:
YourKCModule::YourKCModule( QWidget* parent ) : KCModule( YourKCModuleFactory::componentData(), parent ) { KAboutData *about = new KAboutData( <kcm name>, 0, ki18n( "..." ), KDE_VERSION_STRING, KLocalizedString(), KAboutData::License_GPL, ki18n( "Copyright 2006 ..." ) ); about->addAuthor( ki18n(...) ); setAboutData( about ); . . . }
Se quiser tornar o módulo disponível apenas em certas condições (isto é, ser exibido na lista de módulos disponíveis apenas se algum tipo de teste tiver sucesso), assim você pode usar Hidden no arquivo .desktop. Um exemplo:
Hidden[$e]=$(if test -e /dev/js*; then echo "false"; else echo "true"; fi)
O exemplo executa o código fornecido em um terminal e usa a saída do stdout como valor de Hidden (assim Hidden=true ou Hidden=false).
Documentação dos membros do tipo Enumeration
enum KCModule::Button
Você deve usar apenas Help, Default e Apply. Os outros são obsoletos. NoAdditionButton pode ser usado quando não precisarmos ter nenhum outro botão além de Ok e Cancel.
- Enumerador:
-
NoAdditionalButton Help Default Apply Export
Documentação para o Construtor & Destrutor
KCModule::KCModule(const KComponentData &componentData, QWidget *parent = 0
, const QVariantList &args = QVariantList()
) [explicit]
- Nota:
- Não emita sinals para modificações aqui, já que eles ainda não estarão conectados a um slot;
KCModule::~KCModule( )
Documentação das funções membro
const KAboutData * KCModule::aboutData( )const [virtual]
- Retorno:
- O KAboutData desse módulo
KConfigDialogManager * KCModule::addConfig(KCoreConfigSkeleton *config, QWidget *widget ) [protected]
config
KCoreConfigskeleton para observar o widget widget
. Essa função é útil se você precisa manipular múltiplos arquivos de configuração.
- Retorno:
um ponteiro para o KCoreConfigDialogManager em uso.
- Parameters:
-
configthe KCoreConfigSkeleton to usewidgetthe widget to watch
KConfigDialogManager * KCModule::addConfig(KConfigSkeleton *config, QWidget *widget ) [protected]
config
KConfigskeleton para observar o widget widget
. Essa função é útil se você precisa manipular múltiplos arquivos de configuração.Retorno:
um ponteiro para o KConfigDialogManager em uso
- Parameters:
-
configthe KConfigSkeleton to usewidgetthe widget to watch
KAuth::Action * KCModule::authAction( )const
- Retorno:
A ação que tem que ser autorizada para executar o método save().
void KCModule::authStatusChanged(intstatus )[protected, slot]
KCModule::Buttons KCModule::buttons( )const
void KCModule::changed(boolstate )[signal]
void KCModule::changed( )[protected, slot]
KComponentData KCModule::componentData( )const
QList< KConfigDialogManager * > KCModule::configs( )const
- Retorno:
uma lista dos KConfigDialogManager em uso, se existir algum.
void KCModule::defaults( )[virtual, slot]
QString KCModule::exportText( )const
void KCModule::load( )[virtual, slot]
bool KCModule::managedWidgetChangeState( )const [protected]
bool KCModule::needsAuthorization( )const
false
.
- Retorno:
true
se o método save() do módulo precisa de autorização, efalse
caso contrário.
QString KCModule::quickHelp( )const [virtual]
- Nota:
- certifique-se de que o texto de ajuda seja traduzido (use i18n()).
void KCModule::quickHelpChanged( )[signal]
QString KCModule::rootOnlyMessage( )const
void KCModule::save( )[virtual, slot]
Se você usar KConfigXT, o salvamento é feito automaticamente e você não precisa carregar manualmente. Porém, se você por alguma razão reimplementar esse método e também usar KConfigXT, precisa chamar essa função, senão o salvamento das opções do KConfigXT não funcionarão. Chame esse método no final de sua reimplementação, para evitar que sinais changed() quando modificar os widgets.
void KCModule::setAboutData(const KAboutData *about )
void KCModule::setButtons(Buttonsbtn )[protected]
Help: mostra um botão de ajuda.
Default: mostra um botão “Use Defaults”.
Apply: no kcontrol isso exibirá botões “Apply” e “Reset” , no kcmshell serão exibidos os botões “Ok”, “Apply” e “Cancel”.
Se ‘Apply’ não for especificado, o kcmshell mostrará um botão “Close”.
void KCModule::setExportText(const QString &text )
void KCModule::setNeedsAuthorization(boolneedsAuth )
Chamado com
true
, esse método configurará a ação de “org.kde.kcontrol.name.save”, onde “name” é o valor de retorno de aboutData()->appName() Essa ação padrão não será configurada se o objeto aboutData() não for válido.Note que se chamado com o valor
false
, esse método irá reiniciar o nome da ação com setAuthAction().
- Paramêtros:
-
needsAuthTells if the module's save() method requires authorization to be executed.
void KCModule::setQuickHelp(const QString &help )[protected]
void KCModule::setRootOnlyMessage(const QString &message )[protected]
void KCModule::setUseRootOnlyMessage(boolon )[protected]
void KCModule::showEvent(QShowEvent *ev )[protected, virtual]
void KCModule::unmanagedWidgetChangeState(boolchanged )[protected]
bool KCModule::useRootOnlyMessage( )const
void KCModule::widgetChanged( )[protected, slot]
Traduzido de http://api.kde.org/4.x-api/kdelibs-apidocs/kdeui/html/classKCModule.html