]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - tools/src/tools/configtool/common/win32/RulesView.cpp
Initial revision
[karo-tx-redboot.git] / tools / src / tools / configtool / common / win32 / RulesView.cpp
diff --git a/tools/src/tools/configtool/common/win32/RulesView.cpp b/tools/src/tools/configtool/common/win32/RulesView.cpp
new file mode 100644 (file)
index 0000000..2038b65
--- /dev/null
@@ -0,0 +1,236 @@
+//####COPYRIGHTBEGIN####
+//                                                                          
+// ----------------------------------------------------------------------------
+// Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
+//
+// This program is part of the eCos host tools.
+//
+// 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.
+// 
+// This program is distributed in the hope that it will be useful, but WITHOUT 
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
+// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for 
+// more details.
+// 
+// You should have received a copy of the GNU General Public License along with
+// this program; if not, write to the Free Software Foundation, Inc., 
+// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+//
+// ----------------------------------------------------------------------------
+//                                                                          
+//####COPYRIGHTEND####
+// TestViewView.cpp : implementation of the CRulesView class
+//
+
+#include "stdafx.h"
+#ifndef PLUGIN
+#include "BCMenu.h"
+#endif
+#include "ConfigTool.h"
+#include "ConfigToolDoc.h"
+#include "ControlView.h"
+#include "CTUtils.h"
+#include "resource.h"
+#include "RulesList.h"
+#include "RulesView.h"
+
+#ifdef _DEBUG
+#define new DEBUG_NEW
+#undef THIS_FILE
+static char THIS_FILE[] = __FILE__;
+#endif
+
+/////////////////////////////////////////////////////////////////////////////
+// CRulesView
+
+IMPLEMENT_DYNCREATE(CRulesView, CView)
+
+BEGIN_MESSAGE_MAP(CRulesView, CView)
+       //{{AFX_MSG_MAP(CRulesView)
+       ON_WM_CREATE()
+       ON_WM_SIZE()
+       ON_WM_CONTEXTMENU()
+  ON_COMMAND(ID_LOCATE,OnLocate)
+  ON_COMMAND(ID_RESOLVE,OnResolve)
+  ON_COMMAND(ID_DISABLE_CONFLICT, OnDisable)
+  ON_COMMAND(ID_ENABLE_CONFLICT, OnEnable)
+       ON_WM_HELPINFO()
+       //}}AFX_MSG_MAP
+END_MESSAGE_MAP()
+
+/////////////////////////////////////////////////////////////////////////////
+// CRulesView construction/destruction
+
+CRulesView::CRulesView():
+  m_nContextItem(-1)
+{
+  CConfigTool::SetRulesView(this);
+}
+
+CRulesView::~CRulesView()
+{
+  CConfigTool::SetRulesView(0);
+}
+
+BOOL CRulesView::PreCreateWindow(CREATESTRUCT& cs)
+{
+       // TODO: Modify the Window class or styles here by modifying
+       //  the CREATESTRUCT cs
+
+       return CView::PreCreateWindow(cs);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CRulesView drawing
+
+void CRulesView::OnDraw(CDC* pDC)
+{
+  UNUSED_ALWAYS(pDC);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// CRulesView diagnostics
+
+#ifdef _DEBUG
+void CRulesView::AssertValid() const
+{
+       CView::AssertValid();
+}
+
+void CRulesView::Dump(CDumpContext& dc) const
+{
+       CView::Dump(dc);
+}
+
+#endif //_DEBUG
+
+/////////////////////////////////////////////////////////////////////////////
+// CRulesView message handlers
+
+int CRulesView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
+{
+       if (CView::OnCreate(lpCreateStruct) == -1)
+               return -1;
+       CRect rect;
+  GetClientRect(rect);
+  m_List.Create(WS_CHILD|WS_VISIBLE,rect,this,1);
+
+       return 0;
+}
+
+void CRulesView::OnSize(UINT nType, int cx, int cy) 
+{
+       CView::OnSize(nType, cx, cy);
+       CRect rect;
+  GetClientRect(rect);
+  m_List.MoveWindow(rect);
+}
+
+void CRulesView::FillRules() 
+{
+  CdlConfiguration CdlConfig = CConfigTool::GetConfigToolDoc()->GetCdlConfig ();
+  if (CdlConfig) { // if configuration information
+    int nCount=0;
+    bool bRefill=false;
+    CMapPtrToWord arMap;
+    for(int i=0;i<m_List.GetItemCount();i++){
+      arMap.SetAt((void *)m_List.GetItemData(i),(WORD)i);
+    }
+
+    WORD w;
+    std::list<CdlConflict>::const_iterator conf_i;
+    
+    const std::list<CdlConflict>& conflicts=CdlConfig->get_all_conflicts();  
+    for (conf_i = conflicts.begin (); conf_i != conflicts.end (); conf_i++) { // for each conflict
+      nCount++;
+      if(!arMap.Lookup(*conf_i,w)){
+        bRefill=true;
+        break;
+      }
+    }
+    //for (conf_i = CdlConfig->get_structural_conflicts().begin (); conf_i != CdlConfig->get_structural_conflicts().end (); conf_i++) { // for each conflict
+    //  nCount++;
+    //  if(!arMap.Lookup(*conf_i,w)){
+    //    bRefill=true;
+    //    break;
+    //  }
+    //}
+    if(bRefill || nCount!=m_List.GetItemCount()){
+      m_List.DeleteAllItems();
+      //m_List.AddConflicts(CdlConfig->get_structural_conflicts());
+      m_List.AddConflicts(CdlConfig->get_all_conflicts());
+    }
+  }
+}
+
+void CRulesView::OnContextMenu(CWnd*, CPoint pt) 
+{
+  ScreenToClient(&pt);
+  m_nContextItem=m_List.HitTest(pt,NULL);
+  LVHITTESTINFO info;
+  info.pt=pt;
+  m_List.SubItemHitTest(&info);
+  m_nContextRow=info.iSubItem;
+  if(-1!=m_nContextItem){
+    m_List.SetItemState(m_nContextItem,LVIS_SELECTED,LVIS_SELECTED);
+       Menu menu;
+    menu.CreatePopupMenu();
+    /*
+    FIXME: Not yet implemented in CDL
+    CdlConflict conflict=(CdlConflict)m_List.GetItemData (m_nContextItem);
+    if(conflict->is_enabled()){
+      menu.AppendMenu(MF_STRING,ID_DISABLE_CONFLICT,_T("&Disable..."));
+    } else {
+      menu.AppendMenu(MF_STRING,ID_ENABLE_CONFLICT,_T("&Enable..."));
+    }
+    */
+    menu.AppendMenu(1==m_List.GetSelectedCount() && m_List.AssociatedItem(m_nContextItem,m_nContextRow)?MF_STRING:(MF_STRING|MF_GRAYED),ID_LOCATE,_T("&Locate"));
+    menu.AppendMenu(m_List.AssociatedItem(m_nContextItem,m_nContextRow)?MF_STRING:(MF_STRING|MF_GRAYED),ID_RESOLVE,_T("&Resolve"));
+
+    ClientToScreen(&pt);
+    menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, pt.x,pt.y,this);
+  }
+}
+
+void CRulesView::OnDisable()
+{
+  CdlConflict conflict=(CdlConflict)m_List.GetItemData (m_nContextItem);
+  if(IDYES==CUtils::MessageBoxFT(MB_YESNO,_T("Are you sure you wish to disable this conflict?"))){
+    conflict->disable("");
+  }
+}
+
+void CRulesView::OnEnable()
+{
+  CdlConflict conflict=(CdlConflict)m_List.GetItemData (m_nContextItem);
+  if(IDYES==CUtils::MessageBoxF(_T("Are you sure you wish to enable this conflict?"))){
+    conflict->enable();
+  }
+}
+
+void CRulesView::OnLocate()
+{
+  CConfigItem *pItem=m_List.AssociatedItem(m_nContextItem,m_nContextRow);
+  if (pItem) {
+    CConfigTool::GetControlView()->SelectItem(pItem);
+  }
+}
+
+void CRulesView::OnResolve()
+{
+  CConfigToolDoc *pDoc=CConfigTool::GetConfigToolDoc();
+  CPtrArray arConflictsOfInterest;
+  for(POSITION pos = m_List.GetFirstSelectedItemPosition();pos;){
+    int nItem = m_List.GetNextSelectedItem(pos);
+    arConflictsOfInterest.Add((void *)m_List.GetItemData(nItem));
+  }
+  pDoc->ResolveGlobalConflicts(&arConflictsOfInterest);
+}
+
+BOOL CRulesView::OnHelpInfo(HELPINFO*) 
+{
+  return CConfigTool::GetConfigToolDoc()->ShowURL(CUtils::LoadString(IDS_RULES_VIEW_HELP));    
+}