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/listpopupmenu.cpp

1349 lines
45 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) 2002-2006 *
* Umbrello UML Modeller Authors <uml-devel@uml.sf.net> *
***************************************************************************/
// own header
#include "listpopupmenu.h"
// qt/kde includes
#include <kstandarddirs.h>
#include <kiconloader.h>
#include <tdelocale.h>
#include <kdebug.h>
// app includes
#include "umlwidget.h"
#include "umldoc.h"
#include "umllistview.h"
#include "umllistviewitem.h"
#include "classifierwidget.h"
#include "classifier.h"
#include "floatingtextwidget.h"
#include "uml.h"
#include "model_utils.h"
#include "widget_utils.h"
#include "folder.h"
#include "umlview.h"
#include "statewidget.h"
#include "activitywidget.h"
#include "forkjoinwidget.h"
#include "objectwidget.h"
//ListPopupMenu for a UMLView (diagram)
ListPopupMenu::ListPopupMenu(TQWidget *parent, Menu_Type type, UMLView * view)
: TDEPopupMenu(parent) {
init();
setupMenu(type, view);
}
//ListPopupMenu for the tree list view
ListPopupMenu::ListPopupMenu(TQWidget *parent, Uml::ListView_Type type)
: TDEPopupMenu(parent) {
init();
Menu_Type mt = mt_Undefined;
switch(type)
{
case Uml::lvt_Logical_View:
mt = mt_Logical_View;
break;
case Uml::lvt_UseCase_View:
mt = mt_UseCase_View;
break;
case Uml::lvt_Component_View:
mt = mt_Component_View;
break;
case Uml::lvt_EntityRelationship_Model:
mt = mt_EntityRelationship_Model;
break;
case Uml::lvt_Deployment_View:
mt = mt_Deployment_View;
break;
case Uml::lvt_Logical_Folder:
mt = mt_Logical_Folder;
break;
case Uml::lvt_UseCase_Folder:
mt = mt_UseCase_Folder;
break;
case Uml::lvt_Component_Folder:
mt = mt_Component_Folder;
break;
case Uml::lvt_Deployment_Folder:
mt = mt_Deployment_Folder;
break;
case Uml::lvt_EntityRelationship_Folder:
mt = mt_EntityRelationship_Folder;
break;
case Uml::lvt_UseCase_Diagram:
mt = mt_UseCase_Diagram;
break;
case Uml::lvt_Class_Diagram:
mt = mt_Class_Diagram;
break;
case Uml::lvt_Collaboration_Diagram:
mt = mt_Collaboration_Diagram;
break;
case Uml::lvt_Sequence_Diagram:
mt = mt_Sequence_Diagram;
break;
case Uml::lvt_State_Diagram:
mt = mt_State_Diagram;
break;
case Uml::lvt_Activity_Diagram:
mt = mt_Activity_Diagram;
break;
case Uml::lvt_Component_Diagram:
mt = mt_Component_Diagram;
break;
case Uml::lvt_Deployment_Diagram:
mt = mt_Deployment_Diagram;
break;
case Uml::lvt_EntityRelationship_Diagram:
mt = mt_EntityRelationship_Diagram;
break;
case Uml::lvt_Actor:
mt = mt_Actor;
break;
case Uml::lvt_UseCase:
mt = mt_UseCase;
break;
case Uml::lvt_Class:
mt = mt_Class;
break;
case Uml::lvt_Package:
mt = mt_Package;
break;
case Uml::lvt_Subsystem:
mt = mt_Subsystem;
break;
case Uml::lvt_Component:
mt = mt_Component;
break;
case Uml::lvt_Node:
mt = mt_Node;
break;
case Uml::lvt_Artifact:
mt = mt_Artifact;
break;
case Uml::lvt_Interface:
mt = mt_Interface;
break;
case Uml::lvt_Enum:
mt = mt_Enum;
break;
case Uml::lvt_EnumLiteral:
mt = mt_EnumLiteral;
break;
case Uml::lvt_Datatype:
mt = mt_Datatype;
break;
case Uml::lvt_Attribute:
mt = mt_Attribute;
break;
case Uml::lvt_Operation:
mt = mt_Operation;
break;
case Uml::lvt_Template:
mt = mt_Template;
break;
case Uml::lvt_Entity:
mt = mt_Entity;
break;
case Uml::lvt_EntityAttribute:
mt = mt_EntityAttribute;
break;
case Uml::lvt_Model:
mt = mt_Model;
break;
default: ;
//break;
}
setupMenu(mt);
}
//ListPopupMenu for a canvas widget
ListPopupMenu::ListPopupMenu(TQWidget * parent, UMLWidget * object,
bool multi, bool unique)
: TDEPopupMenu(parent)
{
init();
//make the right menu for the type
//make menu for logical view
if(!object)
return;
Uml::Widget_Type type = object -> getBaseType();
if(multi) {
ClassifierWidget *c = NULL;
if (unique && (type == Uml::wt_Class || type == Uml::wt_Interface)) {
c = static_cast<ClassifierWidget *>( object );
makeMultiClassifierPopup(c);
}
setupColorSelection(object -> getUseFillColour());
insertSeparator();
insertStdItem(mt_Cut);
insertStdItem(mt_Copy);
insertStdItem(mt_Paste);
insertSeparator();
insertItem(SmallIcon( "fonts" ), i18n( "Change Font..." ),
mt_Change_Font_Selection );
insertItem(SmallIcon( "editdelete" ), i18n("Delete Selected Items"),
mt_Delete_Selection);
// add this here and not above with the other stuff of the interface
// user might expect it at this position of the context menu
if (unique) {
if (type == Uml::wt_Interface) {
insertItem(i18n("Draw as Circle"), mt_DrawAsCircle_Selection);
setItemChecked( mt_DrawAsCircle_Selection,
c->getDrawAsCircle() );
insertItem(i18n("Change into Class"), mt_ChangeToClass_Selection);
} else if (type == Uml::wt_Class) {
UMLClassifier *umlc = c->getClassifier();
if (umlc->getAbstract() && umlc->attributes() == 0)
insertItem(i18n("Change into Interface"), mt_ChangeToInterface_Selection);
}
}
if(m_pInsert)
connect(m_pInsert, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
if(m_pShow)
connect(m_pShow, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
if(m_pColor)
connect(m_pColor, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
return;
}
StateWidget *pState;
ActivityWidget *pActivity;
UMLView * pView = static_cast<UMLView *>( parent );
switch(type) {
case Uml::wt_Actor:
case Uml::wt_UseCase:
setupColor(object -> getUseFillColour());
insertStdItems(true, type);
insertStdItem(mt_Rename);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
break;
case Uml::wt_Class:
case Uml::wt_Interface:
makeClassifierPopup(static_cast<ClassifierWidget*>(object));
break;
case Uml::wt_Enum:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(SmallIcon("source"), i18n("Enum Literal..."), mt_EnumLiteral);
insertFileNew();
setupColor(object->getUseFillColour());
insertStdItems(true, type);
insertStdItem(mt_Rename);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
break;
case Uml::wt_Entity:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(SmallIcon("source"), i18n("Entity Attribute..."), mt_EntityAttribute);
insertFileNew();
setupColor(object->getUseFillColour());
insertStdItems(true, type);
insertStdItem(mt_Rename);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
break;
case Uml::wt_Datatype:
case Uml::wt_Package:
case Uml::wt_Component:
case Uml::wt_Node:
case Uml::wt_Artifact:
setupColor(object->getUseFillColour());
insertStdItems(false, type);
insertStdItem(mt_Rename);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
break;
case Uml::wt_Object:
//Used for sequence diagram and collaboration diagram widgets
setupColor( object->getUseFillColour() );
if( pView->getType() == Uml::dt_Sequence ) {
insertSeparator();
int tabUp = insertItem( SmallIcon( "1uparrow"), i18n("Move Up"), mt_Up);
insertItem( SmallIcon( "1downarrow"), i18n("Move Down"), mt_Down);
if ( !(static_cast<ObjectWidget*>(object))->canTabUp() ) {
setItemEnabled(tabUp, false);
}
}
insertStdItems(true, type);
insertItem(i18n("Rename Class..."), mt_Rename);
insertItem(i18n("Rename Object..."), mt_Rename_Object);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
break;
case Uml::wt_Message:
insertStdItems(false, type);
insertStdItem(mt_Change_Font);
insertItem(SmallIcon( "filenew"), i18n("New Operation..."), mt_Operation);
insertItem(i18n("Select Operation..."), mt_Select_Operation);
break;
case Uml::wt_Note:
setupColor(object -> getUseFillColour());
insertSeparator();
insertStdItem(mt_Cut);
insertStdItem(mt_Copy);
insertStdItem(mt_Paste);
insertItem(SmallIcon( "editdelete"), i18n("Clear"), mt_Clear);
insertSeparator();
insertItem(i18n("Change Text..."), mt_Rename);
insertStdItem(mt_Delete);
insertStdItem(mt_Change_Font);
break;
case Uml::wt_Box:
insertStdItems(false, type);
insertStdItem(mt_Line_Color);
break;
case Uml::wt_State:
pState = static_cast< StateWidget *>( object );
if( pState -> getStateType() == StateWidget::Normal ) {
m_pInsert = new TDEPopupMenu(this);
m_pInsert -> insertItem(SmallIcon( "filenew"), i18n("Activity..."), mt_New_Activity);
insertFileNew();
}
setupColor( object -> getUseFillColour() );
insertStdItems(false, type);
if( pState -> getStateType() == StateWidget::Normal ) {
insertItem(i18n("Change State Name..."), mt_Rename);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
}
break;
case Uml::wt_ForkJoin:
{
ForkJoinWidget *pForkJoin = static_cast<ForkJoinWidget*>(object);
if (pForkJoin->getDrawVertical())
insertItem(i18n("FlipQt::Horizontal"), mt_Flip);
else
insertItem(i18n("FlipQt::Vertical"), mt_Flip);
}
break;
case Uml::wt_Activity:
pActivity = static_cast<ActivityWidget *>( object );
if( pActivity -> getActivityType() == ActivityWidget::Normal )
setupColor( object -> getUseFillColour() );
insertStdItems(false, type);
if( pActivity -> getActivityType() == ActivityWidget::Normal ) {
insertItem(i18n("Change Activity Name..."), mt_Rename);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Properties);
}
break;
case Uml::wt_Text:
switch( (static_cast<FloatingTextWidget*>(object))->getRole() ) {
case Uml::tr_MultiB:
insertAssocItem(i18n("Change Multiplicity..."), mt_Rename_MultiB);
break;
case Uml::tr_MultiA:
insertAssocItem(i18n("Change Multiplicity..."), mt_Rename_MultiA);
break;
case Uml::tr_Name:
insertAssocItem(i18n("Change Name"), mt_Rename_Name);
break;
case Uml::tr_RoleAName:
insertAssocItem(i18n("Change Role A Name..."), mt_Rename_RoleAName);
break;
case Uml::tr_RoleBName:
insertAssocItem(i18n("Change Role B Name..."), mt_Rename_RoleBName);
break;
case Uml::tr_ChangeA:
case Uml::tr_ChangeB:
insertStdItem(mt_Change_Font);
insertStdItem(mt_Reset_Label_Positions);
insertStdItem(mt_Properties);
break;
case Uml::tr_Coll_Message_Self:
case Uml::tr_Coll_Message:
case Uml::tr_Seq_Message_Self:
case Uml::tr_Seq_Message:
insertStdItem(mt_Change_Font);
insertItem(SmallIcon( "filenew"), i18n("New Operation..."), mt_Operation);
insertItem(i18n("Select Operation..."), mt_Select_Operation);
break;
case Uml::tr_Floating:
default:
insertStdItems(false, type);
insertItem(i18n("Change Text..."), mt_Rename);
insertStdItem(mt_Change_Font);
break;
}
break;
default:
break;
}//end switch
if(m_pInsert)
connect(m_pInsert, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
if(m_pShow)
connect(m_pShow, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
if(m_pColor)
connect(m_pColor, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
bool bCutState = UMLApp::app() -> getCutCopyState();
setItemEnabled( mt_Cut, bCutState );
setItemEnabled( mt_Copy, bCutState );
setItemEnabled( mt_Paste, false );
}
ListPopupMenu::~ListPopupMenu() {}
void ListPopupMenu::init() {
m_pInsert = 0;
m_pShow = 0;
m_pColor = 0;
}
void ListPopupMenu::insertFileNew() {
insertItem(SmallIcon("filenew"), i18n("New"), m_pInsert);
}
void ListPopupMenu::insertStdItem(Menu_Type m)
{
switch (m) {
case mt_Properties:
insertItem(SmallIcon("info"), i18n("Properties"), mt_Properties);
break;
case mt_Rename:
insertItem(i18n("Rename..."), mt_Rename);
break;
case mt_Delete:
insertItem(SmallIcon("editdelete"), i18n("Delete"), mt_Delete);
break;
case mt_Cut:
insertItem(SmallIcon("editcut"), i18n("Cut"), mt_Cut);
break;
case mt_Copy:
insertItem(SmallIcon("editcopy"), i18n("Copy"), mt_Copy);
break;
case mt_Paste:
insertItem(SmallIcon("editpaste"), i18n("Paste"), mt_Paste);
break;
case mt_Change_Font:
insertItem(SmallIcon("fonts"), i18n("Change Font..."), mt_Change_Font);
break;
case mt_Line_Color:
insertItem(SmallIcon("color_line"), i18n("Line Color..."), mt_Line_Color);
break;
case mt_Expand_All:
insertItem(i18n("Expand All"), mt_Expand_All);
break;
case mt_Collapse_All:
insertItem(i18n("Collapse All"), mt_Collapse_All);
break;
case mt_Clone:
insertItem(i18n("Duplicate"), mt_Clone);
break;
case mt_Externalize_Folder:
insertItem(i18n("Externalize Folder..."), mt_Externalize_Folder);
break;
case mt_Internalize_Folder:
insertItem(i18n("Internalize Folder"), mt_Internalize_Folder);
break;
case mt_Import_Classes:
insertItem(BarIcon("source_cpp"), i18n("Import Classes..."), mt_Import_Classes);
break;
case mt_Package:
m_pInsert->insertItem(m_pixmap[pm_Package], i18n("Package"), mt_Package);
case mt_Subsystem:
m_pInsert->insertItem(m_pixmap[pm_Subsystem], i18n("Subsystem"), mt_Subsystem);
break;
case mt_Component:
m_pInsert->insertItem(m_pixmap[pm_Component], i18n("Component"), mt_Component);
break;
case mt_Artifact:
m_pInsert->insertItem(m_pixmap[pm_Artifact], i18n("Artifact"), mt_Artifact);
break;
case mt_Component_Diagram:
m_pInsert->insertItem(BarIcon("umbrello_diagram_component"), i18n("Component Diagram..."),
mt_Component_Diagram);
break;
case mt_Node:
m_pInsert->insertItem(m_pixmap[pm_Node], i18n("Node"), mt_Node);
break;
case mt_Deployment_Diagram:
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_Deployment), i18n("Deployment Diagram..."),
mt_Deployment_Diagram);
break;
case mt_Deployment_Folder:
case mt_Component_Folder:
case mt_UseCase_Folder:
case mt_EntityRelationship_Folder:
m_pInsert->insertItem(BarIcon("folder_new"), i18n("Folder"), m);
break;
case mt_Entity:
m_pInsert->insertItem(m_pixmap[pm_Entity], i18n("Entity"), mt_Entity);
break;
case mt_EntityRelationship_Diagram:
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_EntityRelationship), i18n("Entity Relationship Diagram..."),
mt_EntityRelationship_Diagram);
break;
case mt_Actor:
m_pInsert->insertItem(m_pixmap[pm_Actor], i18n("Actor"), mt_Actor);
break;
case mt_UseCase:
m_pInsert->insertItem(m_pixmap[pm_Usecase], i18n("Use Case"), mt_UseCase);
break;
case mt_UseCase_Diagram:
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_UseCase), i18n("Use Case Diagram..."),
mt_UseCase_Diagram);
break;
case mt_FloatText:
m_pInsert->insertItem(m_pixmap[pm_Text], i18n("Text Line..." ), mt_FloatText);
break;
case mt_Reset_Label_Positions:
insertItem(i18n("Reset Label Positions"), mt_Reset_Label_Positions);
break;
case mt_New_Parameter:
insertItem(SmallIcon("source"), i18n("New Parameter..."), mt_New_Parameter);
break;
case mt_New_Operation:
insertItem(SmallIcon("CVpublic_meth"),i18n("New Operation..."), mt_New_Operation);
break;
case mt_New_Attribute:
insertItem(SmallIcon("CVpublic_var"), i18n("New Attribute..."), mt_New_Attribute);
break;
case mt_New_Template:
insertItem(SmallIcon("source"), i18n("New Template..."), mt_New_Template);
break;
case mt_New_EnumLiteral:
insertItem(SmallIcon("source"), i18n("New Literal..."), mt_New_EnumLiteral);
break;
case mt_New_EntityAttribute:
insertItem(SmallIcon("source"), i18n("New Entity Attribute..."), mt_New_EntityAttribute);
break;
case mt_New_Activity:
m_pInsert->insertItem(SmallIcon("source"), i18n("Activity..."), mt_New_Activity);
break;
case mt_Export_Image:
insertItem(SmallIcon("image"), i18n("Export as Picture..."), mt_Export_Image);
break;
default:
kWarning() << "ListPopupMenu::insertStdItem called on unimplemented Menu_Type " << m << endl;
break;
}
}
void ListPopupMenu::insertStdItems(bool insertLeadingSeparator /* = true */,
Uml::Widget_Type type /* = wt_UMLWidget */)
{
if (insertLeadingSeparator)
insertSeparator();
insertStdItem(mt_Cut);
insertStdItem(mt_Copy);
insertStdItem(mt_Paste);
insertSeparator();
if (type == Uml::wt_UMLWidget)
insertStdItem(mt_Rename);
else if (Model_Utils::isCloneable(type))
insertStdItem(mt_Clone);
insertStdItem(mt_Delete);
}
void ListPopupMenu::insertContainerItems(bool folderAndDiagrams) {
if (folderAndDiagrams)
m_pInsert -> insertItem(BarIcon("folder_new"), i18n("Folder"), mt_Logical_Folder);
m_pInsert -> insertItem(m_pixmap[pm_Class], i18n("Class"), mt_Class);
m_pInsert -> insertItem(m_pixmap[pm_Interface], i18n("Interface"), mt_Interface);
m_pInsert -> insertItem(m_pixmap[pm_Datatype], i18n("Datatype"), mt_Datatype);
m_pInsert -> insertItem(m_pixmap[pm_Enum], i18n("Enum"), mt_Enum);
insertStdItem(mt_Package);
if (folderAndDiagrams) {
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_Class), i18n("Class Diagram..."), mt_Class_Diagram);
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_State), i18n("State Diagram..."), mt_State_Diagram);
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_Activity), i18n("Activity Diagram..."), mt_Activity_Diagram);
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_Sequence), i18n("Sequence Diagram..."), mt_Sequence_Diagram);
m_pInsert->insertItem(Widget_Utils::iconSet(Uml::dt_Collaboration), i18n("Collaboration Diagram..."), mt_Collaboration_Diagram);
}
insertFileNew();
}
void ListPopupMenu::insertAssocItem(const TQString &label, Menu_Type mt) {
insertItem(label, mt);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Reset_Label_Positions);
insertStdItem(mt_Properties);
}
void ListPopupMenu::insertSubmodelAction() {
const Settings::OptionState& ostat = Settings::getOptionState();
if (ostat.generalState.tabdiagrams) {
// Umbrello currently does not support External Folders
// in combination with Tabbed Diagrams.
// If you need external folders then disable the tabbed diagrams
// in the General Settings.
return;
}
UMLListView *listView = UMLApp::app()->getListView();
UMLListViewItem *current = static_cast<UMLListViewItem*>(listView->currentItem());
UMLObject *o = current->getUMLObject();
if (o == NULL) {
kError() << "ListPopupMenu::insertSubmodelAction: "
<< current->getText() << " getUMLObject() returns NULL" << endl;
return;
}
UMLFolder *f = dynamic_cast<UMLFolder*>(o);
if (f == NULL) {
kError() << "ListPopupMenu::insertSubmodelAction: "
<< "current->getUMLObject (" << o->getName() << ") is not a Folder" << endl;
return;
}
TQString submodelFile = f->getFolderFile();
if (submodelFile.isEmpty())
insertStdItem(mt_Externalize_Folder);
else
insertStdItem(mt_Internalize_Folder);
}
void ListPopupMenu::makeMultiClassifierPopup(ClassifierWidget *c)
{
Uml::Widget_Type type = c->getBaseType();
ClassifierWidget *cls = NULL;
m_pShow = new TDEPopupMenu(this);
m_pShow->setCheckable(true);
if (type == Uml::wt_Class) {
cls = static_cast<ClassifierWidget*>(c);
m_pShow->insertItem( i18n("Attributes"), mt_Show_Attributes_Selection);
m_pShow->setItemChecked(mt_Show_Attributes_Selection,
cls->getShowAtts());
}
m_pShow->insertItem(i18n("Operations"), mt_Show_Operations_Selection);
m_pShow->setItemChecked(mt_Show_Operations_Selection, c->getShowOps());
m_pShow->insertItem(i18n("Public Only"), mt_Show_Public_Only_Selection);
m_pShow->setItemChecked(mt_Show_Public_Only_Selection, c->getShowPublicOnly());
m_pShow->insertItem(i18n("Visibility"), mt_Visibility_Selection);
m_pShow->setItemChecked(mt_Visibility_Selection, c->getShowVisibility());
m_pShow->insertItem(i18n("Operation Signature"),
mt_Show_Operation_Signature_Selection);
bool sig = (c->getShowOpSigs() == Uml::st_SigNoVis ||
c->getShowOpSigs() == Uml::st_ShowSig);
m_pShow->setItemChecked(mt_Show_Operation_Signature_Selection, sig);
if (type == Uml::wt_Class) {
m_pShow->insertItem(i18n("Attribute Signature"),
mt_Show_Attribute_Signature_Selection);
sig = (cls->getShowAttSigs() == Uml::st_SigNoVis ||
cls->getShowAttSigs() == Uml::st_ShowSig);
m_pShow->setItemChecked(mt_Show_Attribute_Signature_Selection, sig);
}
m_pShow->insertItem(i18n("Package"), mt_Show_Packages_Selection);
m_pShow->setItemChecked(mt_Show_Packages_Selection, c->getShowPackage());
if (type == Uml::wt_Class) {
m_pShow->insertItem(i18n("Stereotype"), mt_Show_Stereotypes_Selection);
m_pShow->setItemChecked(mt_Show_Stereotypes_Selection,
cls->getShowStereotype());
}
insertItem(i18n("Show"), m_pShow);
}
void ListPopupMenu::makeClassifierPopup(ClassifierWidget *c)
{
Uml::Widget_Type type = c->getBaseType();
m_pInsert = new TDEPopupMenu(this);
if (type == Uml::wt_Class)
m_pInsert->insertItem(SmallIcon( "CVpublic_var" ), i18n("Attribute..."), mt_Attribute);
m_pInsert->insertItem( SmallIcon( "CVpublic_meth"), i18n("Operation..."), mt_Operation);
insertFileNew();
makeMultiClassifierPopup(c);
setupColor(c->getUseFillColour());
insertStdItems(true, type);
insertStdItem(mt_Rename);
insertStdItem(mt_Change_Font);
if (type == Uml::wt_Interface) {
insertItem(i18n("Draw as Circle"), mt_DrawAsCircle);
setItemChecked( mt_DrawAsCircle, c->getDrawAsCircle() );
insertItem(i18n("Change into Class"), mt_ChangeToClass);
} else {
insertItem(i18n("Refactor"), mt_Refactoring);
insertItem(i18n("View Code"), mt_ViewCode);
UMLClassifier *umlc = c->getClassifier();
if (umlc->getAbstract() && umlc->attributes() == 0)
insertItem(i18n("Change into Interface"), mt_ChangeToInterface);
}
insertStdItem(mt_Properties);
}
void ListPopupMenu::setupColor(bool fc)
{
m_pColor = new TDEPopupMenu(this);
m_pColor -> insertItem(SmallIcon( "color_line"), i18n("Line Color..."), mt_Line_Color);
m_pColor -> insertItem(SmallIcon( "color_fill"), i18n("Fill Color..."), mt_Fill_Color);
m_pColor -> insertItem( i18n("Use Fill Color"), mt_Use_Fill_Color);
m_pColor -> setItemChecked(mt_Use_Fill_Color, fc);
insertItem(SmallIcon( "colorize"), i18n("Color"), m_pColor);
}
void ListPopupMenu::setupColorSelection(bool fc)
{
m_pColor = new TDEPopupMenu(this);
m_pColor -> insertItem(SmallIcon( "color_line"), i18n("Line Color..."), mt_Line_Color_Selection);
m_pColor -> insertItem(SmallIcon( "color_fill"), i18n("Fill Color..."), mt_Fill_Color_Selection);
m_pColor -> insertItem( i18n("Use Fill Color"), mt_Use_Fill_Color);
m_pColor -> setItemChecked(mt_Use_Fill_Color, fc);
insertItem(SmallIcon( "colorize"), i18n("Color"), m_pColor);
}
Uml::Diagram_Type ListPopupMenu::convert_MT_DT(Menu_Type mt) {
Uml::Diagram_Type type = Uml::dt_Undefined;
switch(mt) {
case mt_UseCase_Diagram:
type = Uml::dt_UseCase;
break;
case mt_Class_Diagram:
type = Uml::dt_Class;
break;
case mt_Sequence_Diagram:
type = Uml::dt_Sequence;
break;
case mt_Collaboration_Diagram:
type = Uml::dt_Collaboration;
break;
case mt_State_Diagram:
type = Uml::dt_State;
break;
case mt_Activity_Diagram:
type = Uml::dt_Activity;
break;
case mt_Component_Diagram:
type = Uml::dt_Component;
break;
case mt_Deployment_Diagram:
type = Uml::dt_Deployment;
break;
case mt_EntityRelationship_Diagram:
type = Uml::dt_EntityRelationship;
break;
default:
break;
}
return type;
}
Uml::Object_Type ListPopupMenu::convert_MT_OT(Menu_Type mt) {
Uml::Object_Type type = Uml::ot_UMLObject;
switch(mt) {
case mt_UseCase:
type = Uml::ot_UseCase;
break;
case mt_Actor:
type = Uml::ot_Actor;
break;
case mt_Class:
type = Uml::ot_Class;
break;
case mt_Attribute:
type = Uml::ot_Attribute;
break;
case mt_EnumLiteral:
type = Uml::ot_EnumLiteral;
break;
case mt_EntityAttribute:
type = Uml::ot_EntityAttribute;
break;
case mt_Operation:
type = Uml::ot_Operation;
break;
default:
break;
}
return type;
}
void ListPopupMenu::setupMenu(Menu_Type type, UMLView* view) {
//make the right menu for the type
//make menu for logical view
m_pInsert = 0;
m_pShow = 0;
m_pColor = 0;
TDEStandardDirs* dirs = TDEGlobal::dirs();
TQString dataDir = dirs->findResourceDir("data", "umbrello/pics/object.png");
dataDir += "/umbrello/pics/";
m_pixmap[pm_Class] .load(dataDir+"class.png", "PNG");
m_pixmap[pm_Package] .load(dataDir+"package.png", "PNG");
m_pixmap[pm_Interface] .load(dataDir+"interface.png", "PNG");
m_pixmap[pm_Datatype] .load(dataDir+"datatype.png", "PNG");
m_pixmap[pm_Enum] .load(dataDir+"enum.png", "PNG");
m_pixmap[pm_Actor] .load(dataDir+"actor.png", "PNG");
m_pixmap[pm_Usecase] .load(dataDir+"usecase.png", "PNG");
m_pixmap[pm_InitialState].load(dataDir+"initial_state.png", "PNG");
m_pixmap[pm_EndState] .load(dataDir+"end_state.png", "PNG");
m_pixmap[pm_Branch] .load(dataDir+"branch.png", "PNG");
m_pixmap[pm_Object] .load(dataDir+"object.png", "PNG");
m_pixmap[pm_Component] .load(dataDir+"component.png", "PNG");
m_pixmap[pm_Node] .load(dataDir+"node.png", "PNG");
m_pixmap[pm_Entity] .load(dataDir+"entity.png", "PNG");
m_pixmap[pm_Artifact] .load(dataDir+"artifact.png", "PNG");
m_pixmap[pm_Text] .load(dataDir+"text.png", "PNG");
m_pixmap[pm_Subsystem] .load(dataDir+"subsystem.png", "PNG");
switch(type) {
case mt_Logical_View:
m_pInsert = new TDEPopupMenu(this);
insertContainerItems(true);
insertSeparator();
insertStdItem(mt_Paste);
insertSeparator();
insertStdItem(mt_Import_Classes);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Component_View:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_Component_Folder);
insertStdItem(mt_Subsystem);
insertStdItem(mt_Component);
insertStdItem(mt_Artifact);
insertStdItem(mt_Component_Diagram);
insertFileNew();
insertSeparator();
insertStdItem(mt_Paste);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Deployment_View:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_Deployment_Folder);
insertStdItem(mt_Node);
insertStdItem(mt_Deployment_Diagram);
insertFileNew();
insertSeparator();
insertStdItem(mt_Paste);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_EntityRelationship_Model:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_EntityRelationship_Folder);
insertStdItem(mt_Entity);
insertStdItem(mt_EntityRelationship_Diagram);
insertFileNew();
insertSeparator();
insertStdItem(mt_Paste);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_UseCase_View:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_UseCase_Folder);
insertStdItem(mt_Actor);
insertStdItem(mt_UseCase);
insertStdItem(mt_UseCase_Diagram);
insertFileNew();
insertSeparator();
// insertStdItem(mt_Cut);
// insertStdItem(mt_Copy);
insertStdItem(mt_Paste);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Logical_Folder:
m_pInsert = new TDEPopupMenu(this);
insertContainerItems(true);
insertStdItems();
insertStdItem(mt_Import_Classes);
insertSubmodelAction();
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Component_Folder:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_Component_Folder);
insertStdItem(mt_Subsystem);
insertStdItem(mt_Component);
insertStdItem(mt_Artifact);
insertStdItem(mt_Component_Diagram);
insertFileNew();
insertStdItems();
insertSubmodelAction();
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Deployment_Folder:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_Deployment_Folder);
insertStdItem(mt_Node);
insertStdItem(mt_Deployment_Diagram);
insertFileNew();
insertStdItems();
insertSubmodelAction();
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_UseCase_Folder:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_UseCase_Folder);
insertStdItem(mt_Actor);
insertStdItem(mt_UseCase);
insertStdItem(mt_UseCase_Diagram);
insertFileNew();
insertStdItems();
insertSubmodelAction();
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_EntityRelationship_Folder:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_EntityRelationship_Folder);
insertStdItem(mt_Entity);
insertStdItem(mt_EntityRelationship_Diagram);
insertFileNew();
insertStdItems();
insertSubmodelAction();
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_UseCase_Diagram:
case mt_Sequence_Diagram:
case mt_Class_Diagram:
case mt_Collaboration_Diagram:
case mt_State_Diagram:
case mt_Activity_Diagram:
case mt_Component_Diagram:
case mt_Deployment_Diagram:
case mt_EntityRelationship_Diagram:
//don't insert standard items because cut/copy not currently
// possible with tabbed diagrams (it didn't work anyway)
//insertStdItems(false);
insertStdItem(mt_Rename);
insertStdItem(mt_Delete);
insertStdItem(mt_Export_Image);
insertStdItem(mt_Properties);
break;
//FIXME a lot of these insertItem()s could be insertStandardItem()s
case mt_On_UseCase_Diagram:
m_pInsert = new TDEPopupMenu( this );
m_pInsert -> insertItem(m_pixmap[pm_Actor], i18n( "Actor..." ), mt_Actor );
m_pInsert -> insertItem(m_pixmap[pm_Usecase], i18n( "Use Case..."), mt_UseCase );
insertStdItem(mt_FloatText );
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_Class_Diagram:
m_pInsert = new TDEPopupMenu( this );
m_pInsert -> insertItem(m_pixmap[pm_Class], i18n("Class..."), mt_Class);
m_pInsert->insertItem(m_pixmap[pm_Interface], i18n("Interface..."), mt_Interface);
m_pInsert->insertItem(m_pixmap[pm_Datatype], i18n("Datatype..."), mt_Datatype);
m_pInsert->insertItem(m_pixmap[pm_Enum], i18n("Enum..."), mt_Enum);
m_pInsert -> insertItem(m_pixmap[pm_Package], i18n("Package..."), mt_Package);
insertStdItem(mt_FloatText);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_State_Diagram:
m_pInsert = new TDEPopupMenu( this );
m_pInsert -> insertItem(m_pixmap[pm_InitialState], i18n("Initial State"), mt_Initial_State );
m_pInsert -> insertItem(m_pixmap[pm_EndState], i18n("End State"), mt_End_State );
m_pInsert -> insertItem(m_pixmap[pm_Usecase], i18n("State..."), mt_State );
insertStdItem(mt_FloatText);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_Activity_Diagram:
m_pInsert = new TDEPopupMenu( this );
m_pInsert -> insertItem(m_pixmap[pm_InitialState], i18n("Initial Activity"), mt_Initial_Activity );
m_pInsert -> insertItem(m_pixmap[pm_EndState], i18n("End Activity"), mt_End_Activity );
m_pInsert -> insertItem(m_pixmap[pm_Usecase], i18n("Activity..."), mt_Activity );
m_pInsert -> insertItem(m_pixmap[pm_Branch], i18n("Branch/Merge"), mt_Branch );
insertStdItem(mt_FloatText);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_Component_Diagram:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(m_pixmap[pm_Subsystem], i18n("Subsystem..."), mt_Subsystem);
m_pInsert->insertItem(m_pixmap[pm_Component], i18n("Component..."), mt_Component);
m_pInsert->insertItem(m_pixmap[pm_Artifact], i18n("Artifact..."), mt_Artifact);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_Deployment_Diagram:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(m_pixmap[pm_Node], i18n("Node..."), mt_Node);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_EntityRelationship_Diagram:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(m_pixmap[pm_Entity], i18n("Entity..."), mt_Entity);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_On_Sequence_Diagram:
case mt_On_Collaboration_Diagram:
m_pInsert = new TDEPopupMenu( this );
m_pInsert -> insertItem(m_pixmap[pm_Object], i18n("Object..."), mt_Object);
insertStdItem(mt_FloatText);
insertFileNew();
insertSeparator();
setupDiagramMenu(view);
break;
case mt_Class:
m_pInsert = new TDEPopupMenu(this);
m_pInsert -> insertItem(SmallIcon( "CVpublic_var"), i18n("Attribute"), mt_Attribute);
m_pInsert -> insertItem(SmallIcon( "CVpublic_meth"), i18n("Operation"), mt_Operation);
m_pInsert -> insertItem(SmallIcon("source"), i18n("Template"), mt_Template);
insertFileNew();
insertStdItems();
insertStdItem(mt_Properties);
break;
case mt_Interface:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(SmallIcon("CVpublic_meth"), i18n("Operation"), mt_Operation);
m_pInsert -> insertItem(SmallIcon("source"), i18n("Template"), mt_Template);
insertFileNew();
insertStdItems();
insertStdItem(mt_Properties);
break;
case mt_Package:
m_pInsert = new TDEPopupMenu(this);
insertContainerItems(false);
insertStdItems();
insertStdItem(mt_Properties);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Subsystem:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_Subsystem);
insertStdItem(mt_Component);
insertStdItem(mt_Artifact);
insertFileNew();
insertStdItems();
insertStdItem(mt_Properties);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Component:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_Component);
insertStdItem(mt_Artifact);
insertFileNew();
insertStdItems();
insertStdItem(mt_Properties);
insertSeparator();
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
case mt_Entity:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(SmallIcon("source"), i18n("Entity Attribute..."), mt_EntityAttribute);
insertFileNew();
insertStdItems();
insertStdItem(mt_Properties);
break;
case mt_EnumLiteral:
insertStdItems(false);
break;
case mt_Enum:
m_pInsert = new TDEPopupMenu(this);
m_pInsert->insertItem(SmallIcon("source"), i18n("Enum Literal..."), mt_EnumLiteral);
insertFileNew();
insertStdItems();
insertStdItem(mt_Properties);
break;
case mt_Datatype:
case mt_Node:
case mt_Artifact:
case mt_Actor:
case mt_UseCase:
case mt_Attribute:
case mt_EntityAttribute:
case mt_Operation:
case mt_Template:
insertStdItems(false);
insertStdItem(mt_Properties);
break;
case mt_New_Parameter:
insertStdItem(mt_New_Parameter);
break;
case mt_New_Operation:
insertStdItem(mt_New_Operation);
break;
case mt_New_Attribute:
insertStdItem(mt_New_Attribute);
break;
case mt_New_Template:
insertStdItem(mt_New_Template);
break;
case mt_New_EnumLiteral:
insertStdItem(mt_New_EnumLiteral);
break;
case mt_New_EntityAttribute:
insertStdItem(mt_New_EntityAttribute);
break;
case mt_New_Activity:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_New_Activity);
insertFileNew();
break;
case mt_Activity_Selected:
m_pInsert = new TDEPopupMenu(this);
insertStdItem(mt_New_Activity);
insertFileNew();
insertStdItem(mt_Rename);
insertStdItem(mt_Delete);
break;
case mt_Parameter_Selected:
insertStdItem(mt_New_Parameter);
insertStdItem(mt_Rename);
insertStdItem(mt_Delete);
insertStdItem(mt_Properties);
break;
case mt_Operation_Selected:
insertStdItem(mt_New_Operation);
insertStdItem(mt_Delete);
insertStdItem(mt_Properties);
break;
case mt_Attribute_Selected:
insertStdItem(mt_New_Attribute);
insertStdItem(mt_Delete);
insertStdItem(mt_Properties);
break;
case mt_Template_Selected:
insertItem(SmallIcon("source"),i18n("New Template..."), mt_New_Attribute);
insertStdItem(mt_Delete);
insertStdItem(mt_Properties);
break;
case mt_EnumLiteral_Selected:
insertStdItem(mt_New_EnumLiteral);
insertStdItem(mt_Delete);
insertStdItem(mt_Properties);
break;
case mt_EntityAttribute_Selected:
insertStdItem(mt_New_EntityAttribute);
insertStdItem(mt_Delete);
insertStdItem(mt_Properties);
break;
case mt_Association_Selected:
insertStdItem(mt_Delete);
insertStdItem(mt_Line_Color);
insertStdItem(mt_Properties);
break;
case mt_Anchor:
insertItem(SmallIcon( "editdelete"),i18n("Delete Anchor"), mt_Delete);
break;
case mt_RoleNameA:
insertAssocItem(i18n("Change Role A Name..."), mt_Rename_RoleAName);
break;
case mt_RoleNameB:
insertAssocItem(i18n("Change Role B Name..."), mt_Rename_RoleBName);
break;
case mt_MultiB:
insertAssocItem(i18n("Change Multiplicity..."), mt_Rename_MultiB);
break;
case mt_MultiA:
insertAssocItem(i18n("Change Multiplicity..."), mt_Rename_MultiA);
break;
case mt_Name:
insertAssocItem(i18n("Change Name"), mt_Rename_Name);
break;
case mt_FullAssociation:
insertStdItem(mt_Delete);
insertItem(i18n("Change Association Name..."), mt_Rename_Name);
insertItem(i18n("Change Role A Name..."), mt_Rename_RoleAName);
insertItem(i18n("Change Role B Name..."), mt_Rename_RoleBName);
insertStdItem(mt_Change_Font);
insertStdItem(mt_Reset_Label_Positions);
insertStdItem(mt_Line_Color);
insertStdItem(mt_Properties);
break;
case mt_AttributeAssociation:
insertStdItem(mt_Delete); // @todo add more items
break;
case mt_Collaboration_Message:
// insertStdItem(mt_Cut);
// insertStdItem(mt_Copy);
// insertStdItem(mt_Paste);
// insertSeparator();
insertStdItem(mt_Delete);
insertStdItem(mt_Change_Font);
insertStdItem(mt_New_Operation);
insertItem(i18n("Select Operation..."), mt_Select_Operation);
break;
case mt_Model:
insertItem(i18n("Rename..."), mt_Model);
break;
default:
insertStdItem(mt_Expand_All);
insertStdItem(mt_Collapse_All);
break;
}//end switch
if( view ) {
bool bCutState = UMLApp::app() -> getCutCopyState();
setItemEnabled( mt_Undo, UMLApp::app()->getUndoEnabled() );
setItemEnabled( mt_Redo, UMLApp::app()->getRedoEnabled() );
setItemEnabled( mt_Cut, bCutState );
setItemEnabled( mt_Copy, bCutState );
setItemEnabled( mt_Paste, UMLApp::app() -> getPasteState() );
}
if(m_pInsert)
connect(m_pInsert, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
if(m_pShow)
connect(m_pShow, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
if(m_pColor)
connect(m_pColor, TQT_SIGNAL(activated(int)), this, TQT_SIGNAL(activated(int)));
}
void ListPopupMenu::setupDiagramMenu(UMLView* view) {
insertItem(SmallIcon("undo"), i18n("Undo"), mt_Undo);
insertItem(SmallIcon("redo"), i18n("Redo"), mt_Redo);
insertSeparator();
insertStdItem(mt_Cut);
insertStdItem(mt_Copy);
insertStdItem(mt_Paste);
insertSeparator();
insertItem(SmallIcon("editclear"), i18n("Clear Diagram"), mt_Clear);
insertStdItem(mt_Export_Image);
insertSeparator();
insertItem(i18n("Snap to Grid"), mt_SnapToGrid);
setItemChecked(mt_SnapToGrid, view->getSnapToGrid() );
insertItem(i18n("Show Grid"), mt_ShowSnapGrid );
setItemChecked(mt_ShowSnapGrid, view->getShowSnapGrid() );
insertStdItem(mt_Properties);
}