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.
tdemultimedia/arts/builder/portposdlg.cpp

259 lines
6.6 KiB

/*
Copyright (C) 1998 Stefan Westerfeld
stefan@space.twc.de
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.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1307, USA.
*/
#include "portposdlg.h"
#include "structureport.h"
#include <qlayout.h>
#include <qlabel.h>
#include <qlistbox.h>
#include <kbuttonbox.h>
#include <klocale.h>
#include <kinputdialog.h>
#include <qbuttongroup.h>
#include <qradiobutton.h>
#include <kapplication.h>
#include <kiconloader.h>
#include <kseparator.h>
#include <qlineedit.h>
#include <stdio.h>
#include <arts/debug.h>
#include <qpushbutton.h>
#include <kstdguiitem.h>
using namespace std;
PortPosDlg::PortPosDlg(QWidget *parent, Structure *structure) :QDialog(parent,"Props", TRUE)
{
this->structure = structure;
setCaption(i18n("aRts: Structureport View"));
QVBoxLayout *mainlayout = new QVBoxLayout(this);
//QHBoxLayout *contentslayout = new QHBoxLayout;
// object type
/*
mainlayout->addSpacing(5);
QLabel *objectlabel = new QLabel(this);
QFont labelfont(objectlabel->font());
labelfont.setPointSize(labelfont.pointSize()*3/2);
objectlabel->setFont(labelfont);
objectlabel->setText(QString(" ")+i18n("Object type: ")+QString(port->owner->name())+QString(" "));
objectlabel->setAlignment(AlignCenter);
min_size(objectlabel);
mainlayout->addWidget(objectlabel);
*/
// port description
/*
mainlayout->addSpacing(5);
QLabel *portlabel = new QLabel(this);
labelfont.setPointSize(labelfont.pointSize()*4/5);
portlabel->setFont(labelfont);
portlabel->setText(i18n("Port description: ")+ port->description);
min_size(portlabel);
portlabel->setAlignment(AlignCenter);
mainlayout->addWidget(portlabel);
int labelwidth = imax(portlabel->sizeHint().width(),objectlabel->sizeHint().width());
portlabel->setMinimumWidth(labelwidth);
objectlabel->setMinimumWidth(labelwidth);
// hruler
mainlayout->addSpacing(5);
KSeparator *ruler = new KSeparator( KSeparator::HLine, this);
mainlayout->addWidget(ruler);
mainlayout->addSpacing(5);
mainlayout->addLayout(contentslayout);
*/
// list
listbox = new QListBox(this);
update();
listbox->setMinimumSize(100,200);
mainlayout->addWidget(listbox);
// hruler
mainlayout->addSpacing(5);
KSeparator *ruler2 = new KSeparator( KSeparator::HLine, this);
mainlayout->addWidget(ruler2);
// buttons
QHBoxLayout *buttonlayout = new QHBoxLayout;
mainlayout->addSpacing(5);
mainlayout->addLayout(buttonlayout);
mainlayout->addSpacing(5);
buttonlayout->addSpacing(5);
KButtonBox *bbox = new KButtonBox(this);
bbox->addButton(KStdGuiItem::help(), this, SLOT( help() ));
bbox->addStretch(1);
KIconLoader iconloader;
QButton *raise = bbox->addButton(i18n("&Raise"));
raise->setPixmap(iconloader.loadIcon("up", KIcon::Small));
connect( raise, SIGNAL( clicked() ), SLOT( raise() ));
QButton *lower = bbox->addButton(i18n("&Lower"));
lower->setPixmap(iconloader.loadIcon("down", KIcon::Small));
connect( lower, SIGNAL( clicked() ), SLOT( lower() ));
QButton *rename = bbox->addButton(i18n("R&ename..."));
connect( rename, SIGNAL( clicked() ), SLOT( rename() ));
QButton *okbutton = bbox->addButton(KStdGuiItem::ok());
connect( okbutton, SIGNAL( clicked() ), SLOT(accept() ) );
/*
QButton *cancelbutton = bbox->addButton(i18n("Cancel"));
connect( cancelbutton, SIGNAL( clicked() ), SLOT(reject() ) );
*/
bbox->layout();
//min_size(bbox);
buttonlayout->addWidget(bbox);
buttonlayout->addSpacing(5);
//mainlayout->activate();
mainlayout->freeze();
}
void PortPosDlg::raise()
{
int i = listbox->currentItem();
arts_debug("selected %d",i);
if(i < 0) return;
StructurePort *port = listports[i];
assert(port);
// hmm ok this is ugly that the raise function calls lowerPosition
port->lowerPosition();
update();
unsigned long l;
for(l=0;l<listports.size();l++)
if(listports[l]->id() == port->id())
listbox->setCurrentItem(l);
}
void PortPosDlg::lower()
{
int i = listbox->currentItem();
arts_debug("selected %d",i);
if(i < 0) return;
StructurePort *port = listports[i];
assert(port);
port->raisePosition();
update();
unsigned long l;
for(l=0;l<listports.size();l++)
if(listports[l]->id() == port->id())
listbox->setCurrentItem(l);
}
void PortPosDlg::rename()
{
int i = listbox->currentItem();
arts_debug("selected %d",i);
if(i < 0) return;
StructurePort *port = listports[i];
assert(port);
bool ok;
QString name = KInputDialog::getText( i18n( "Rename Port" ),
i18n( "Enter port name:" ), port->name(), &ok, this );
if (ok)
{
arts_debug("rename OK...");
port->rename(name.local8Bit());
}
update();
unsigned long l;
for(l=0;l<listports.size();l++)
if(listports[l]->id() == port->id())
listbox->setCurrentItem(l);
}
void PortPosDlg::update()
{
list<StructureComponent *> &cl = *structure->getComponentList();
list<StructureComponent *>::iterator ci;
listports.erase(listports.begin(), listports.end());
listbox->clear();
// first incoming ports, then outgoing (which are represented by
// the opposite directions inside the structure)
for(int direction = 0; direction < 2; direction++)
{
map<long, StructurePort *> pmap;
int finddirection = ModulePort::in;
int pcount = 0;
if(direction == 0) finddirection = ModulePort::out;
for(ci = cl.begin(); ci != cl.end(); ++ci)
{
StructureComponent *component = *ci;
if(component->type() == StructureComponent::ctPort)
{
StructurePort *port = (StructurePort *)component;
if(port->port()->direction == finddirection)
{
arts_debug("port %s position %ld",
port->name().local8Bit().data(), port->position());
pmap[port->position()] = port;
pcount++;
}
}
}
for(int i=0;i<pcount;i++)
{
StructurePort *port = pmap[i];
if (port)
{
assert(port);
listbox->insertItem(port->name(),listports.size());
listports.push_back(port);
arts_debug("listports.size() is now %d",listports.size());
}
}
}
listbox->repaint();
}
void PortPosDlg::help()
{
KApplication::kApplication()->invokeHelp("", "karts");
}
#include "portposdlg.moc"