You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
piklab/src/progs/gui/prog_config_center.cpp

123 lines
4.6 KiB

/***************************************************************************
* Copyright (C) 2005-2007 Nicolas Hadacek <hadacek@kde.org> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
***************************************************************************/
#include "prog_config_center.h"
#include <qlayout.h>
#include <qlabel.h>
#include <qwidgetstack.h>
#include <qcombobox.h>
#include <qcheckbox.h>
#include <qtimer.h>
#include <qtabwidget.h>
#include <kiconloader.h>
#include "progs/list/prog_list.h"
#include "prog_config_widget.h"
#include "prog_group_ui.h"
#include "libgui/global_config.h"
#include "port_selector.h"
#include "libgui/main_global.h"
//----------------------------------------------------------------------------
QPixmap Programmer::OptionsConfigWidget::pixmap() const
{
KIconLoader loader;
return loader.loadIcon("piklab_config_programmer", KIcon::Toolbar, KIcon::SizeMedium);
}
//----------------------------------------------------------------------------
Programmer::SelectConfigWidget::SelectConfigWidget()
{
uint row = 0;
// programmer type
QLabel *label = new QLabel(i18n("Programmer in use:"), this);
addWidget(label, row,row, 0,0);
_combo = new KeyComboBox<QString>(this);
connect(_combo->widget(), SIGNAL(activated(int)), SLOT(programmerChanged()));
addWidget(_combo->widget(), row,row, 1,1);
row++;
// tab widget
_tabWidget = new QTabWidget(this);
addWidget(_tabWidget, row,row, 0,2);
row++;
// port selector
_portSelectorContainer = new Container;
_portSelectorContainer->setMargin(10);
_portSelector = new PortSelector(_portSelectorContainer);
connect(_portSelector, SIGNAL(changed()), SLOT(portChanged()));
_portSelectorContainer->addWidget(_portSelector, 0,0, 0,0);
// specific programmer config
_stack = new KeyWidgetStack<QString>(_tabWidget);
static_cast<QFrame *>(_stack->widget())->setMargin(10);
KIconLoader loader;
QPixmap icon = loader.loadIcon("configure", KIcon::Small);
_tabWidget->addTab(_stack->widget(), icon, i18n("Specific"));
::Programmer::Lister::ConstIterator it;
for (it=::Programmer::lister().begin(); it!=::Programmer::lister().end(); ++it) {
_combo->appendItem(it.key(), it.data()->label());
::Programmer::ConfigWidget *pcw = static_cast<const ::Programmer::GroupUI *>(it.data()->gui())->createConfigWidget(_stack->widget());
pcw->loadConfig();
_stack->appendItem(it.key(), pcw);
}
// init
_combo->setCurrentItem(GlobalConfig::programmerGroup().name());
_stack->setCurrentItem(GlobalConfig::programmerGroup().name());
QTimer::singleShot(0, this, SLOT(programmerChanged()));
}
void Programmer::SelectConfigWidget::portChanged()
{
::BusyCursor bc; // can take a few seconds to connect programmer...
HardwareDescription hd;
hd.port = _portSelector->portDescription();
::Hardware::Config *config = Main::programmerGroup().hardwareConfig();
if (config) hd.name = config->currentHardware(hd.port.type);
delete config;
QWidget *w = _stack->item(_combo->currentItem());
bool ok = static_cast< ::Programmer::ConfigWidget *>(w)->setPort(hd);
_portSelector->setStatus(hd.port.type, ok ? i18n("Connection: Ok") : i18n("Connection: Error"));
}
QPixmap Programmer::SelectConfigWidget::pixmap() const
{
KIconLoader loader;
return loader.loadIcon("piklab_config_programmer", KIcon::Toolbar, KIcon::SizeMedium);
}
void Programmer::SelectConfigWidget::saveConfig()
{
_portSelector->saveConfig();
QString key = _combo->currentItem();
static_cast<ConfigWidget *>(_stack->item(key))->saveConfig();
GlobalConfig::writeProgrammerGroup(*::Programmer::lister().group(key));
}
void Programmer::SelectConfigWidget::programmerChanged()
{
QString key = _combo->currentItem();
const ::Programmer::Group &group = *::Programmer::lister().group(key);
bool isHardware = !group.isSoftware();
bool hasTab = ( _tabWidget->indexOf(_portSelectorContainer)!=-1 );
if (isHardware) {
if ( !hasTab ) {
KIconLoader loader;
QPixmap icon = loader.loadIcon("connect_creating", KIcon::Small);
_tabWidget->insertTab(_portSelectorContainer, icon, i18n("Port Selection"), 0);
}
} else if (hasTab) _tabWidget->removePage(_portSelectorContainer);
_portSelector->setGroup(group);
_stack->setCurrentItem(key);
if (isHardware) QTimer::singleShot(0, this, SLOT(portChanged()));
}