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.
tdesdk/umbrello/umbrello/dialogs/assocgenpage.cpp

132 lines
4.3 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 "assocgenpage.h"
// qt includes
#include <tqlayout.h>
#include <kcombobox.h>
// kde includes
#include <tdelocale.h>
#include <tdemessagebox.h>
#include <kdebug.h>
// local includes
#include "../association.h"
#include "../dialog_utils.h"
AssocGenPage::AssocGenPage (UMLDoc *d, TQWidget *parent, AssociationWidget *assoc)
: TQWidget(parent)
{
m_pAssociationWidget = assoc;
m_pWidget = 0;
m_pTypeCB = 0;
m_pAssocNameLE = 0;
m_pUmldoc = d;
constructWidget();
}
AssocGenPage::~AssocGenPage() {}
void AssocGenPage::constructWidget() {
// general configuration of the GUI
int margin = fontMetrics().height();
setMinimumSize(310,330);
TQVBoxLayout * topLayout = new TQVBoxLayout(this);
topLayout -> setSpacing(6);
// group boxes for name, documentation properties
TQGroupBox *nameGB = new TQGroupBox(this);
TQGroupBox *docGB = new TQGroupBox(this);
nameGB -> setTitle(i18n("Properties"));
docGB -> setTitle(i18n("Documentation"));
topLayout -> addWidget(nameGB);
topLayout -> addWidget(docGB);
TQGridLayout * nameLayout = new TQGridLayout(nameGB, 2, 2);
nameLayout -> setSpacing(6);
nameLayout -> setMargin(margin);
//Association name
TQLabel *pAssocNameL = NULL;
TQLineEdit* nameField = Dialog_Utils::makeLabeledEditField( nameGB, nameLayout, 0,
pAssocNameL, i18n("Name:"),
m_pAssocNameLE, m_pAssociationWidget->getName() );
nameField->setFocus();
// document
TQHBoxLayout * docLayout = new TQHBoxLayout(docGB);
docLayout -> setMargin(margin);
m_pDoc = new TQMultiLineEdit(docGB);
docLayout -> addWidget(m_pDoc);
m_pDoc-> setText(m_pAssociationWidget-> getDoc());
Uml::Association_Type currentType = m_pAssociationWidget->getAssocType();
TQString currentTypeAsString = UMLAssociation::typeAsString(currentType);
TQLabel *pTypeL = new TQLabel(i18n("Type:"), nameGB);
nameLayout->addWidget(pTypeL, 1, 0);
/* Here is a list of all the supported choices for changing
association types */
m_AssocTypes.clear();
m_AssocTypes << Uml::at_Aggregation
<< Uml::at_Composition << Uml::at_Containment;
bool found=false;
m_AssocTypeStrings.clear();
for (uint i=0; i<m_AssocTypes.size(); ++i) {
if (m_AssocTypes[i] == currentType) found=true;
TQString typeStr = UMLAssociation::typeAsString(m_AssocTypes[i]);
m_AssocTypeStrings << typeStr;
}
if (!found) {
m_AssocTypes.clear();
m_AssocTypes << currentType;
m_AssocTypeStrings.clear();
m_AssocTypeStrings << currentTypeAsString;
}
m_pTypeCB = new KComboBox(nameGB);
pTypeL->setBuddy(m_pTypeCB);
m_pTypeCB->insertStringList(m_AssocTypeStrings);
m_pTypeCB->setCompletedItems(m_AssocTypeStrings);
m_pTypeCB->setCurrentText(currentTypeAsString);
m_pTypeCB->setDuplicatesEnabled(false);//only allow one of each type in box
m_pTypeCB->setCompletionMode( TDEGlobalSettings::CompletionPopup );
m_pDoc->setWordWrap(TQMultiLineEdit::WidgetWidth);
nameLayout->addWidget(m_pTypeCB, 1, 1);
}
void AssocGenPage::updateObject() {
if (m_pAssociationWidget) {
int comboBoxItem = m_pTypeCB->currentItem();
Uml::Association_Type newType = m_AssocTypes[comboBoxItem];
m_pAssociationWidget->setAssocType(newType);
m_pAssociationWidget->setName(m_pAssocNameLE->text());
m_pAssociationWidget->setDoc(m_pDoc->text());
} //end if m_pAssociationWidget
}
#include "assocgenpage.moc"