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.
162 lines
5.4 KiB
162 lines
5.4 KiB
/***************************************************************************
|
|
* *
|
|
* 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. *
|
|
* *
|
|
* copyright (C) 2003-2006 *
|
|
* Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
|
|
***************************************************************************/
|
|
|
|
// own header
|
|
#include "umltemplatedialog.h"
|
|
|
|
// qt includes
|
|
#include <tqlayout.h>
|
|
#include <tqgroupbox.h>
|
|
#include <tqcombobox.h>
|
|
#include <tqlabel.h>
|
|
#include <tqlineedit.h>
|
|
|
|
// kde includes
|
|
#include <kcombobox.h>
|
|
#include <tdelocale.h>
|
|
#include <tdemessagebox.h>
|
|
#include <kdebug.h>
|
|
|
|
// app includes
|
|
#include "../template.h"
|
|
#include "../classifier.h"
|
|
#include "../umldoc.h"
|
|
#include "../uml.h"
|
|
#include "../dialog_utils.h"
|
|
|
|
UMLTemplateDialog::UMLTemplateDialog(TQWidget* pParent, UMLTemplate* pTemplate)
|
|
: KDialogBase( Plain, i18n("Template Properties"), Help | Ok | Cancel , Ok, pParent, "_UMLTemplateDLG_", true, true) {
|
|
m_pTemplate = pTemplate;
|
|
setupDialog();
|
|
}
|
|
|
|
UMLTemplateDialog::~UMLTemplateDialog() {}
|
|
|
|
void UMLTemplateDialog::setupDialog() {
|
|
int margin = fontMetrics().height();
|
|
|
|
TQVBoxLayout* mainLayout = new TQVBoxLayout( plainPage() );
|
|
|
|
m_pValuesGB = new TQGroupBox(i18n("General Properties"), plainPage() );
|
|
TQGridLayout* valuesLayout = new TQGridLayout(m_pValuesGB, 3, 2);
|
|
valuesLayout->setMargin(margin);
|
|
valuesLayout->setSpacing(10);
|
|
|
|
m_pTypeL = new TQLabel(i18n("&Type:"), m_pValuesGB);
|
|
valuesLayout->addWidget(m_pTypeL, 0, 0);
|
|
|
|
m_pTypeCB = new KComboBox(m_pValuesGB);
|
|
valuesLayout->addWidget(m_pTypeCB, 0, 1);
|
|
m_pTypeL->setBuddy(m_pTypeCB);
|
|
|
|
Dialog_Utils::makeLabeledEditField( m_pValuesGB, valuesLayout, 1,
|
|
m_pNameL, i18n("&Name:"),
|
|
m_pNameLE, m_pTemplate->getName() );
|
|
|
|
Dialog_Utils::makeLabeledEditField( m_pValuesGB, valuesLayout, 2,
|
|
m_pStereoTypeL, i18n("&Stereotype name:"),
|
|
m_pStereoTypeLE, m_pTemplate->getStereotype() );
|
|
|
|
mainLayout->addWidget(m_pValuesGB);
|
|
|
|
// "class" is the nominal type of template parameter
|
|
insertType( "class" );
|
|
// Add the active data types to combo box
|
|
UMLDoc *pDoc = UMLApp::app()->getDocument();
|
|
UMLClassifierList namesList( pDoc->getConcepts() );
|
|
UMLClassifier* obj = 0;
|
|
for (obj = namesList.first(); obj; obj = namesList.next()) {
|
|
insertType( obj->getName() );
|
|
}
|
|
|
|
m_pTypeCB->setEditable(true);
|
|
m_pTypeCB->setDuplicatesEnabled(false);//only allow one of each type in box
|
|
m_pTypeCB->setCompletionMode( TDEGlobalSettings::CompletionPopup );
|
|
// m_pTypeCB->setAutoCompletion(true);
|
|
|
|
//work out which one to select
|
|
int typeBoxCount = 0;
|
|
bool foundType = false;
|
|
while (typeBoxCount < m_pTypeCB->count() && foundType == false) {
|
|
TQString typeBoxString = m_pTypeCB->text(typeBoxCount);
|
|
if ( typeBoxString == m_pTemplate->getTypeName() ) {
|
|
foundType = true;
|
|
m_pTypeCB->setCurrentItem(typeBoxCount);
|
|
} else {
|
|
typeBoxCount++;
|
|
}
|
|
}
|
|
|
|
if (!foundType) {
|
|
insertType( m_pTemplate->getTypeName(), 0 );
|
|
m_pTypeCB->setCurrentItem(0);
|
|
}
|
|
|
|
m_pNameLE->setFocus();
|
|
}
|
|
|
|
void UMLTemplateDialog::insertType( const TQString& type, int index )
|
|
{
|
|
m_pTypeCB->insertItem( type, index );
|
|
m_pTypeCB->completionObject()->addItem( type );
|
|
}
|
|
|
|
bool UMLTemplateDialog::apply() {
|
|
TQString typeName = m_pTypeCB->currentText();
|
|
UMLDoc *pDoc = UMLApp::app()->getDocument();
|
|
UMLClassifierList namesList( pDoc->getConcepts() );
|
|
UMLClassifier* obj = 0;
|
|
for (obj = namesList.first(); obj; obj = namesList.next()) {
|
|
if (typeName == obj->getName()) {
|
|
m_pTemplate->setType( obj );
|
|
}
|
|
}
|
|
if (obj == NULL) { // not found.
|
|
// FIXME: This implementation is not good yet.
|
|
m_pTemplate->setTypeName( typeName );
|
|
}
|
|
TQString name = m_pNameLE->text();
|
|
if( name.length() == 0 ) {
|
|
KMessageBox::error(this, i18n("You have entered an invalid template name."),
|
|
i18n("Template Name Invalid"), false);
|
|
m_pNameLE->setText( m_pTemplate->getName() );
|
|
return false;
|
|
}
|
|
|
|
UMLClassifier * pClass = dynamic_cast<UMLClassifier *>( m_pTemplate->parent() );
|
|
if (pClass) {
|
|
UMLObject *o = pClass->findChildObject(name);
|
|
if (o && o != m_pTemplate) {
|
|
KMessageBox::error(this, i18n("The template parameter name you have chosen is already being used in this operation."),
|
|
i18n("Template Name Not Unique"), false);
|
|
m_pNameLE->setText( m_pTemplate->getName() );
|
|
return false;
|
|
}
|
|
}
|
|
m_pTemplate->setName(name);
|
|
|
|
m_pTemplate->setStereotype( m_pStereoTypeLE->text() );
|
|
|
|
return true;
|
|
}
|
|
|
|
void UMLTemplateDialog::slotApply() {
|
|
apply();
|
|
}
|
|
|
|
void UMLTemplateDialog::slotOk() {
|
|
if ( apply() ) {
|
|
accept();
|
|
}
|
|
}
|
|
|
|
#include "umltemplatedialog.moc"
|