00001
00002
00003
00004 #include "stdafx.h"
00005 #include "GridDlg.h"
00006 #include "NewCellTypes/GridCellCombo.h"
00007 #include "NewCellTypes/GridCellComboBool.h"
00008 #include "NewCellTypes/GridCellNumeric.h"
00009 #include "NewCellTypes/GridCellDouble.h"
00010 #include "NewCellTypes/GridCellFCO.h"
00011 #include "NewCellTypes/GridCellMultiLine.h"
00012 #include "NewCellTypes/GridCellAttrName.h"
00013
00014
00015 #include <queue>
00016 #include "Console.h"
00017
00018 #ifdef _DEBUG
00019 #define new DEBUG_NEW
00020 #undef THIS_FILE
00021 static char THIS_FILE[] = __FILE__;
00022 #endif
00023
00024 #define COLOFFSET 7 //offset until attributes start, to make it easy to add columns (extended name, etc)
00025 #define KIND_COL 0
00026 #define NAME_COL 1
00027 #define ID_COL 2
00028 #define EXTNAME_COL 3
00029 #define INSTANCE_COL 4
00030 #define SRC_COL 5
00031 #define DST_COL 6
00032
00033
00035
00036
00037
00038 CGridDlg::CGridDlg(CWnd* pParent )
00039 : CDialog(CGridDlg::IDD, pParent)
00040 {
00041
00042 m_chkAllKinds = TRUE;
00043 m_chkAllTypes = TRUE;
00044 m_chkAtom = FALSE;
00045 m_chkCon = FALSE;
00046 m_chkModel = FALSE;
00047 m_chkRef = FALSE;
00048 m_chkSet = FALSE;
00049
00050
00051 m_OldSize = CSize(-1,-1);
00052 }
00053
00054 CGridDlg::CGridDlg(IMgaFCOs* selectedObjs, CWnd* pParent )
00055 : CDialog(CGridDlg::IDD, pParent), m_bInited(false)
00056 {
00057
00058 m_chkAllKinds = TRUE;
00059 m_chkAllTypes = TRUE;
00060 m_chkAtom = FALSE;
00061 m_chkCon = FALSE;
00062 m_chkModel = FALSE;
00063 m_chkRef = FALSE;
00064 m_chkSet = FALSE;
00065
00066
00067 m_OldSize = CSize(-1,-1);
00068
00069 m_FCOs = selectedObjs;
00070
00071
00072
00073 }
00074
00075
00076 BOOL CGridDlg::OnInitDialog()
00077 {
00078 BOOL val = CDialog::OnInitDialog();
00079
00080 CComPtr<IMgaMetaProject> m_MetaProject;
00081 COMTHROW(m_Project->get_RootMeta(&m_MetaProject));
00082
00083
00084 COMTHROW(m_MetaProject->get_RootFolder(&m_rootMetaFolder));
00085
00086 GetMetaObjectNames(m_rootMetaFolder);
00087
00088 OnCheckAllKinds();
00089 OnChkAllTypes();
00090
00091 long count;
00092 COMTHROW(m_FCOs->get_Count(&count));
00093
00094 if(count>0)
00095 {
00096 m_btnAtom.EnableWindow(FALSE);
00097 m_btnModel.EnableWindow(FALSE);
00098 m_btnRef.EnableWindow(FALSE);
00099 m_btnSet.EnableWindow(FALSE);
00100 m_btnCon.EnableWindow(FALSE);
00101 m_btnDisp.EnableWindow(FALSE);
00102 m_btnAllKinds.EnableWindow(FALSE);
00103 m_btnAllTypes.EnableWindow(FALSE);
00104 m_lstKind.EnableWindow(FALSE);
00105 m_stcKind.EnableWindow(FALSE);
00106 m_stcType.EnableWindow(FALSE);
00107 m_stcHelp.EnableWindow(FALSE);
00108 m_stcFilters.EnableWindow(FALSE);
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126 InitGrid();
00127 }
00128 else
00129 OnButtonDisplay();
00130
00131 m_bInited = true;
00132
00133 return val;
00134
00135 }
00136
00137 void CGridDlg::InitGrid()
00138 {
00139
00140
00141
00142 CRect rect;
00143 GetClientRect(rect);
00144 m_OldSize = CSize(rect.Width(), rect.Height());
00145
00146
00147
00148
00149
00150 m_Grid.DeleteAllItems();
00151 m_Grid.SetRowCount(0);
00152 m_Grid.SetColumnCount(0);
00153
00154 if(m_FCOs == NULL)
00155 return;
00156
00157
00158
00159
00160 long count;
00161
00162
00163 COMTHROW(m_FCOs->get_Count(&count));
00164
00165
00166
00167
00168 m_Grid.SetRowCount(count+1);
00169 m_Grid.SetColumnCount(COLOFFSET + 2);
00170 m_Grid.SetFixedRowCount(1);
00171 m_Grid.SetFixedColumnCount(1);
00172 m_Grid.EnableSelection(FALSE);
00173
00174 m_Grid.SetHeaderSort();
00175
00176 m_Grid.SetItemText(0,KIND_COL,"Object Kind");
00177 m_Grid.SetItemText(0,NAME_COL,"Object Name");
00178 m_Grid.SetItemText(0,ID_COL,"Object ID");
00179 m_Grid.SetItemText(0,EXTNAME_COL,"Extended Name");
00180 m_Grid.SetItemText(0,INSTANCE_COL,"Is Instance");
00181 m_Grid.SetItemText(0,SRC_COL, "Source");
00182 m_Grid.SetItemText(0,DST_COL, "Destination");
00183
00184 m_Grid.SetItemText(0,COLOFFSET,"Attribute");
00185 m_Grid.SetItemText(0,COLOFFSET+1,"Value");
00186
00187
00188
00189 int ColNum = COLOFFSET;
00190 int RowNum = 1;
00191
00192 MGACOLL_ITERATE(IMgaFCO,m_FCOs)
00193 {
00194 CBstr Type;
00195 CBstr Name;
00196
00197
00198 CComPtr<IMgaMetaFCO> cmeta;
00199 COMTHROW( MGACOLL_ITER->get_Meta(&cmeta) );
00200 COMTHROW( cmeta->get_DisplayedName(Type) );
00201
00202 CString kindName = Type;
00203 m_Grid.SetItemText(RowNum,KIND_COL,kindName);
00204
00205
00206 if(m_Grid.SetCellType(RowNum,NAME_COL, RUNTIME_CLASS(CGridCellFCO)))
00207 {
00208 CGridCellFCO *pCellFCO = (CGridCellFCO *)m_Grid.GetCell(RowNum,1);
00209 pCellFCO->SetFCO(MGACOLL_ITER);
00210 }
00211 COMTHROW(MGACOLL_ITER->get_Name(Name));
00212 CString name_str = Name;
00213 m_Grid.SetItemText(RowNum,NAME_COL,name_str);
00214 if(RowNum%2==0)
00215 m_Grid.GetCell(RowNum,NAME_COL)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00216
00217
00218 CBstr ID;
00219 COMTHROW(MGACOLL_ITER->get_ID(ID));
00220 CString ObjID = ID;
00221 m_Grid.SetItemText(RowNum,ID_COL,ObjID);
00222 m_Grid.SetItemState(RowNum,ID_COL, m_Grid.GetItemState(RowNum,2) | GVIS_READONLY);
00223 if(RowNum%2==0)
00224 m_Grid.GetCell(RowNum,ID_COL)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00225
00226
00227 CString ExtName;
00228 BuildExtendedName(MGACOLL_ITER,ExtName);
00229 m_Grid.SetItemText(RowNum,EXTNAME_COL,ExtName);
00230 m_Grid.SetItemState(RowNum,EXTNAME_COL, m_Grid.GetItemState(RowNum,2) | GVIS_READONLY);
00231 if(RowNum%2==0)
00232 m_Grid.GetCell(RowNum,EXTNAME_COL)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00233
00234
00235 short bInstance;
00236 m_Grid.SetItemState(RowNum,INSTANCE_COL, m_Grid.GetItemState(RowNum,2) | GVIS_READONLY);
00237 COMTHROW(MGACOLL_ITER->get_IsInstance(&bInstance));
00238 if(bInstance)
00239 m_Grid.SetItemText(RowNum,INSTANCE_COL, "true");
00240 else
00241 m_Grid.SetItemText(RowNum,INSTANCE_COL, "false");
00242 if(RowNum%2==0)
00243 m_Grid.GetCell(RowNum,INSTANCE_COL)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00244
00245
00246 m_Grid.SetItemState(RowNum, SRC_COL, m_Grid.GetItemState(RowNum,2) | GVIS_READONLY);
00247 m_Grid.SetItemState(RowNum, DST_COL, m_Grid.GetItemState(RowNum,2) | GVIS_READONLY);
00248 CBstr ID1, ID2;
00249 objtype_enum tp;
00250 COMTHROW(MGACOLL_ITER->get_ObjType(&tp));
00251
00252 if(tp==OBJTYPE_CONNECTION) {
00253 CComPtr<IMgaFCO> src, dst;
00254 CComPtr<IMgaSimpleConnection> conn;
00255 COMTHROW(MGACOLL_ITER.QueryInterface(&conn));
00256 conn->get_Src(&src);
00257 conn->get_Dst(&dst);
00258 CString SrcExtName;
00259 CString DstExtName;
00260 BuildExtendedName(src,SrcExtName);
00261 BuildExtendedName(dst,DstExtName);
00262 m_Grid.SetItemText(RowNum,SRC_COL, SrcExtName);
00263 m_Grid.SetItemText(RowNum,DST_COL, DstExtName);
00264 }
00265 else {
00266 m_Grid.SetItemText(RowNum,SRC_COL, "N/A");
00267 m_Grid.SetItemText(RowNum,DST_COL, "N/A");
00268 }
00269 if(RowNum%2==0) {
00270 m_Grid.GetCell(RowNum,SRC_COL)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00271 m_Grid.GetCell(RowNum,DST_COL)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00272 }
00273
00274
00275
00276 CComPtr<IMgaAttributes> p_AttributeList;
00277 COMTHROW(MGACOLL_ITER->get_Attributes(&p_AttributeList));
00278
00279 long AttribCount;
00280 int ColCount = m_Grid.GetColumnCount();
00281 COMTHROW(p_AttributeList->get_Count(&AttribCount));
00282 if(((AttribCount*2)+COLOFFSET) > ColCount)
00283 {
00284 m_Grid.SetColumnCount((AttribCount*2)+COLOFFSET);
00285 for(int i=ColCount; i<((AttribCount*2)+COLOFFSET-1); i++)
00286 {
00287 m_Grid.SetItemText(0,i,"Attribute");
00288 i++;
00289 m_Grid.SetItemText(0,i,"Value");
00290
00291
00292 for(int j=1; j<RowNum; j++)
00293 {
00294 m_Grid.SetItemState(j,i-1, m_Grid.GetItemState(j,i-1) | GVIS_READONLY);
00295 m_Grid.SetItemState(j,i, m_Grid.GetItemState(j,i) | GVIS_READONLY);
00296 if(j%2==0)
00297 {
00298 m_Grid.GetCell(j,i-1)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00299 m_Grid.GetCell(j,i)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00300 }
00301 }
00302
00303 }
00304 }
00305
00306 MGACOLL_ITERATE(IMgaAttribute,p_AttributeList)
00307 {
00308 if(RowNum%2==0)
00309 m_Grid.GetCell(RowNum,ColNum)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00310
00311 CComPtr<IMgaMetaAttribute> p_MetaAtt;
00312 COMTHROW(MGACOLL_ITER->get_Meta(&p_MetaAtt));
00313
00314 CBstr AttName;
00315 CBstr AttDisplayedName;
00316 COMTHROW(p_MetaAtt->get_Name(AttName));
00317 COMTHROW(p_MetaAtt->get_DisplayedName(AttDisplayedName));
00318
00319
00320
00321 if (m_Grid.SetCellType(RowNum,ColNum, RUNTIME_CLASS(CGridCellAttrName)))
00322 {
00323 CGridCellAttrName *pCellAttrName = (CGridCellAttrName *)m_Grid.GetCell(RowNum,ColNum);
00324 pCellAttrName->SetRealName(CString(AttName));
00325 }
00326 m_Grid.SetItemText(RowNum,ColNum,CString(AttDisplayedName));
00327 m_Grid.SetItemState(RowNum,ColNum, m_Grid.GetItemState(RowNum,ColNum) | GVIS_READONLY);
00328 ColNum++;
00329
00330 if(RowNum%2==0)
00331 m_Grid.GetCell(RowNum,ColNum)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00332
00333 attval_enum ValType;
00334 COMTHROW(p_MetaAtt->get_ValueType(&ValType));
00335 int actval_int;
00336 double actval_dbl;
00337 bool actval_b;
00338 CString actval_str;
00339
00340 CStringArray options;
00341 CGridCellCombo *pCell;
00342
00343 CComPtr<IMgaMetaEnumItems> p_MetaEnumItems;
00344
00345 CBstr bstrS;
00346 long l;
00347 VARIANT_BOOL vb;
00348
00349 switch (ValType)
00350 {
00351
00352 case ATTVAL_NULL:
00353 break;
00354 case ATTVAL_STRING:
00355 COMTHROW( MGACOLL_ITER->get_StringValue(bstrS));
00356 actval_str = bstrS;
00357 if(GetMultiLine(p_MetaAtt))
00358 {
00359 if (!m_Grid.SetCellType(RowNum,ColNum, RUNTIME_CLASS(CGridCellMultiLine)))
00360 break;
00361 m_Grid.GetCell(RowNum,ColNum)->SetFormat(DT_WORDBREAK);
00362
00363 actval_str.Replace("\n","\r\n");
00364
00365 }
00366 m_Grid.SetItemText(RowNum,ColNum,actval_str);
00367 break;
00368 case ATTVAL_INTEGER:
00369 if(SUCCEEDED(MGACOLL_ITER->get_IntValue(&l)))
00370 {
00371 actval_int = l;
00372 if (!m_Grid.SetCellType(RowNum,ColNum, RUNTIME_CLASS(CGridCellNumeric)))
00373 break;
00374 char chNum[ 100 ];
00375 sprintf( chNum, "%d", actval_int );
00376 actval_str = chNum;
00377
00378
00379 m_Grid.SetItemText(RowNum,ColNum,actval_str);
00380 }
00381 break;
00382 case ATTVAL_DOUBLE:
00383 if(SUCCEEDED( MGACOLL_ITER->get_FloatValue(&actval_dbl )))
00384 {
00385
00386 if (!m_Grid.SetCellType(RowNum,ColNum, RUNTIME_CLASS(CGridCellDouble)))
00387 break;
00388 char chNum[ 100 ];
00389 sprintf( chNum, "%f", actval_dbl );
00390 actval_str = chNum;
00391 m_Grid.SetItemText(RowNum,ColNum,actval_str);
00392 }
00393 break;
00394 case ATTVAL_BOOLEAN:
00395 if(SUCCEEDED( MGACOLL_ITER->get_BoolValue(&vb) ) )
00396 {
00397 actval_b = (vb != 0);
00398 if (!m_Grid.SetCellType(RowNum, ColNum, RUNTIME_CLASS(CGridCellComboBool)))
00399 break;
00400
00401 options.Add(_T("true"));
00402 options.Add(_T("false"));
00403
00404 pCell = (CGridCellComboBool*) m_Grid.GetCell(RowNum,ColNum);
00405 pCell->SetOptions(options);
00406
00407 pCell->SetStyle(pCell->GetStyle() | CBS_DROPDOWNLIST);
00408
00409 if(actval_b)
00410 {
00411 m_Grid.SetItemText(RowNum,ColNum, "true");
00412
00413 }
00414 else
00415 m_Grid.SetItemText(RowNum,ColNum,"false");
00416
00417 }
00418 break;
00419 case ATTVAL_REFERENCE:
00420
00421 m_Grid.SetItemText(RowNum,ColNum,"Reference Attribute");
00422 m_Grid.SetItemState(RowNum,ColNum, m_Grid.GetItemState(RowNum,ColNum) | GVIS_READONLY);
00423 break;
00424 case ATTVAL_ENUM:
00425
00426
00427 if (!m_Grid.SetCellType(RowNum, ColNum, RUNTIME_CLASS(CGridCellCombo)))
00428 break;
00429
00430 COMTHROW(p_MetaAtt->get_EnumItems(&p_MetaEnumItems));
00431 MGACOLL_ITERATE(IMgaMetaEnumItem,p_MetaEnumItems)
00432 {
00433
00434 CBstr EnumItemVal;
00435 COMTHROW(MGACOLL_ITER->get_Value(EnumItemVal));
00436
00437 options.Add(EnumItemVal);
00438
00439 }MGACOLL_ITERATE_END
00440
00441 pCell = (CGridCellCombo*) m_Grid.GetCell(RowNum,ColNum);
00442 pCell->SetOptions(options);
00443
00444 pCell->SetStyle(pCell->GetStyle() | CBS_DROPDOWNLIST);
00445
00446 COMTHROW( MGACOLL_ITER->get_StringValue(bstrS));
00447 actval_str = bstrS;
00448 m_Grid.SetItemText(RowNum,ColNum,actval_str);
00449 break;
00450 case ATTVAL_DYNAMIC:
00451
00452 m_Grid.SetItemText(RowNum,ColNum,"Dynamic Attribute");
00453 m_Grid.SetItemState(RowNum,ColNum, m_Grid.GetItemState(RowNum,ColNum) | GVIS_READONLY);
00454 break;
00455 default:
00456 break;
00457 }
00458
00459 ColNum++;
00460
00461
00462 }MGACOLL_ITERATE_END;
00463
00464
00465
00466 for(int k=ColNum; k<m_Grid.GetColumnCount();k++)
00467 {
00468 m_Grid.SetItemState(RowNum,k, m_Grid.GetItemState(RowNum,k) | GVIS_READONLY);
00469 if(RowNum%2==0)
00470 m_Grid.GetCell(RowNum,k)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00471 }
00472
00473 ColNum = COLOFFSET;
00474 RowNum++;
00475
00476 }MGACOLL_ITERATE_END;
00477 }
00478
00479 HRESULT CGridDlg::ShowItemsRecursively()
00480 {
00481 COMTRY {
00482 std::queue< CComPtr<IMgaFCO> > fcoq;
00483
00484 CComPtr<IMgaFCOs> recursiveFCOs = NULL;
00485 COMTHROW(recursiveFCOs.CoCreateInstance(L"Mga.MgaFCOs"));
00486
00487 long count = 0;
00488 COMTHROW(this->m_FCOs->get_Count(&count));
00489
00490 for (int idx = 1; idx <= count; idx++) {
00491 CComPtr<IMgaFCO> fco;
00492 COMTHROW(this->m_FCOs->get_Item(idx, &fco));
00493 fcoq.push(fco);
00494 }
00495
00496 while (! fcoq.empty()) {
00497 CComPtr<IMgaFCO> parent = fcoq.front();
00498 fcoq.pop();
00499
00500 COMTHROW(recursiveFCOs->Append(parent));
00501
00502 objtype_enum type;
00503 COMTHROW(parent->get_ObjType(&type));
00504 if (type != OBJTYPE_MODEL && type != OBJTYPE_FOLDER)
00505 continue;
00506
00507 CComPtr<IMgaObjects> children = NULL;
00508 COMTHROW(parent->get_ChildObjects(&children));
00509
00510 long count = 0;
00511 COMTHROW(children->get_Count(&count));
00512
00513 for (int idx = 1; idx <= count; idx++) {
00514 CComPtr<IMgaObject> child;
00515 COMTHROW(children->get_Item(idx, &child));
00516
00517 objtype_enum type = OBJTYPE_NULL;
00518 COMTHROW(child->get_ObjType(&type));
00519
00520 switch (type) {
00521 case OBJTYPE_MODEL:
00522 case OBJTYPE_ATOM:
00523 case OBJTYPE_REFERENCE:
00524 case OBJTYPE_CONNECTION:
00525 case OBJTYPE_SET:
00526 CComPtr<IMgaFCO> fco = NULL;
00527 fco = static_cast<IMgaFCO*>(child.p);
00528 fcoq.push(fco);
00529 break;
00530 }
00531 }
00532 }
00533
00534 this->m_FCOs = recursiveFCOs;
00535 this->InitGrid();
00536
00537 return S_OK;
00538 }
00539 COMCATCH(;);
00540 }
00541
00542 void CGridDlg::GetMetaObjectNames(IMgaMetaBase *metaBase)
00543 {
00544 CComPtr<IMgaMetaFCOs> p_FCOs;
00545 CComQIPtr<IMgaMetaModel> p_Model = metaBase;
00546 if ( p_Model.p )
00547 COMTHROW( p_Model->get_DefinedFCOs( &p_FCOs ) );
00548 else {
00549 CComQIPtr<IMgaMetaFolder> p_Folder = metaBase;
00550 if ( p_Folder.p ) {
00551 CComPtr<IMgaMetaFolders> p_Folders;
00552 COMTHROW( p_Folder->get_DefinedFolders( &p_Folders ) );
00553 MGACOLL_ITERATE( IMgaMetaFolder, p_Folders ) {
00554 GetMetaObjectNames( MGACOLL_ITER.p);
00555 } MGACOLL_ITERATE_END;
00556 COMTHROW( p_Folder->get_DefinedFCOs( &p_FCOs ) );
00557 }
00558 }
00559 if ( p_FCOs.p ) {
00560 MGACOLL_ITERATE( IMgaMetaFCO, p_FCOs ) {
00561 CBstr MetaFCOName;
00562
00563 COMTHROW(MGACOLL_ITER->get_Name(MetaFCOName));
00564
00565 if(m_chkAllTypes)
00566 m_lstKind.AddString(CString(MetaFCOName));
00567 else
00568 {
00569 if(m_chkAtom)
00570 {
00571 CComQIPtr<IMgaMetaAtom> qAtom = MGACOLL_ITER;
00572 if (qAtom.p) m_lstKind.AddString(CString(MetaFCOName));
00573 }
00574 if(m_chkModel)
00575 {
00576 CComQIPtr<IMgaMetaModel> qModel = MGACOLL_ITER;
00577 if (qModel.p) m_lstKind.AddString(CString(MetaFCOName));
00578 }
00579 if(m_chkRef)
00580 {
00581 CComQIPtr<IMgaMetaReference> qRef = MGACOLL_ITER;
00582 if (qRef.p) m_lstKind.AddString(CString(MetaFCOName));
00583 }
00584 if(m_chkSet)
00585 {
00586 CComQIPtr<IMgaMetaSet> qSet = MGACOLL_ITER;
00587 if (qSet.p) m_lstKind.AddString(CString(MetaFCOName));
00588 }
00589 if(m_chkCon)
00590 {
00591 CComQIPtr<IMgaMetaConnection> qCon = MGACOLL_ITER;
00592 if (qCon.p) m_lstKind.AddString(CString(MetaFCOName));
00593 }
00594 }
00595
00596 GetMetaObjectNames( MGACOLL_ITER.p);
00597 } MGACOLL_ITERATE_END;
00598 }
00599
00600 }
00601
00602 void CGridDlg::DoDataExchange(CDataExchange* pDX)
00603 {
00604 CDialog::DoDataExchange(pDX);
00605
00606 DDX_Control(pDX, IDC_STATIC_FILTERS, m_stcFilters);
00607 DDX_Control(pDX, IDC_STATIC_SELECTION, m_stcSelect);
00608 DDX_Control(pDX, IDC_CHKALLTYPES, m_btnAllTypes);
00609 DDX_Control(pDX, IDC_CHECKALLKINDS, m_btnAllKinds);
00610 DDX_Control(pDX, IDC_STATIC_TYPE, m_stcType);
00611 DDX_Control(pDX, IDC_STATIC_KIND, m_stcKind);
00612 DDX_Control(pDX, IDC_STATICHELP, m_stcHelp);
00613 DDX_Control(pDX, IDC_BTNDISP, m_btnDisp);
00614 DDX_Control(pDX, IDC_CHKSET, m_btnSet);
00615 DDX_Control(pDX, IDC_CHKREF, m_btnRef);
00616 DDX_Control(pDX, IDC_CHKMODEL, m_btnModel);
00617 DDX_Control(pDX, IDC_CHKCON, m_btnCon);
00618 DDX_Control(pDX, IDC_CHKATOM, m_btnAtom);
00619 DDX_Control(pDX, IDC_LISTKIND, m_lstKind);
00620 DDX_Control(pDX, IDCANCEL, m_btnCANCEL);
00621 DDX_Control(pDX, IDOK, m_btnOK);
00622 DDX_Check(pDX, IDC_CHECKALLKINDS, m_chkAllKinds);
00623 DDX_Check(pDX, IDC_CHKALLTYPES, m_chkAllTypes);
00624 DDX_Check(pDX, IDC_CHKATOM, m_chkAtom);
00625 DDX_Check(pDX, IDC_CHKCON, m_chkCon);
00626 DDX_Check(pDX, IDC_CHKMODEL, m_chkModel);
00627 DDX_Check(pDX, IDC_CHKREF, m_chkRef);
00628 DDX_Check(pDX, IDC_CHKSET, m_chkSet);
00629 DDX_Control(pDX, IDC_GRID, m_Grid);
00630
00631 }
00632
00633
00634 BEGIN_MESSAGE_MAP(CGridDlg, CDialog)
00635
00636 ON_COMMAND(ID_VIEW_RECURSIVELYSHOWITEMS, OnRecursivelyShowItems)
00637 ON_WM_SIZE()
00638 ON_BN_CLICKED(IDC_BTNDISP, OnButtonDisplay)
00639 ON_BN_CLICKED(IDC_CHECKALLKINDS, OnCheckAllKinds)
00640 ON_BN_CLICKED(IDC_CHKALLTYPES, OnChkAllTypes)
00641 ON_BN_CLICKED(IDC_CHKATOM, OnChkAtom)
00642 ON_BN_CLICKED(IDC_CHKCON, OnChkCon)
00643 ON_BN_CLICKED(IDC_CHKMODEL, OnChkModel)
00644 ON_BN_CLICKED(IDC_CHKREF, OnChkRef)
00645 ON_BN_CLICKED(IDC_CHKSET, OnChkSet)
00646
00647 ON_NOTIFY(NM_DBLCLK, IDC_GRID, OnGridDblClick)
00648 ON_NOTIFY(NM_CLICK, IDC_GRID, OnGridClick)
00649 ON_NOTIFY(NM_RCLICK, IDC_GRID, OnGridRClick)
00650 ON_NOTIFY(GVN_BEGINLABELEDIT, IDC_GRID, OnGridStartEdit)
00651 ON_NOTIFY(GVN_ENDLABELEDIT, IDC_GRID, OnGridEndEdit)
00652 ON_NOTIFY(GVN_SELCHANGING, IDC_GRID, OnGridStartSelChange)
00653 ON_NOTIFY(GVN_SELCHANGED, IDC_GRID, OnGridEndSelChange)
00654 ON_NOTIFY(GVN_BEGINDRAG, IDC_GRID, OnGridBeginDrag)
00655 ON_NOTIFY(NM_RCLICK, IDC_GRID, OnGridRClick)
00656 ON_NOTIFY(NM_RCLICK, IDC_GRID, OnGridRClick)
00657 ON_NOTIFY(NM_RCLICK, IDC_GRID, OnGridRClick)
00658 END_MESSAGE_MAP()
00659
00661
00662
00663 void CGridDlg::SetFilter(IMgaFilter *filter)
00664 {
00665 m_Filter = filter;
00666 }
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696 void CGridDlg::OnGridRClick(NMHDR *pNotifyStruct, LRESULT* )
00697 {
00698
00699
00700 }
00701
00702
00703 void CGridDlg::OnGridStartEdit(NMHDR *pNotifyStruct, LRESULT* pResult)
00704 {
00705
00706
00707
00708 }
00709
00710
00711 void CGridDlg::OnGridEndEdit(NMHDR *pNotifyStruct, LRESULT* pResult)
00712 {
00713 NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
00714
00715
00716
00717
00718 long RowNum = pItem->iRow;
00719 long ColNum = pItem->iColumn;
00720 long count;
00721
00722 CComPtr<IMgaFCO> obj;
00723 CString objNameCellClass = m_Grid.GetCell(RowNum,1)->GetRuntimeClass()->m_lpszClassName;
00724 if(objNameCellClass == "CGridCellFCO")
00725 {
00726 CGridCellFCO *pCellFCO = (CGridCellFCO *)m_Grid.GetCell(RowNum,1);
00727 obj = pCellFCO->GetFCO();
00728 }
00729 else
00730 {
00731 ASSERT(objNameCellClass == "CGridCellFCO");
00732 return;
00733 }
00734
00735 if(pItem->iColumn == 1)
00736 {
00737
00738 COMTHROW(m_FCOs->get_Count(&count));
00739
00740 if((RowNum > 0) && (RowNum <= count))
00741 {
00742
00743 COMTHROW(obj->put_Name(CComBSTR(m_Grid.GetItemText(RowNum,1))));
00744
00745 }
00746
00747 }
00748 if(pItem->iColumn >COLOFFSET )
00749 {
00750
00751
00752
00753 CString AttName;
00754 CGridCellAttrName *pCellAttrName = (CGridCellAttrName *)m_Grid.GetCell(RowNum,ColNum-1);
00755 if(!pCellAttrName) return;
00756 AttName = pCellAttrName->GetRealName();
00757
00758
00759
00760 CString ClassName = m_Grid.GetCell(RowNum,ColNum)->GetRuntimeClass()->m_lpszClassName;
00761
00762 if(ClassName == "CGridCellComboBool")
00763 {
00764 CGridCellComboBool *pCell = (CGridCellComboBool *)(m_Grid.GetCell(RowNum,ColNum));
00765 CString value = pCell->GetText();
00766 if(value == "true")
00767 {
00768 BOOL val = TRUE;
00769 COMTHROW(obj->put_BoolAttrByName(CComBSTR(AttName),val));
00770 }
00771 else if(value == "false")
00772 {
00773 BOOL val = FALSE;
00774 COMTHROW(obj->put_BoolAttrByName(CComBSTR(AttName),val));
00775 }
00776 }
00777
00778 if(ClassName == "CGridCellCombo")
00779 {
00780
00781 COMTHROW(obj->put_StrAttrByName(CComBSTR(AttName),CComBSTR(m_Grid.GetItemText(RowNum,ColNum))));
00782 }
00783
00784 if(ClassName == "CGridCellNumeric")
00785 {
00786
00787 COMTHROW(obj->put_IntAttrByName(CComBSTR(AttName),atol((m_Grid.GetItemText(RowNum,ColNum)))));
00788 }
00789
00790 if(ClassName == "CGridCellDouble")
00791 {
00792
00793 COMTHROW(obj->put_FloatAttrByName(CComBSTR(AttName),atof((m_Grid.GetItemText(RowNum,ColNum)))));
00794 }
00795
00796 if(ClassName == "CGridCellMultiLine")
00797 {
00798 CString outstring = m_Grid.GetItemText(RowNum,ColNum);
00799 outstring.Replace("\r\n","\n");
00800
00801 COMTHROW(obj->put_StrAttrByName(CComBSTR(AttName),CComBSTR(outstring)));
00802 }
00803
00804 if(ClassName == "CGridCell")
00805 {
00806
00807 COMTHROW(obj->put_StrAttrByName(CComBSTR(AttName),CComBSTR(m_Grid.GetItemText(RowNum,ColNum))));
00808 }
00809
00810
00811 }
00812 }
00813
00814
00815 void CGridDlg::OnGridStartSelChange(NMHDR *pNotifyStruct, LRESULT* )
00816 {
00817
00818
00819
00820 }
00821
00822
00823 void CGridDlg::OnGridEndSelChange(NMHDR *pNotifyStruct, LRESULT* )
00824 {
00825
00826
00827
00828 }
00829
00830
00831 void CGridDlg::OnGridBeginDrag(NMHDR *pNotifyStruct, LRESULT* )
00832 {
00833
00834
00835 }
00836
00837 void CGridDlg::OnGridDblClick(NMHDR *pNotifyStruct, LRESULT* )
00838 {
00839
00840
00841 }
00842
00843 void CGridDlg::OnGridClick(NMHDR *pNotifyStruct, LRESULT* )
00844 {
00845
00846 NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct;
00847
00848 if(pItem->iRow == 0)
00849 {
00850 int MaxRows = m_Grid.GetRowCount();
00851 int MaxCols = m_Grid.GetColumnCount();
00852 for (int i=1; i<MaxRows; i++)
00853 {
00854 for (int j=1; j<MaxCols; j++)
00855 {
00856 if(i%2==0)
00857 m_Grid.GetCell(i,j)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
00858 else
00859 m_Grid.GetCell(i,j)->SetBackClr(RGB(0xFF, 0xFF, 0xFF));
00860 }
00861
00862 }
00863 Invalidate();
00864 }
00865
00866
00867
00868 }
00869
00870
00871
00872
00873 void CGridDlg::BuildExtendedName(IMgaFCO *named, CString &extName)
00874 {
00875
00876 if (named != NULL)
00877 {
00878 CComPtr<IMgaModel> parent;
00879 COMTHROW( named->get_ParentModel(&parent));
00880 if (parent != NULL)
00881 {
00882 BuildExtendedName(parent, extName);
00883 extName += " : ";
00884 }
00885 else
00886 {
00887 CComPtr<IMgaFolder> parentFolder = NULL;
00888 COMTHROW( named->get_ParentFolder(&parentFolder));
00889 BuildExtendedName(parentFolder, extName);
00890 extName += " : ";
00891 }
00892 CBstr bstr;
00893 COMTHROW( named->get_Name(bstr));
00894 extName += bstr;
00895 }
00896
00897 }
00898
00899
00900 void CGridDlg::BuildExtendedName(IMgaFolder *named, CString &extName)
00901 {
00902 if (named != NULL)
00903 {
00904 CComPtr<IMgaFolder> parent;
00905 COMTHROW( named->get_ParentFolder(&parent));
00906 if (parent != NULL)
00907 {
00908 BuildExtendedName(parent, extName);
00909 extName += " : ";
00910 }
00911 CBstr bstr;
00912 COMTHROW( named->get_Name(bstr));
00913 extName += bstr;
00914 }
00915 }
00916
00917 void CGridDlg::OnSize(UINT nType, int cx, int cy)
00918 {
00919 if(!m_bInited)
00920 {
00921 return;
00922 }
00923
00924 if(!(::IsWindow(m_hWnd)))
00925 return;
00926 CDialog::OnSize(nType, cx, cy);
00927
00928 if (cx <= 1 || cy <= 1 )
00929 return;
00930
00931 CSize Translate(cx - m_OldSize.cx, cy - m_OldSize.cy);
00932
00933
00934
00935 CRect rect;
00936 m_Grid.GetWindowRect(rect);
00937
00938 ScreenToClient(rect);
00939
00940 if ( ((rect.top >= 7 && Translate.cy > 0) || rect.Height() > 20) &&
00941 ((rect.left >= 7 && Translate.cx > 0) || rect.Width() > 20) )
00942 m_Grid.MoveWindow(rect.left, rect.top,
00943 rect.Width()+Translate.cx,
00944 rect.Height()+Translate.cy, FALSE);
00945 else
00946 m_Grid.MoveWindow(rect.left+Translate.cx, rect.top+Translate.cy,
00947 rect.Width(), rect.Height(), FALSE);
00948
00949
00950
00951 MoveWndDown(&m_btnOK, Translate.cy);
00952
00953 MoveWndDown(&m_btnCANCEL, Translate.cy);
00954
00955 MoveWndDown(&m_btnDisp, Translate.cy);
00956
00957 MoveWndDown(&m_btnAllKinds, Translate.cy);
00958
00959 MoveWndDown(&m_btnAllTypes, Translate.cy);
00960
00961 MoveWndDown(&m_btnAtom, Translate.cy);
00962
00963 MoveWndDown(&m_btnModel, Translate.cy);
00964
00965 MoveWndDown(&m_btnRef, Translate.cy);
00966
00967 MoveWndDown(&m_btnCon, Translate.cy);
00968
00969 MoveWndDown(&m_btnSet, Translate.cy);
00970
00971 MoveWndDown(&m_stcKind, Translate.cy);
00972
00973 MoveWndDown(&m_stcType, Translate.cy);
00974
00975 MoveWndDown(&m_stcHelp, Translate.cy);
00976
00977 MoveWndDown(&m_lstKind, Translate.cy);
00978
00979 MoveWndDown(&m_stcSelect, Translate.cy);
00980
00981 MoveWndDown(&m_stcFilters, Translate.cy);
00982
00983 Invalidate();
00984
00985 m_OldSize = CSize(cx,cy);
00986
00987
00988
00989 }
00990
00991 void CGridDlg::MoveWndDown(CWnd *wnd, int offset)
00992 {
00993 CRect rect;
00994 wnd->GetWindowRect(rect);
00995 ScreenToClient(rect);
00996 wnd->MoveWindow(rect.left, rect.top+offset, rect.Width(), rect.Height(), FALSE);
00997 }
00998
00999 void CGridDlg::OnRecursivelyShowItems()
01000 {
01001 ShowItemsRecursively();
01002 }
01003
01004
01005 BOOL CGridDlg::GetMultiLine(CComPtr<IMgaMetaAttribute> p_Meta)
01006 {
01007
01008 int multiline;
01009 CComBSTR attrPref;
01010 CComBSTR attrPrefPath = "multiLine";
01011 COMTHROW(p_Meta->get_RegistryValue(attrPrefPath, &attrPref));
01012 CString lines(attrPref);
01013 multiline = atoi(lines);
01014 return multiline > 1;
01015 }
01016
01017 void CGridDlg::OnButtonDisplay()
01018 {
01019 if(CWnd::UpdateData(TRUE))
01020 {
01021
01022 int nCount = m_lstKind.GetSelCount();
01023 CArray<int,int> aryLstKindSel;
01024
01025 aryLstKindSel.SetSize(nCount);
01026 m_lstKind.GetSelItems(nCount, aryLstKindSel.GetData());
01027
01028 CString m_kindsFiltered;
01029
01030 if(m_chkAllKinds)
01031 {
01032 m_kindsFiltered = "";
01033 }
01034 else
01035 {
01036 for(int i=0; i<nCount; i++)
01037 {
01038 CString tmp;
01039 m_lstKind.GetText(aryLstKindSel.GetAt(i),tmp);
01040 m_kindsFiltered = m_kindsFiltered + tmp + " ";
01041 }
01042 }
01043
01044 CString m_ObjType = "";
01045
01046 if(m_chkAllTypes)
01047 {
01048 m_ObjType = "";
01049 }
01050 else
01051 {
01052 if(m_chkAtom)
01053 m_ObjType = m_ObjType + "OBJTYPE_ATOM";
01054 if(m_chkModel)
01055 m_ObjType = m_ObjType + " " + "OBJTYPE_MODEL";
01056 if(m_chkRef)
01057 m_ObjType = m_ObjType + " " + "OBJTYPE_REFERENCE";
01058 if(m_chkSet)
01059 m_ObjType = m_ObjType + " " + "OBJTYPE_SET";
01060 if(m_chkCon)
01061 m_ObjType = m_ObjType + " " + "OBJTYPE_CONNECTION";
01062 }
01063
01064 m_Filter = NULL;
01065
01066 COMTHROW(m_Project->CreateFilter(&m_Filter));
01067 COMVERIFY(m_Filter->put_ObjType(CComBSTR(m_ObjType)));
01068 COMVERIFY(m_Filter->put_Kind(CComBSTR(m_kindsFiltered)));
01069
01070 m_FCOs = NULL;
01071
01072 COMVERIFY(m_Project->AllFCOs(m_Filter, &m_FCOs));
01073
01074
01075 InitGrid();
01076 }
01077 }
01078
01079 void CGridDlg::OnCheckAllKinds()
01080 {
01081 CWnd::UpdateData(TRUE);
01082 if(m_chkAllKinds)
01083 {
01084 m_lstKind.EnableWindow(FALSE);
01085 }
01086 else
01087 {
01088 m_lstKind.EnableWindow(TRUE);
01089 }
01090
01091 }
01092
01093 void CGridDlg::OnChkAllTypes()
01094 {
01095 CWnd::UpdateData(TRUE);
01096 if(m_chkAllTypes)
01097 {
01098 m_btnAtom.EnableWindow(FALSE);
01099 m_btnModel.EnableWindow(FALSE);
01100 m_btnRef.EnableWindow(FALSE);
01101 m_btnSet.EnableWindow(FALSE);
01102 m_btnCon.EnableWindow(FALSE);
01103 }
01104 else
01105 {
01106 m_btnAtom.EnableWindow(TRUE);
01107 m_btnModel.EnableWindow(TRUE);
01108 m_btnRef.EnableWindow(TRUE);
01109 m_btnSet.EnableWindow(TRUE);
01110 m_btnCon.EnableWindow(TRUE);
01111 }
01112 m_lstKind.ResetContent();
01113 GetMetaObjectNames(m_rootMetaFolder);
01114
01115 }
01116
01117
01118
01119 void CGridDlg::OnChkAtom()
01120 {
01121 CWnd::UpdateData(TRUE);
01122 m_lstKind.ResetContent();
01123 GetMetaObjectNames(m_rootMetaFolder);
01124
01125 }
01126
01127 void CGridDlg::OnChkCon()
01128 {
01129 CWnd::UpdateData(TRUE);
01130 m_lstKind.ResetContent();
01131 GetMetaObjectNames(m_rootMetaFolder);
01132
01133 }
01134
01135 void CGridDlg::OnChkModel()
01136 {
01137 CWnd::UpdateData(TRUE);
01138 m_lstKind.ResetContent();
01139 GetMetaObjectNames(m_rootMetaFolder);
01140
01141 }
01142
01143 void CGridDlg::OnChkRef()
01144 {
01145 CWnd::UpdateData(TRUE);
01146 m_lstKind.ResetContent();
01147 GetMetaObjectNames(m_rootMetaFolder);
01148
01149 }
01150
01151 void CGridDlg::OnChkSet()
01152 {
01153 CWnd::UpdateData(TRUE);
01154 m_lstKind.ResetContent();
01155 GetMetaObjectNames(m_rootMetaFolder);
01156
01157 }
01158
01159