1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
//////////////////////////////////////////////////////////////////////////
//
// pgAdmin III - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
// ddTableFigure.h - Draw table figure of a model
//
////////////////////////////////////////////////////////////////////////////
#ifndef DDTABLEFIGURE_H
#define DDTABLEFIGURE_H
#include "hotdraw/figures/hdCompositeFigure.h"
#include "hotdraw/figures/hdRectangleFigure.h"
#include "hotdraw/figures/hdSimpleTextFigure.h"
#include "dd/dditems/figures/ddTextTableItemFigure.h"
#include "dd/dditems/figures/ddColumnFigure.h"
#include "dd/ddmodel/ddDatabaseDesign.h"
class ddScrollBarHandle;
class ddRelationshipFigure;
class hdDrawing;
class ddTableFigure : public hdCompositeFigure
{
public:
ddTableFigure(wxString tableName, int x, int y);
ddTableFigure(wxString tableName, int posIdx, int x, int y);
void InitTableValues(wxArrayString UniqueKeysName, wxString primaryKeyName, int bdc, int bdi, int maxcolsi, int minidxsi, int maxidxsi, int colsrs, int colsw, int idxsrs, int idxsw);
void Init(wxString tableName, int x, int y);
hdMultiPosRect &getBasicDisplayBox();
~ddTableFigure();
//Diagrams related functions
virtual void AddPosForNewDiagram();
virtual void RemovePosOfDiagram(int posIdx);
//add remove items
ddColumnFigure *getColByName(wxString name);
void addColumn(int posIdx, ddColumnFigure *column);
void addColumnFromStorage(ddColumnFigure *column);
void syncInternalsPosAt(int posIdx, int x, int y);
void syncInternalsPosAt(wxArrayInt &x, wxArrayInt &y);
void removeColumn(int posIdx, ddColumnFigure *column);
//movement
void manuallyNotifyChange(int posIdx)
{
changed(posIdx);
};
virtual void basicMoveBy(int posIdx, int x, int y);
//show messages to set fk destination
void setSelectFkDestMode(bool value);
//delete hack tables
void processDeleteAlert(hdDrawing *drawing);
//columns scrolls
void updateTableSize(bool notifyChange = true);
void recalculateColsPos(int posIdx);
void setColsRowsWindow(int num);
hdMultiPosRect &getColsSpace();
hdMultiPosRect &getFullSpace();
hdMultiPosRect &getTitleRect();
int getTotalColumns();
int getColumnsWindow();
int getTopColWindowIndex();
void setColumnsWindow(int posIdx, int value, bool maximize = false);
void columnsWindowUp(int posIdx);
void columnsWindowDown(int posIdx);
int getFiguresMaxWidth();
int getColDefaultHeight(wxFont font);
//metadata
wxString getTableName();
wxString getShortTableName();
wxString generateSQLCreate(wxString schemaName);
wxString generateSQLAlterPks(wxString schemaName);
wxString generateSQLAlterFks(wxString schemaName);
wxString generateSQLAlterUks(wxString schemaName);
wxString generateAltersTable(pgConn *connection, wxString schemaName, ddDatabaseDesign *design);
wxArrayString getAllColumnsNames();
wxArrayString getAllFkSourceColsNames(bool pk, int ukIndex = -1);
ddColumnFigure *getColumnByName(wxString name);
bool validateTable(wxString &errors);
//uk pk constraints
void setPkConstraintName(wxString name);
wxString getPkConstraintName();
wxArrayString &getUkConstraintsNames();
bool disablePrimaryKey();
bool enablePrimaryKey();
//fk related
void updateFkObservers();
void updateSizeOfObservers();
void prepareForDeleteFkColumn(ddColumnFigure *column);
//ScrollBar persistence related
int getBeginDrawCols()
{
return beginDrawCols;
};
int getBeginDrawIdxs()
{
return beginDrawIdxs;
};
int getMaxColIndex()
{
return maxColIndex;
};
int getMinIdxIndex()
{
return minIdxIndex;
};
int getMaxIdxIndex()
{
return maxIdxIndex;
};
int getColsRowsSize()
{
return colsRowsSize;
};
int getColsWindow()
{
return colsWindow;
};
int getIdxsRowsSize()
{
return idxsRowsSize;
};
int getIdxsWindow()
{
return idxsWindow;
};
//Temporary alter table instead of create Helper
bool getBelongsToSchema()
{
return belongsToSchema;
};
void setBelongsToSchema(bool value)
{
belongsToSchema = value;
};
protected:
//drawing
virtual void basicDraw(wxBufferedDC &context, hdDrawingView *view);
virtual void basicDrawSelected(wxBufferedDC &context, hdDrawingView *view);
private:
//Temporary alter table instead of create Helper
bool belongsToSchema;
//Main Rectangle Sizes
hdMultiPosRect fullSizeRect, titleRect, titleColsRect, colsRect, titleIndxsRect, indxsRect;
hdMultiPosRect unScrolledColsRect, unScrolledFullSizeRect, unScrolledTitleRect;
//Rectangle item counters
int colsRowsSize, colsWindow, idxsRowsSize, idxsWindow;
//vector indexes
int maxColIndex, minIdxIndex, maxIdxIndex;
//position
int beginDrawCols, beginDrawIdxs;
//Default Figures
hdRectangleFigure *rectangleFigure;
ddTextTableItemFigure *tableTitle;
//helper variables
bool selectingFkDestination;
int internalPadding, externalPadding;
bool calcScrolled;
//specials handles
ddScrollBarHandle *scrollbar;
//methods
int getHeightFontMetric(wxString text, wxFont font);
void calcInternalSubAreas(int posIdx);
//pk uk(s)
wxString pkName;
wxArrayString ukNames;
};
#endif
|