Implementation af plugin

Vi vil kun undersøge de relevante dele af implementationen. For en liste af hele implementationen, kig venligst i appendiks. Det første vi vil gøre er at bibliotekskravene til en side:

Eksempel 5.2. Bibliotekskrav

K_EXPORT_COMPONENT_FACTORY( ksplash2k, KGenericFactory<Theme2k> );

Makroen K_EXPORT_COMPONENT_FACTORY erklæres i kgenericfactory.h. Videre til konstruktøren! Da dette er et meget simpelt plugin, er konstruktøren temmelig ligetil.

Eksempel 5.3. Plugin-konstruktør

Theme2k::Theme2k( QWidget *parent, const char *name, const QStringList &args  )
    :ThemeEngine( parent, name, args )
{
  readSettings();
  initUi();
}

Metoden readSettings() illustrerer den rigtige måde at opnå din temaopsætning. (Du ønsker at folk skal bruge dit plugin i deres temaer, ikke sandt?)

Eksempel 5.4. Opnået temaopsætning

void Theme2k::readSettings()
{
  if( !mTheme )
    return;

  KConfig *cfg = mTheme->themeConfig();
  if( !cfg )
    return;

  cfg->setGroup( QString("KSplash Theme: %1").arg(mTheme->theme()) );

  QColor DefaultTBgColor( Qt::darkBlue );
  QColor DefaultTFgColor( Qt::white );

  mTBgColor = cfg->readColorEntry( "Title Background Color", &DefaultTBgColor );
  mTFgColor = cfg->readColorEntry( "Title Foreground Color", &DefaultTFgColor );
  mStatusColor = cfg->readColorEntry("Status Text Color", &mTBgColor );

  QColor DefaultRot1( Qt::darkBlue );
  QColor DefaultRot2( Qt::cyan );
  mRotColor1 = cfg->readColorEntry( "Rotator Color 1", &DefaultRot1 );
  mRotColor2 = cfg->readColorEntry( "Rotator Color 2", &DefaultRot2 );

  mRotSpeed = cfg->readNumEntry( "Rotator Speed", 30 );
  mWndTitle = cfg->readEntry( "Window Title", i18n("Please wait...") );
  mLogoFile = cfg->readEntry( "Logo File", QString::null );
}

Da vi kan lide vore brugere, sørger vi for rimelige standardværdier for parametre der ikke er tilstede i temafilen. Bemærk at vi altid skal sætte vores gruppe til "KSplash Theme: themename" for at forblive kompatible med fremtidige tema-specifikationer. initUI()-metoden er ikke særlig interessant, da den blot opbygger kontrollerne. Se venligst appendiks for detaljer.