Exemplo n.º 1
0
ddDataType ddTextTableItemFigure::getDataType()
{
	if(!getOwnerColumn()->isGeneratedForeignKey())
		return columnType;
	else
	{
		columnType = getOwnerColumn()->getFkSource()->original->getDataType();
		return columnType;
	}
}
Exemplo n.º 2
0
void ddColumnOptionIcon::createMenu(wxMenu &mnu)
{
	wxMenuItem *item;

	item = mnu.AppendCheckItem(MNU_COLNULL, _("NULL"));
	item->Check(colOption == null);
	item->Enable(!getOwnerColumn()->isGeneratedForeignKey());
	item = mnu.AppendCheckItem(MNU_COLNOTNULL, _("Not NULL"));
	item->Check(colOption == notnull);
	item->Enable(!getOwnerColumn()->isGeneratedForeignKey());
}
Exemplo n.º 3
0
int ddTextTableItemFigure::getScale()
{
	if(getOwnerColumn()->isGeneratedForeignKey())
	{
		scale = getOwnerColumn()->getFkSource()->original->getScale();
		return scale;
	}
	else
	{
		return scale;
	}
}
Exemplo n.º 4
0
int ddTextTableItemFigure::getPrecision()
{
	if(getOwnerColumn()->isGeneratedForeignKey())
	{
		precision = getOwnerColumn()->getFkSource()->original->getPrecision();
		return precision;
	}
	else
	{
		return precision;
	}
}
Exemplo n.º 5
0
void ddTextTableItemFigure::setScale(int value)
{
	if(!getOwnerColumn()->isGeneratedForeignKey())
	{
		scale = value;
		ownerColumn->getOwnerTable()->updateSizeOfObservers();
	}
}
Exemplo n.º 6
0
void ddTextTableItemFigure::createMenu(wxMenu &mnu)
{
	wxMenu *submenu;
	wxMenuItem *item;

	mnu.Append(MNU_DDADDCOLUMN, _("Add a column..."));
	item = mnu.Append(MNU_DELCOLUMN, _("Delete the selected column..."));
	if(getOwnerColumn()->isGeneratedForeignKey())
		item->Enable(false);
	mnu.Append(MNU_RENAMECOLUMN, _("Rename the selected column..."));
	if(getOwnerColumn()->isGeneratedForeignKey() && !getOwnerColumn()->isFkNameGenerated())
		mnu.Append(MNU_AUTONAMCOLUMN, _("Activate fk auto-naming..."));
	mnu.AppendSeparator();
	item = mnu.AppendCheckItem(MNU_NOTNULL, _("Not NULL constraint"));
	if(getOwnerColumn()->isNotNull())
		item->Check(true);
	if(getOwnerColumn()->isGeneratedForeignKey())
		item->Enable(false);
	mnu.AppendSeparator();
	item = mnu.AppendCheckItem(MNU_PKEY, _("Primary Key"));
	if(getOwnerColumn()->isPrimaryKey())
		item->Check(true);
	if(getOwnerColumn()->isGeneratedForeignKey())
		item->Enable(false);
	item = mnu.AppendCheckItem(MNU_UKEY, _("Unique Key"));
	if(getOwnerColumn()->isUniqueKey())
		item->Check(true);
	mnu.AppendSeparator();
	submenu = new wxMenu();
	item = mnu.AppendSubMenu(submenu, _("Column datatype"));
	if(getOwnerColumn()->isGeneratedForeignKey())
		item->Enable(false);
	item = submenu->AppendCheckItem(MNU_TYPESERIAL, _("serial"));
	item->Check(columnType == dt_bigint);
	item = submenu->AppendCheckItem(MNU_TYPEBOOLEAN, _("boolean"));
	item->Check(columnType == dt_boolean);
	item = submenu->AppendCheckItem(MNU_TYPEINTEGER, _("integer"));
	item->Check(columnType == dt_integer);
	item = submenu->AppendCheckItem(MNU_TYPEMONEY, _("money"));
	item->Check(columnType == dt_money);
	item = submenu->AppendCheckItem(MNU_TYPEVARCHAR, _("varchar(n)"));
	item->Check(columnType == dt_varchar);
	item = submenu->Append(MNU_TYPEOTHER, _("Choose another datatype..."));
	mnu.AppendSeparator();
	mnu.Append(MNU_TYPEPKEY_CONSTRAINTNAME, _("Primary Key Constraint name..."));
	mnu.Append(MNU_TYPEUKEY_CONSTRAINTNAME, _("Unique Key Constraint name..."));
	mnu.AppendSeparator();
	mnu.Append(MNU_DELTABLE, _("Delete table..."));
};
Exemplo n.º 7
0
hdITool *ddTextTableItemFigure::CreateFigureTool(hdDrawingView *view, hdITool *defaultTool)
{
	if(getOwnerColumn())
	{
		return textEditable ? new ddColumnTextTool(view, this, defaultTool, false, wxT("New Column Name"), wxT("Rename Column")) : defaultTool;
	}
	else
	{
		setOneTimeNoAlias();
		return textEditable ? new ddColumnTextTool(view, this, defaultTool, false, wxT("New Table Name"), wxT("Rename Table")) : defaultTool;
	}
}
Exemplo n.º 8
0
void ddColumnOptionIcon::changeIcon(ddColumnOptionType type)
{
	colOption = type;
	switch(type)
	{
		case MNU_COLNULL:
			icon = wxBitmap(*ddnull_png_img);
			if(getOwnerColumn()->isPrimaryKey())
			{
				if(getOwnerColumn()->isForeignKey() || getOwnerColumn()->isUniqueKey())
				{
					getOwnerColumn()->toggleColumnKind(pk); //remove pk attribute because column now is null
					getOwnerColumn()->setRightIconForColumn();
				}
				else
				{
					getOwnerColumn()->disablePrimaryKey();
				}
			}
			break;
		case MNU_COLNOTNULL:
			icon = wxBitmap(*ddnotnull_png_img);
			break;
	}
	getBasicDisplayBox().SetSize(wxSize(getWidth(), getHeight()));
}
Exemplo n.º 9
0
wxString &ddTextTableItemFigure::getText(bool extended)
{
	if(showDataType && extended && getOwnerColumn())
	{
		wxString ddType = dataTypes()[getDataType()];   //Should use getDataType() & getPrecision(), because when column is fk, type is not taken from this column, instead from original column (source of fk)
		bool havePrecision = columnType == dt_numeric || dt_bit || columnType == dt_char || columnType == dt_interval || columnType == dt_varbit || columnType == dt_varchar;
		if( havePrecision && getPrecision() >= 0)
		{
			ddType.Truncate(ddType.Find(wxT("(")));
			if(getScale() == -1)
				ddType += wxString::Format(wxT("(%d)"), getPrecision());
			else
				ddType += wxString::Format(wxT("(%d,%d)"), getPrecision(), getScale());
		}
		//Fix to serial is integer at automatically generated foreign key
		if(getDataType() == dt_serial && getOwnerColumn()->isGeneratedForeignKey())
			ddType = dataTypes()[dt_integer];

		out = wxString( hdSimpleTextFigure::getText() + wxString(wxT(" : ")) + ddType );
		return  out;
	}
	else if( showAlias && getOwnerColumn() == NULL )
	{
		if(!oneTimeNoAlias)
			out = wxString( hdSimpleTextFigure::getText() + wxString(wxT(" ( ")) + colAlias + wxString(wxT(" ) ")) );
		else
		{
			out = wxString( hdSimpleTextFigure::getText() );
			oneTimeNoAlias = false;
		}
		return out;
	}
	else
	{
		return hdSimpleTextFigure::getText();
	}
}
Exemplo n.º 10
0
wxString ddTextTableItemFigure::getType(bool raw)
{
	wxString ddType = dataTypes()[columnType];
	if(raw)
		return ddType;

	bool havePrecision = columnType == dt_numeric || dt_bit || columnType == dt_char || columnType == dt_interval || columnType == dt_varbit || columnType == dt_varchar;
	if( havePrecision && getPrecision() >= 0)
	{
		ddType.Truncate(ddType.Find(wxT("(")));
		if(getScale() == -1)
			ddType += wxString::Format(wxT("(%d)"), getPrecision());
		else
			ddType += wxString::Format(wxT("(%d,%d)"), getPrecision(), getScale());
	}

	//Fix to serial is integer at automatically generated foreign key
	if(columnType == dt_serial && getOwnerColumn()->isGeneratedForeignKey())
		ddType = dataTypes()[dt_integer];

	return ddType;
}
Exemplo n.º 11
0
//WARNING: event ID must match enum ddDataType!!! this event was created on view
void ddTextTableItemFigure::OnGenericPopupClick(wxCommandEvent &event, hdDrawingView *view)
{
	wxTextEntryDialog *nameDialog = NULL;
	ddPrecisionScaleDialog *numericDialog = NULL;
	wxString tmpString;
	int answer;
	int tmpprecision;
	long tmpvalue;
	hdRemoveDeleteDialog *delremDialog = NULL;

	switch(event.GetId())
	{
		case MNU_DDADDCOLUMN:
			nameDialog = new wxTextEntryDialog(view, wxT("New column name"), wxT("Add a column"));
			answer = nameDialog->ShowModal();
			if (answer == wxID_OK)
			{
				tmpString = nameDialog->GetValue();
				getOwnerColumn()->getOwnerTable()->addColumn(view->getIdx(), new ddColumnFigure(tmpString, getOwnerColumn()->getOwnerTable()));
				view->notifyChanged();
			}
			delete nameDialog;
			break;
		case MNU_DELCOLUMN:
			answer = wxMessageBox(wxT("Are you sure you wish to delete column ") + getText(true) + wxT("?"), wxT("Delete column?"), wxYES_NO | wxNO_DEFAULT, view);
			if (answer == wxYES)
			{
				getOwnerColumn()->getOwnerTable()->removeColumn(view->getIdx(), getOwnerColumn());
				view->notifyChanged();
			}
			break;
		case MNU_AUTONAMCOLUMN:
			getOwnerColumn()->activateGenFkName();
			getOwnerColumn()->getFkSource()->syncAutoFkName();
			view->notifyChanged();
			break;
		case MNU_RENAMECOLUMN:
			nameDialog = new wxTextEntryDialog(view, wxT("New column name"), wxT("Rename Column"), getText());
			nameDialog->ShowModal();
			if(getOwnerColumn()->isGeneratedForeignKey()) //after a manual user column rename, deactivated automatic generation of fk name.
				getOwnerColumn()->deactivateGenFkName();
			setText(nameDialog->GetValue());
			delete nameDialog;
			view->notifyChanged();
			break;
		case MNU_NOTNULL:
			if(getOwnerColumn()->isNotNull())
				getOwnerColumn()->setColumnOption(null);
			else
				getOwnerColumn()->setColumnOption(notnull);
			view->notifyChanged();
			break;
		case MNU_PKEY:
			if(getOwnerColumn()->isPrimaryKey())
			{
				getOwnerColumn()->disablePrimaryKey();
			}
			else
			{
				getOwnerColumn()->enablePrimaryKey();
				getOwnerColumn()->setColumnOption(notnull);
			}
			view->notifyChanged();
			break;
		case MNU_UKEY:
			getOwnerColumn()->toggleColumnKind(uk, view);
			view->notifyChanged();
			break;
		case MNU_TYPESERIAL:
			setDataType(dt_serial);  //Should use setDataType always to set this value to allow fk to work flawlessly
			recalculateDisplayBox();
			getOwnerColumn()->displayBoxUpdate();
			getOwnerColumn()->getOwnerTable()->updateTableSize();
			view->notifyChanged();
			break;
		case MNU_TYPEBOOLEAN:
			setDataType(dt_boolean);
			recalculateDisplayBox();
			getOwnerColumn()->displayBoxUpdate();
			getOwnerColumn()->getOwnerTable()->updateTableSize();
			view->notifyChanged();
			break;
		case MNU_TYPEINTEGER:
			setDataType(dt_integer);
			recalculateDisplayBox();
			getOwnerColumn()->displayBoxUpdate();
			getOwnerColumn()->getOwnerTable()->updateTableSize();
			view->notifyChanged();
			break;
		case MNU_TYPEMONEY:
			setDataType(dt_money);
			recalculateDisplayBox();
			getOwnerColumn()->displayBoxUpdate();
			getOwnerColumn()->getOwnerTable()->updateTableSize();
			view->notifyChanged();
			break;
		case MNU_TYPEVARCHAR:
			setDataType(dt_varchar);
			tmpprecision = wxGetNumberFromUser(_("Varchar size"),
			                                   _("Size for varchar datatype"),
			                                   _("Varchar size"),
			                                   getPrecision(), 0, 255, view);
			if (tmpprecision >= 0)
			{
				setPrecision(tmpprecision);
				setScale(-1);
			}
			recalculateDisplayBox();
			getOwnerColumn()->displayBoxUpdate();
			getOwnerColumn()->getOwnerTable()->updateTableSize();
			view->notifyChanged();
			break;
		case MNU_TYPEOTHER:
			answer = wxGetSingleChoiceIndex(wxT("New column datatype"), wxT("Column Datatypes"), dataTypes(), view);
			if(answer >= 0)
			{
				view->notifyChanged();
				if(answer == dt_varchar || answer == dt_bit || answer == dt_char || answer == dt_interval || answer == dt_varbit)
				{
					tmpprecision = wxGetNumberFromUser(_("datatype size"),
					                                   _("Size for datatype"),
					                                   _("size"),
					                                   getPrecision(), 0, 255, view);
					if (tmpprecision >= 0)
					{
						setPrecision(tmpprecision);
						setScale(-1);
					}
					recalculateDisplayBox();
					getOwnerColumn()->displayBoxUpdate();
					getOwnerColumn()->getOwnerTable()->updateTableSize();
				}
				if(answer == dt_numeric)
				{
					numericDialog = new ddPrecisionScaleDialog(	view,
					        NumToStr((long)getPrecision()),
					        NumToStr((long)getScale()));
					numericDialog->ShowModal();
					numericDialog->GetValue1().ToLong(&tmpvalue);
					setPrecision(tmpvalue);
					numericDialog->GetValue2().ToLong(&tmpvalue);
					setScale(tmpvalue);
					delete numericDialog;
					recalculateDisplayBox();
					getOwnerColumn()->displayBoxUpdate();
					getOwnerColumn()->getOwnerTable()->updateTableSize();
				}


				setDataType( (ddDataType) answer );
				recalculateDisplayBox();
				getOwnerColumn()->displayBoxUpdate();
				getOwnerColumn()->getOwnerTable()->updateTableSize();
			}
			break;
		case MNU_TYPEPKEY_CONSTRAINTNAME:
			tmpString = wxGetTextFromUser(wxT("New name of primary key:"), getOwnerColumn()->getOwnerTable()->getPkConstraintName(), getOwnerColumn()->getOwnerTable()->getPkConstraintName(), view);
			if(tmpString.length() > 0)
			{
				getOwnerColumn()->getOwnerTable()->setPkConstraintName(tmpString);
				view->notifyChanged();
			}
			break;
		case MNU_TYPEUKEY_CONSTRAINTNAME:
			answer = wxGetSingleChoiceIndex(wxT("Select Unique Key constraint to edit name"), wxT("Select Unique Constraint to edit name:"), getOwnerColumn()->getOwnerTable()->getUkConstraintsNames(), view);
			if(answer >= 0)
			{
				tmpString = wxGetTextFromUser(wxT("Change name of Unique Key constraint:"), getOwnerColumn()->getOwnerTable()->getUkConstraintsNames().Item(answer), getOwnerColumn()->getOwnerTable()->getUkConstraintsNames().Item(answer), view);
				if(tmpString.length() > 0)
				{
					getOwnerColumn()->getOwnerTable()->getUkConstraintsNames().Item(answer) = tmpString;
					view->notifyChanged();
				}
			}
			break;
		case MNU_DELTABLE:

			delremDialog = new hdRemoveDeleteDialog(wxT("Are you sure you wish to delete table ") + getOwnerColumn()->getOwnerTable()->getTableName() + wxT("?"), wxT("Delete table?"), view);
			answer = delremDialog->ShowModal();
			ddTableFigure *table = getOwnerColumn()->getOwnerTable();
			if (answer == DD_DELETE)
			{
				ddDrawingEditor *editor = (ddDrawingEditor *) view->editor();
				//Unselect table at all diagrams
				editor->removeFromAllSelections(table);
				//Drop foreign keys with this table as origin or destination
				table->processDeleteAlert(view->getDrawing());
				//Drop table
				editor->deleteModelFigure(table);
				editor->getDesign()->refreshBrowser();
				view->notifyChanged();
			}
			else if(answer == DD_REMOVE)
			{
				ddDrawingEditor *editor = (ddDrawingEditor *) view->editor();
				editor->getExistingDiagram(view->getIdx())->removeFromSelection(table);
				editor->getExistingDiagram(view->getIdx())->remove(table);
				view->notifyChanged();
			}
			delete delremDialog;
			break;
	}
}
//event ID must match enum ddDataType!!! this event was created on view
void ddTextColumnFigure::OnTextPopupClick(wxCommandEvent& event, ddDrawingView *view)
{
	wxTextEntryDialog *nameDialog=NULL;
	wxString tmpString;
	int answer;
	//DD-TODO: improve this
	switch(event.GetId())
	{
		case 0:  // Add Column
				getOwnerColumn()->getOwnerTable()->addColumn(new ddColumnFigure(wxString(wxT("NewColumn")),getOwnerColumn()->getOwnerTable()));
				break;
		case 1:  // Delete Column
				answer = wxMessageBox(wxT("Delete column: ") + getText(true) + wxT("?"), wxT("Confirm"),wxYES_NO, view);
				if (answer == wxYES)
				{
					getOwnerColumn()->getOwnerTable()->removeColumn(getOwnerColumn());
				}
				break;
		case 2:  //Rename Column
				nameDialog = new wxTextEntryDialog(view,wxT("Input column name"),wxT("Rename Column"),getText());   //DD-TODO: change for dialog like in option 17
				nameDialog->ShowModal();
				setText(nameDialog->GetValue());
				delete nameDialog;
				break;
		case 4:  //Not Null
				if(getOwnerColumn()->isNotNull())
					getOwnerColumn()->setColumnOption(null);
				else
					getOwnerColumn()->setColumnOption(notnull);
				break;
				//DD-TODO: add options fr fk, fkpk, fkuk
		case 6:	//pk
				if(getOwnerColumn()->isPrimaryKey())
				{
					getOwnerColumn()->setColumnKind(none);
				}else
				{	
					getOwnerColumn()->setColumnKind(pk);
					getOwnerColumn()->setColumnOption(notnull);
				}
				break;
		case 7:	//uk
				getOwnerColumn()->setColumnKind(uk,view);
				break;
		case 10:  // Submenu opcion 1
				columnType = dt_bigint;
				break;
		case 11:
				columnType = dt_boolean;
		break;
		case 12:
				columnType = dt_integer;
		break;
		case 13:
				columnType = dt_money;
		break;
		case 14:
				columnType = dt_varchar;
		break;
		case 15: //Call datatypes selector
				//DD-TODO: Add all types, improve and separate from quick access types
				columnType = (ddDataType) wxGetSingleChoiceIndex(wxT("Select column datatype"),wxT("Column Datatypes"),dataTypes(),view);
		break;
		case 17:
				tmpString=wxGetTextFromUser(wxT("Change name of Primary Key constraint:"),getOwnerColumn()->getOwnerTable()->getPkConstraintName(),getOwnerColumn()->getOwnerTable()->getPkConstraintName(),view);
				if(tmpString.length()>0)
					getOwnerColumn()->getOwnerTable()->setPkConstraintName(tmpString);
				break;
		case 18:
				answer = wxGetSingleChoiceIndex(wxT("Select Unique Key constraint to edit name"),wxT("Select Unique Constraint to edit name:"),getOwnerColumn()->getOwnerTable()->getUkConstraintsNames(),view);
				if(answer>=0)
				{
					tmpString=wxGetTextFromUser(wxT("Change name of Unique Key constraint:"),getOwnerColumn()->getOwnerTable()->getUkConstraintsNames().Item(answer),getOwnerColumn()->getOwnerTable()->getUkConstraintsNames().Item(answer),view);
					if(tmpString.length()>0)
						getOwnerColumn()->getOwnerTable()->getUkConstraintsNames().Item(answer)=tmpString;
				}
				break;
		case 20:
				answer = wxMessageBox(wxT("Delete Table: ") + getOwnerColumn()->getOwnerTable()->getTableName() + wxT("?"), wxT("Confirm"),wxYES_NO, view);
				if (answer == wxYES)
				{
					ddTableFigure *table = getOwnerColumn()->getOwnerTable();	
					//unselect table
					if(view->isFigureSelected(table))
					{
						view->removeFromSelection(table);
					}
					//drop foreign keys with this table as origin or destination
					table->processDeleteAlert(view);
					//drop table
					view->remove(table);
					if(table)
					{
						delete table;
					}						
				}

	}		
}
//must match enum ddDataType!!!
//It's a lot faster to use constant strings that create it at fly.
wxArrayString& ddTextColumnFigure::popupStrings()
{
		strings.Clear();
		strings.Add(wxT("Add a column ..."));  //0
		if(getOwnerColumn()->isForeignKey())
		{
			strings.Add(wxT("--disable**Delete a column ..."));  //1
		}
		else
		{
			strings.Add(wxT("Delete a column ..."));  //1
		}
		strings.Add(wxT("Rename a column ..."));  //2
		
		strings.Add(wxT("--separator--"));

		if(getOwnerColumn()->isNotNull())	//4
		{
			if(getOwnerColumn()->isForeignKey())
				strings.Add(wxT("--checked--disable**Not Null")); 
			else
				strings.Add(wxT("--checked**Not Null")); 
		}
		else
		{
			if(getOwnerColumn()->isForeignKey())		
				strings.Add(wxT("--disable**Not Null"));
			else
				strings.Add(wxT("Not Null"));
		}
		
		strings.Add(wxT("--separator--"));

		if(getOwnerColumn()->isPrimaryKey())	//6
		{
			if(getOwnerColumn()->isForeignKey())	
				strings.Add(wxT("--checked--disable**Primary Key"));
			else
				strings.Add(wxT("--checked**Primary Key"));
		}
		else
		{
			if(getOwnerColumn()->isForeignKey())	
				strings.Add(wxT("--disable**Primary Key"));
			else
				strings.Add(wxT("Primary Key"));
		}

		if(getOwnerColumn()->isUniqueKey())		//7
			strings.Add(wxT("--checked**Unique"));
		else
			strings.Add(wxT("Unique..."));

		strings.Add(wxT("--separator--"));

		if(getOwnerColumn()->isForeignKey())	
			strings.Add(wxT("--disable--submenu##Change Column Datatype**Select a Datatype:"));
		else
			strings.Add(wxT("--submenu##Change Column Datatype**Select a Datatype:"));
		
		if(columnType==dt_bigint)		//10
			strings.Add(wxT("--subitem--checked**Bigint"));
		else
			strings.Add(wxT("--subitem**Bigint"));

		if(columnType==dt_boolean)		//11
			strings.Add(wxT("--subitem--checked**Boolean"));
		else
			strings.Add(wxT("--subitem**Boolean"));

		if(columnType==dt_integer)		//12
			strings.Add(wxT("--subitem--checked**Integer"));
		else
			strings.Add(wxT("--subitem**Integer"));

		if(columnType==dt_money)		//13
			strings.Add(wxT("--subitem--checked**Money"));
		else
			strings.Add(wxT("--subitem**Money"));

		if(columnType==dt_varchar)		//14
			strings.Add(wxT("--subitem--checked**Varchar(1)"));   
		else
			strings.Add(wxT("--subitem**Varchar(1)"));   

		strings.Add(wxT("--subitem**Choose another datatype"));   //15
	
		strings.Add(wxT("--separator--")); 
		strings.Add(wxT("Primary Key Constraint name..."));  //17
		strings.Add(wxT("Unique Constraint name..."));  //18
		strings.Add(wxT("--separator--")); 
		strings.Add(wxT("Delete Table..."));  //20
		//DD-TODO: after add varchar left a cursor over length selected to allow used
	//}
	return strings;
};