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/tools/list/tools_config_widget.cpp

145 lines
5.6 KiB

/***************************************************************************
* Copyright (C) 2005-2006 Nicolas Hadacek <hadacek@kde.org> *
* Copyright (C) 2004 Alain Gibaud <alain.gibaud@free.fr> *
* *
* 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 "tools_config_widget.h"
#include <tqwidgetstack.h>
#include <tqlabel.h>
#include "tool_list.h"
#include "tools/gui/tool_config_widget.h"
#include "tools/gui/tool_group_ui.h"
#include "compile_config.h"
#include "compile_process.h"
#include "libgui/project.h"
//----------------------------------------------------------------------------
HelpDialog::HelpDialog(TQWidget *tqparent)
: Dialog(tqparent, "help_dialog", false, i18n("Help Dialog"), Close, Close, false)
{
TQGridLayout *top = new TQGridLayout(mainWidget(), 1, 1, 10, 10);
uint k = 0;
for (; Compile::ARGUMENT_DATA[k].key; k++) {
TQLabel *label = new TQLabel(Compile::ARGUMENT_DATA[k].key, mainWidget());
top->addWidget(label, k, 0);
label = new TQLabel(i18n(Compile::ARGUMENT_DATA[k].description), mainWidget());
top->addWidget(label, k, 1);
}
top->setColStretch(2, 1);
top->setRowStretch(k, 1);
}
//----------------------------------------------------------------------------
ToolsConfigWidget::ToolsConfigWidget(Project *project, TQWidget *tqparent)
: ::ConfigWidget(tqparent), _project(project), _helpDialog(0)
{
uint row = 0;
TQLabel *label = new TQLabel(i18n("Toolchain:"), this);
addWidget(label, row,row, 0,0);
_tool = new KeyComboBox<TQString>(this);
Tool::Lister::ConstIterator it;
for (it=Tool::lister().begin(); it!=Tool::lister().end(); ++it)
_tool->appendItem(it.key(), it.data()->label());
connect(_tool->widget(), TQT_SIGNAL(activated(int)), TQT_SLOT(toolChanged()));
addWidget(_tool->widget(), row,row, 1,1);
label = new TQLabel(i18n("Output type:"), this);
addWidget(label, row,row, 2,2);
_output = new KeyComboBox<Tool::OutputType>(this);
FOR_EACH(Tool::OutputType, type) _output->appendItem(type, type.label());
addWidget(_output->widget(), row,row, 3,3);
row++;
_mainStack = new TQWidgetStack(this);
addWidget(_mainStack, row,row, 0,4);
row++;
_tabWidget = new TQTabWidget(_mainStack);
_mainStack->addWidget(_tabWidget);
FOR_EACH(Tool::Category, category) {
_stacks[category] = new KeyWidgetStack<TQString>(_tabWidget);
_stacks[category]->widget()->setMargin(10);
Tool::Lister::ConstIterator it;
for (it=Tool::lister().begin(); it!=Tool::lister().end(); ++it) {
if ( it.data()->isCustom() ) continue;
if ( !it.data()->needs(_project, category) ) continue;
ToolConfigWidget *cw = static_cast<const Tool::GroupUI *>(it.data()->gui())->createConfigWidget(category, project);
Q_ASSERT(cw);
_stacks[category]->appendItem(it.key(), cw);
connect(cw, TQT_SIGNAL(displayHelp()), TQT_SLOT(displayHelp()));
}
}
_customWidget = new TQWidget(_mainStack);
_mainStack->addWidget(_customWidget);
TQVBoxLayout *vbox = new TQVBoxLayout(_customWidget);
label = new TQLabel(i18n("Custom shell commands:"), _customWidget);
vbox->addWidget(label);
_commandsEditor = new EditListBox(1, _customWidget, "command_editor", EditListBox::DuplicatesAllowed);
vbox->addWidget(_commandsEditor);
setColStretch(4, 1);
}
void ToolsConfigWidget::toolChanged()
{
TQString name = _tool->currentItem();
bool canMakeLibrary = Tool::lister().group(name)->needs(_project, Tool::Category::Librarian);
_output->widget()->setEnabled(canMakeLibrary);
if ( !canMakeLibrary ) _output->setCurrentItem(Tool::OutputType::Executable);
if ( name==Tool::Group::CUSTOM_NAME ) _mainStack->raiseWidget(_customWidget);
else {
_mainStack->raiseWidget(_tabWidget);
FOR_EACH(Tool::Category, k) {
_tabWidget->removePage(_stacks[k]->widget());
_stacks[k]->widget()->hide();
if ( _stacks[k]->contains(name) ) {
_stacks[k]->setCurrentItem(name);
_stacks[k]->widget()->show();
_tabWidget->addTab(_stacks[k]->widget(), i18n(k.data().title));
}
}
_tabWidget->setCurrentPage(0);
}
}
void ToolsConfigWidget::loadConfig()
{
const Tool::Group &group = Compile::Config::toolGroup(_project);
_tool->setCurrentItem(group.name());
_output->setCurrentItem(_project->outputType());
TQStringList commands = Compile::Config::customCommands(_project);
_commandsEditor->setTexts(commands);
toolChanged();
FOR_EACH(Tool::Category, k) {
KeyWidgetStack<TQString>::ConstIterator it;
for (it=_stacks[k]->begin(); it!=_stacks[k]->end(); ++it) {
if ( it.key()==Tool::Group::CUSTOM_NAME ) continue;
static_cast<ToolConfigWidget *>(_stacks[k]->item(it.key()))->loadConfig();
}
}
}
void ToolsConfigWidget::saveConfig()
{
TQString name = _tool->currentItem();
Compile::Config::setToolGroup(_project, *Tool::lister().group(name));
_project->setOutputType(_output->currentItem());
Compile::Config::setCustomCommands(_project, _commandsEditor->texts());
FOR_EACH(Tool::Category, k) {
if ( !_stacks[k]->contains(name) ) continue;
TQWidget *w = _stacks[k]->item(name);
static_cast<ToolConfigWidget *>(w)->saveConfig();
}
}
void ToolsConfigWidget::displayHelp()
{
if ( _helpDialog.isNull() ) _helpDialog = new HelpDialog(this);
_helpDialog->show();
}