broulik added inline comments.

INLINE COMMENTS

> componentchooser.cpp:65
>  
> -     if (loadedConfigWidget) {
> -             configWidgetMap.insert(service, loadedConfigWidget);
> -             configContainer->addWidget(loadedConfigWidget);
> -             connect(loadedConfigWidget, SIGNAL(changed(bool)), this, 
> SLOT(emitChanged(bool)));
> -     }
> -}
> +        QLabel *label = new QLabel(i18nc("The label for the combobox : 
> browser, terminal emulator...)", "%1:", name), this);
> +        label->setToolTip(cfg.group(QByteArray()).readEntry("Comment", 
> QString()));

Superfluous space before `:`

> componentchooser.cpp:70
>  
> -     if (somethingChanged) {
> -             if (KMessageBox::questionYesNo(this,i18n("<qt>You changed the 
> default component of your choice, do want to save that change now 
> ?</qt>"),QString(),KStandardGuiItem::save(),KStandardGuiItem::discard())==KMessageBox::Yes)
>  save();
> -     }
> -     const QString &service = it->data(Qt::UserRole).toString();
> -     KConfig cfg(service, KConfig::SimpleConfig);
> +        connect(loadedConfigWidget, SIGNAL(changed(bool)), this, 
> SLOT(emitChanged()));
>  

Use new connect syntax

> componentchooser.cpp:93
> +    }
> +    loadedConfigWidget->setSizeAdjustPolicy(QComboBox::AdjustToContents);
>  

Check if `loadedConfigWidget` is null

> componentchooser.cpp:101
> +    bool somethingChanged = false;
> +    bool isDefault = true;
> +    // check if another plugin has changed and default status

`isDefaults`

> componentchooser.cpp:103
> +    // check if another plugin has changed and default status
> +    for (auto it = configWidgetMap.constKeyValueBegin(); it != 
> configWidgetMap.constKeyValueEnd(); ++it) {
> +        CfgPlugin *plugin = dynamic_cast<CfgPlugin *>((*it).second);

You don't actually use the `key`, so you can just use range-for.

> componentchooser.cpp:121
>  void ComponentChooser::load() {
> -     if( configWidget )
> -     {
> -             CfgPlugin * plugin = dynamic_cast<CfgPlugin*>( configWidget );
> -             if( plugin )
> -             {
> -                     KConfig cfg(latestEditedService, KConfig::SimpleConfig);
> -                     plugin->load( &cfg );
> -             }
> +    for (auto it = configWidgetMap.constKeyValueBegin(); it != 
> configWidgetMap.constKeyValueEnd(); ++it) {
> +

normal `constBegin()` and then `it.key()` and `it.value()` below

> componentchooser.cpp:141
> +        CfgPlugin *plugin = dynamic_cast<CfgPlugin*>( widget );
> +        if (plugin) {
> +            KConfig cfg(service, KConfig::SimpleConfig);

In some places you check if your `dynamic_cast` worked and sometimes you don't. 
Since we only put `CfgPlugin` instanes in there, I don't think we need to 
check. See my note on the ominous plug-in architecture above.

> componentchooser.cpp:152
>  void ComponentChooser::restoreDefault() {
> -    if (configWidget)
> -    {
> +    for (const auto &configWidget : configWidgetMap) {
>          dynamic_cast<CfgPlugin*>(configWidget)->defaults();

The hash contains pointers, so `auto *`

> componentchooser.cpp:161
> -     {
> -             loadedConfigWidget = new CfgComponent(configContainer);
> -             
> static_cast<CfgComponent*>(loadedConfigWidget)->ChooserDocu->setText(i18n("Choose
>  from the list below which component should be used by default for the %1 
> service.", name));

It appears you dropped the generic component configuration? If that even was a 
thing... makes me wonder why this KCM uses desktop files when it effectively 
only operates on a fixed set of options.

> It will be parted of the plugin interface which I plan for KDE 3.2.

Well, so much for that I guess?

> componentchooserbrowser.cpp:104
>          }
>          if (service->storageId() == 
> QStringLiteral("org.kde.falkon.desktop")) {
> +            m_falkonIndex = count() - 1;

As a future step I would like those default components not hardcoded in the code

> componentchooserbrowser.cpp:111
>          // we have a browser specified by the user
> -        
> browserCombo->addItem(QIcon::fromTheme(QStringLiteral("application-x-shellscript")),
>  browser->name(), browser->storageId());
> -        browserCombo->setCurrentIndex(browserCombo->count() - 1);
> -        m_currentIndex = browserCombo->count() - 1;
> +        
> addItem(QIcon::fromTheme(QStringLiteral("application-x-shellscript")), 
> browser->name(), browser->storageId());
> +        setCurrentIndex(count() - 1);

Something funky is going on with this one:

I configured a custom `kdialog --sorry "%f"` command line. It only shows up as 
"kdialog" so I can't tell what the actual command was and not edit it later.

More importantly, though, I then changed my browser to be Kate. While it 
initially showed "Kate" with proper icon, when I re-open the KCM, it shows 
"kdialog" again as custom command, while still opening Kate when I open http 
URLs. 
Now it keeps showing "kdialog" no matter what default browser I use.

> componentchooserbrowser.cpp:117
>      // add a other option to add a new browser
> -    
> browserCombo->addItem(QIcon::fromTheme(QStringLiteral("application-x-shellscript")),
>  i18n("Other..."), QStringLiteral());
> +    addItem(QIcon::fromTheme(QStringLiteral("application-x-shellscript")), 
> i18n("Other..."), QStringLiteral());
>  

Don't use `QStringLiteral()`, use `QString()` for a null string.
But in this case you can just omit the last argument altogether.

> componentchooseremail.cpp:149
>              const auto icon = QIcon::fromTheme(!service->icon().isEmpty() ? 
> service->icon() : QStringLiteral("application-x-shellscript"));
> -            emailClientsCombo->insertItem(emailClientsCombo->count() - 1, 
> icon, service->name() + " (" + KShell::tildeCollapse(service->entryPath()) + 
> ")", service->storageId());
> +            insertItem(count() - 1, icon, service->name() + " (" + 
> KShell::tildeCollapse(service->entryPath()) + ")", service->storageId());
>  

So here you do show an `entryPath` but not in the other components?

> componentchooserfilemanager.cpp:54
> +{
> +    return m_currentIndex != -1 && m_currentIndex != currentIndex();
>  }

This seems to be the same in all classes. Since now all of them are just 
`QComboBox`es, would it make sense to move any such functionality (and also a 
`defaultIndex`) into the base class?

REPOSITORY
  R119 Plasma Desktop

BRANCH
  new-component-chooser

REVISION DETAIL
  https://phabricator.kde.org/D26797

To: meven, #plasma, #vdg, ngraham, ervin
Cc: broulik, plasma-devel, Orage, LeGast00n, The-Feren-OS-Dev, jraleigh, 
zachus, fbampaloukas, GB_2, ragreen, ZrenBot, ngraham, alexeymin, himcesjf, 
lesliezhai, ali-mohamed, jensreuterberg, abetts, sebas, apol, ahiemstra, mart

Reply via email to