- Initial work on maps
authorVictor Kirhenshtein <victor@netxms.org>
Mon, 27 Mar 2006 21:46:19 +0000 (21:46 +0000)
committerVictor Kirhenshtein <victor@netxms.org>
Mon, 27 Mar 2006 21:46:19 +0000 (21:46 +0000)
- Other minor changes

29 files changed:
.gitattributes
doc/internal/db_format_change.txt
include/netxms_maps.h [new file with mode: 0644]
include/netxmsdb.h
netxms.dsw
sql/dbinit.in
sql/schema.in
sql/setup.in
src/console/win32/MapFrame.cpp
src/console/win32/MapFrame.h
src/console/win32/MapView.cpp
src/console/win32/MapView.h
src/console/win32/ViewEditor.cpp
src/console/win32/ViewEditor.h
src/console/win32/nxcon.clw
src/console/win32/nxcon.dsp
src/console/win32/nxcon.rc
src/console/win32/resource.h
src/libnetxms/main.cpp
src/libnxcl/libnxcl.dsp
src/libnxcl/main.cpp
src/libnxmap/libnxmap.dsp [copied from src/libnxcl/libnxcl.dsp with 68% similarity]
src/libnxmap/libnxmap.dsw [new file with mode: 0644]
src/libnxmap/libnxmap.h [copied from include/netxmsdb.h with 73% similarity]
src/libnxmap/main.cpp [copied from include/netxmsdb.h with 66% similarity]
src/libnxmap/map.cpp [new file with mode: 0644]
src/libnxmap/submap.cpp [new file with mode: 0644]
src/libnxsnmp/main.cpp
src/server/core/hk.cpp

index c8aa789..9c7d7cf 100644 (file)
@@ -182,6 +182,7 @@ include/config-netware.h -text
 include/getopt.h -text
 include/netxms-regex.h -text
 include/netxms-version.h -text
+include/netxms_maps.h -text
 include/netxmsdb.h -text
 include/nms_agent.h -text
 include/nms_common.h -text
@@ -888,6 +889,12 @@ src/libnxcl/server.cpp -text
 src/libnxcl/session.cpp -text
 src/libnxcl/snmptrap.cpp -text
 src/libnxcl/users.cpp -text
+src/libnxmap/libnxmap.dsp -text
+src/libnxmap/libnxmap.dsw -text
+src/libnxmap/libnxmap.h -text
+src/libnxmap/main.cpp -text
+src/libnxmap/map.cpp -text
+src/libnxmap/submap.cpp -text
 src/libnxsl/Makefile.am -text
 src/libnxsl/class.cpp -text
 src/libnxsl/compiler.cpp -text
index 97ef445..95fc2d4 100644 (file)
@@ -1,4 +1,11 @@
 *************
+* 38 ==> 39 *
+*************
+
+- Added configuration parameter "DisableVacuum"
+
+
+*************
 * 37 ==> 38 *
 *************
 
diff --git a/include/netxms_maps.h b/include/netxms_maps.h
new file mode 100644 (file)
index 0000000..6cfdff5
--- /dev/null
@@ -0,0 +1,160 @@
+/* 
+** NetXMS - Network Management System
+** Copyright (C) 2003, 2004, 2005, 2006 Victor Kirhenshtein
+**
+** 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: netxms_maps.h
+**
+**/
+
+#ifndef _netxms_maps_h_
+#define _netxms_maps_h_
+
+#ifdef _WIN32
+#ifdef LIBNXMAP_EXPORTS
+#define LIBNXMAP_EXPORTABLE __declspec(dllexport)
+#else
+#define LIBNXMAP_EXPORTABLE __declspec(dllimport)
+#endif
+#else    /* _WIN32 */
+#define LIBNXMAP_EXPORTABLE
+#endif
+
+
+//
+// Constants
+//
+
+#define MAP_OBJECT_SIZE_X     40
+#define MAP_OBJECT_SIZE_Y     40
+#define MAP_OBJECT_INTERVAL   30
+#define MAP_TEXT_BOX_HEIGHT   20
+#define MAP_TOP_MARGIN        10
+#define MAP_LEFT_MARGIN       15
+
+
+//
+// Submap attributes
+//
+
+#define SUBMAP_ATTR_LAYOUT_COMPLETED      0x00010000
+
+
+//
+// Object position structure
+//
+
+struct OBJPOS
+{
+   DWORD dwId;
+   LONG x; 
+   LONG y; 
+};
+
+
+//
+// Link between objects
+//
+
+struct OBJLINK
+{
+   DWORD dwId1;
+   DWORD dwId2;
+};
+
+
+//
+// Access list entry
+//
+
+struct MAP_ACL_ENTRY
+{
+   DWORD dwUserId;
+   DWORD dwAccess;
+};
+
+
+//
+// Submap class
+//
+
+class LIBNXMAP_EXPORTABLE nxSubmap
+{
+protected:
+   DWORD m_dwId;
+   DWORD m_dwAttr;
+   DWORD m_dwPosListSize;
+   OBJPOS *m_pPosList;
+
+   void CommonInit(void);
+
+public:
+   nxSubmap();
+   nxSubmap(DWORD dwObjectId);
+   nxSubmap(CSCPMessage *pMsg);
+   virtual ~nxSubmap();
+
+   DWORD Id(void) { return m_dwId; }
+
+   void CreateMessage(CSCPMessage *pMsg);
+   void ModifyFromMessage(CSCPMessage *pMsg);
+
+   BOOL IsLayoutCompleted(void) { return (m_dwAttr & SUBMAP_ATTR_LAYOUT_COMPLETED) ? TRUE : FALSE; }
+   void DoLayout(DWORD dwNumObjects, DWORD *pdwObjectList,
+                 DWORD dwNumLinks, OBJLINK *pLinkList,
+                 int nIdealX, int nIdealY);
+   POINT GetObjectPosition(DWORD dwObjectId);
+   void SetObjectPosition(DWORD dwObjectId, int x, int y);
+};
+
+
+//
+// Map class
+//
+
+class LIBNXMAP_EXPORTABLE nxMap
+{
+protected:
+   TCHAR *m_pszName;
+   TCHAR *m_pszDescription;
+   DWORD m_dwObjectId;
+   DWORD m_dwNumSubmaps;
+   nxSubmap **m_ppSubmaps;
+   DWORD m_dwACLSize;
+   MAP_ACL_ENTRY *m_pACL;
+   MUTEX m_mutex;
+
+   void CommonInit(void);
+   void Lock(void) { MutexLock(m_mutex, INFINITE); }
+   void Unlock(void) { MutexUnlock(m_mutex); }
+
+public:
+   nxMap();
+   nxMap(DWORD dwObjectId, TCHAR *pszName, TCHAR *pszDescription);
+   nxMap(CSCPMessage *pMsg);
+   virtual ~nxMap();
+
+   DWORD ObjectId(void) { return m_dwObjectId; }
+
+   DWORD GetSubmapCount(void) { return m_dwNumSubmaps; }
+   nxSubmap *GetSubmap(DWORD dwObjectId);
+   nxSubmap *GetSubmapByIndex(DWORD dwIndex) { return dwIndex < m_dwNumSubmaps ? m_ppSubmaps[dwIndex] : NULL; }
+
+   void CreateMessage(CSCPMessage *pMsg);
+   void ModifyFromMessage(CSCPMessage *pMsg);
+};
+
+#endif
index 9013c32..3769d6f 100644 (file)
@@ -23,6 +23,6 @@
 #ifndef _netxms_db_h
 #define _netxms_db_h
 
-#define DB_FORMAT_VERSION      38
+#define DB_FORMAT_VERSION      39
 
 #endif
index 68546ca..8483ee1 100644 (file)
@@ -63,6 +63,24 @@ Package=<4>
 
 ###############################################################################
 
+Project: "libnxmap"=.\src\libnxmap\libnxmap.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+    Begin Project Dependency
+    Project_Dep_Name libnetxms
+    End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libnxcscp
+    End Project Dependency
+}}}
+
+###############################################################################
+
 Project: "libnxsl"=.\src\libnxsl\libnxsl.dsp - Package Owner=<4>
 
 Package=<5>
@@ -293,6 +311,9 @@ Package=<4>
     Begin Project Dependency
     Project_Dep_Name nxuilib
     End Project Dependency
+    Begin Project Dependency
+    Project_Dep_Name libnxmap
+    End Project Dependency
 }}}
 
 ###############################################################################
index e3ee4d3..2272e70 100644 (file)
@@ -81,6 +81,7 @@ BEGIN TRANSACTION;
 #include "traps.in"
 #include "objtools.in"
 #include "scripts.in"
+#include "maps.in"
 
 // End transaction
 #if defined(DB_POSTGRESQL) || defined(DB_SQLITE)
index db587b7..0899714 100644 (file)
@@ -778,65 +778,42 @@ CREATE INDEX idx_snmp_trap_log_trap_timestamp ON snmp_trap_log(trap_timestamp);
 
 
 /*
-** Log processing policy
+** Network maps
 */
 
-/*
-CREATE TABLE lpp
-(
-       lpp_id integer not null,
-       lpp_name varchar(63) not null,
-       lpp_version integer not null,
-       lpp_flags integer not null,
-       PRIMARY KEY(lpp_id)
-) TABLE_TYPE;
-*/
-
-
-/*
-** Nodes associated with log processing policy
-*/
-
-/*
-CREATE TABLE lpp_associations
+CREATE TABLE network_maps
 (
-       lpp_id integer not null,
-       node_id integer not null,
-       log_file varchar(255) not null
+       map_id integer not null,
+       map_name varchar(255) not null,
+       description SQL_TEXT not null,
+       root_object_id integer not null,
+       PRIMARY KEY(map_id)
 ) TABLE_TYPE;
-*/
 
 
 /*
-** Rulesets for log processing policies
+** Submaps of network maps
 */
 
-/*
-CREATE TABLE lpp_rulesets
+CREATE TABLE submaps
 (
-       ruleset_id integer not null,
-       ruleset_name varchar(63),
-       PRIMARY KEY(ruleset_id)
+       map_id integer not null,
+       submap_id integer not null,     // Equal to object id
+       attributes integer not null,    
+       PRIMARY KEY(map_id,submap_id)
 ) TABLE_TYPE;
-*/
 
 
 /*
-** Matching rules for log processing policies
+** Object positioning on submap
 */
 
-/*
-CREATE TABLE lpp_rules
+CREATE TABLE submap_object_positions
 (
-       lpp_id integer not null,
-       rule_number integer not null,
-       ruleset_id integer not null,    // 0 - matching rule, >0 - ruleset id
-       msg_id_start integer not null,
-       msg_id_end integer not null,
-       severity integer not null,
-       source_name varchar(255) not null,
-       msg_text_regexp varchar(255) not null,
-       event_code integer not null,
-       PRIMARY KEY(lpp_id,rule_number)
+       map_id integer not null,
+       submap_id integer not null,
+       object_id integer not null,
+       x integer not null,
+       y integer not null,
+       PRIMARY KEY(map_id,submap_id)
 ) TABLE_TYPE;
-*/
index af2401f..20d26f9 100644 (file)
@@ -122,6 +122,8 @@ INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('DiscoveryFilter','none',1,0);
 INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
        VALUES ('LogAllSNMPTraps','0',1,1);
+INSERT INTO config (var_name,var_value,is_visible,need_server_restart)
+       VALUES ('DisableVacuum','0',1,0);
 
 
 /*
index c972cb3..b67cfb1 100644 (file)
@@ -18,14 +18,10 @@ IMPLEMENT_DYNCREATE(CMapFrame, CMDIChildWnd)
 
 CMapFrame::CMapFrame()
 {
-   m_pRootObject = NULL;
-   m_pImageList = NULL;
-   m_dwHistoryPos = 0;
 }
 
 CMapFrame::~CMapFrame()
 {
-   delete m_pImageList;
 }
 
 
@@ -35,10 +31,7 @@ BEGIN_MESSAGE_MAP(CMapFrame, CMDIChildWnd)
        ON_WM_SIZE()
        ON_WM_SETFOCUS()
        ON_COMMAND(ID_VIEW_REFRESH, OnViewRefresh)
-       ON_COMMAND(ID_OBJECT_OPEN, OnObjectOpen)
-       ON_COMMAND(ID_OBJECT_OPENPARENT, OnObjectOpenparent)
        //}}AFX_MSG_MAP
-       ON_NOTIFY(NM_DBLCLK, IDC_LIST_VIEW, OnListViewDblClk)
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
@@ -60,32 +53,31 @@ BOOL CMapFrame::PreCreateWindow(CREATESTRUCT& cs)
 int CMapFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
 {
    RECT rect;
-   int i;
+   static TBBUTTON tbButtons[] =
+   {
+      { 0, 0, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 },
+      { 1, 0, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0 }
+   };
 
        if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
                return -1;
        
+   EnableDocking(CBRS_ALIGN_ANY);
+
+   // Create toolbar
+   m_wndToolBar.CreateEx(this);
+   m_wndToolBar.LoadToolBar(IDT_MAP);
+   //FloatControlBar(&m_wndToolBar, TRUE, FALSE);
+/*   m_wndToolBar.Create(WS_CHILD | WS_VISIBLE | CCS_NODIVIDER | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | TBSTYLE_TRANSPARENT, rect, this, ID_TOOLBAR_CTRL);
+   m_wndToolBar.SetExtendedStyle(WS_EX_WINDOWEDGE);
+   m_wndToolBar.SetButtonSize(CSize(20, 20));
+   m_wndToolBar.LoadImages(IDB_HIST_SMALL_COLOR, HINST_COMMCTRL);
+   m_wndToolBar.AddButtons(2, tbButtons);*/
+
    // Create and initialize map view
    GetClientRect(&rect);
-   //m_wndMapView.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this, 0);
-   m_wndMapView.Create(WS_CHILD | WS_VISIBLE | LVS_ICON | LVS_SHOWSELALWAYS, rect, this, IDC_LIST_VIEW);
+   m_wndMapView.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, this, 0);
    
-   // Create image list
-   m_pImageList = new CImageList;
-   m_pImageList->Create(g_pObjectNormalImageList);
-   m_iStatusImageBase = m_pImageList->GetImageCount();
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_WARNING));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_MINOR));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_MAJOR));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_CRITICAL));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_UNKNOWN));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_UNMANAGED));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_DISABLED));
-   m_pImageList->Add(theApp.LoadIcon(IDI_OVL_STATUS_TESTING));
-   for(i = STATUS_WARNING; i <= STATUS_TESTING; i++)
-      m_pImageList->SetOverlayImage(m_iStatusImageBase + i - 1, i);
-   m_wndMapView.SetImageList(m_pImageList, LVSIL_NORMAL);
-
    PostMessage(WM_COMMAND, ID_VIEW_REFRESH, 0);
 
    return 0;
@@ -98,9 +90,12 @@ int CMapFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
 void CMapFrame::OnSize(UINT nType, int cx, int cy) 
 {
+   int nToolBarHeight;
+
        CMDIChildWnd::OnSize(nType, cx, cy);
-       
-   m_wndMapView.SetWindowPos(NULL, 0, 0, cx, cy, SWP_NOZORDER);        
+//   m_wndToolBar.AutoSize();
+   nToolBarHeight = GetWindowSize(&m_wndToolBar).cy;
+   m_wndMapView.SetWindowPos(NULL, 0, nToolBarHeight, cx, cy - nToolBarHeight, SWP_NOZORDER);  
 }
 
 
@@ -111,7 +106,6 @@ void CMapFrame::OnSize(UINT nType, int cx, int cy)
 void CMapFrame::OnSetFocus(CWnd* pOldWnd) 
 {
        CMDIChildWnd::OnSetFocus(pOldWnd);
-
    m_wndMapView.SetFocus();
 }
 
@@ -122,7 +116,8 @@ void CMapFrame::OnSetFocus(CWnd* pOldWnd)
 
 void CMapFrame::OnViewRefresh() 
 {
-   NXC_OBJECT *pObject;
+   m_wndMapView.SetMap(new nxMap(1, _T("Default"), _T("Default map")));
+/*   NXC_OBJECT *pObject;
    DWORD i;
    CString strFullString, strTitle;
 
@@ -163,100 +158,5 @@ void CMapFrame::OnViewRefresh()
       strTitle += "]";
    }
 
-   ::SetWindowText(m_hWnd, strTitle);
-}
-
-
-//
-// Add object to view
-//
-
-void CMapFrame::AddObjectToView(NXC_OBJECT *pObject)
-{
-   LVITEM item;
-
-   item.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE;
-   item.iItem = 0x7FFFFFFF;
-   item.iSubItem = 0;
-   item.pszText = pObject->szName;
-   item.iImage = GetObjectImageIndex(pObject);
-   item.lParam = (LPARAM)pObject;
-   item.stateMask = LVIS_OVERLAYMASK;
-   item.state = INDEXTOOVERLAYMASK(pObject->iStatus);
-   m_wndMapView.InsertItem(&item);
-}
-
-
-//
-// Handler for WM_NOTIFY::NM_DBLCLK from IDC_LIST_VIEW
-//
-
-void CMapFrame::OnListViewDblClk(LPNMITEMACTIVATE pNMHDR, LRESULT *pResult)
-{
-   PostMessage(WM_COMMAND, ID_OBJECT_OPEN, 0);
-}
-
-
-//
-// WM_COMMAND::ID_OBJECT_OPEN message handler
-//
-
-void CMapFrame::OnObjectOpen() 
-{
-   NXC_OBJECT *pObject;
-
-   pObject = GetSelectedObject();
-   if (pObject != NULL)
-   {
-      if (m_dwHistoryPos < OBJECT_HISTORY_SIZE)
-         m_pObjectHistory[m_dwHistoryPos++] = m_pRootObject;
-      m_pRootObject = pObject;
-      PostMessage(WM_COMMAND, ID_VIEW_REFRESH, 0);
-   }
-}
-
-
-//
-// WM_COMMAND::ID_OBJECT_OPENPARENT message handler
-//
-
-void CMapFrame::OnObjectOpenparent() 
-{
-   if (m_pRootObject != NULL)
-   {
-      if (m_dwHistoryPos > 0)
-      {
-         m_pRootObject = m_pObjectHistory[--m_dwHistoryPos];
-      }
-      else
-      {
-         if (m_pRootObject->dwNumParents > 0)
-         {
-            m_pRootObject = NXCFindObjectById(g_hSession, m_pRootObject->pdwParentList[0]);
-         }
-         else
-         {
-            m_pRootObject = NULL;
-         }
-      }
-      PostMessage(WM_COMMAND, ID_VIEW_REFRESH, 0);
-   }
-}
-
-
-//
-// Get currently selected object, if any
-//
-
-NXC_OBJECT *CMapFrame::GetSelectedObject()
-{
-   int iItem;
-   NXC_OBJECT *pObject = NULL;
-
-   if (m_wndMapView.GetSelectedCount() == 1)
-   {
-      iItem = m_wndMapView.GetSelectionMark();
-      pObject = (NXC_OBJECT *)m_wndMapView.GetItemData(iItem);
-   }
-   return pObject;
+   ::SetWindowText(m_hWnd, strTitle);*/
 }
index e8b7369..058e3f0 100644 (file)
@@ -8,7 +8,7 @@
 //
 
 #include "MapView.h"
-#include "..\..\..\INCLUDE\nxclapi.h"  // Added by ClassView
+#include "netxms_maps.h"
 
 #define OBJECT_HISTORY_SIZE      512
 
@@ -37,14 +37,8 @@ public:
 
 // Implementation
 protected:
-       int m_iStatusImageBase;
-       DWORD m_dwHistoryPos;
-       NXC_OBJECT *m_pObjectHistory[OBJECT_HISTORY_SIZE];
-       NXC_OBJECT *GetSelectedObject(void);
-       void AddObjectToView(NXC_OBJECT *pObject);
-       CImageList *m_pImageList;
-       NXC_OBJECT *m_pRootObject;
-       CListCtrl m_wndMapView;
+       CToolBar m_wndToolBar;
+       CMapView m_wndMapView;
        virtual ~CMapFrame();
 
        // Generated message map functions
@@ -53,10 +47,7 @@ protected:
        afx_msg void OnSize(UINT nType, int cx, int cy);
        afx_msg void OnSetFocus(CWnd* pOldWnd);
        afx_msg void OnViewRefresh();
-       afx_msg void OnObjectOpen();
-       afx_msg void OnObjectOpenparent();
        //}}AFX_MSG
-   afx_msg void OnListViewDblClk(LPNMITEMACTIVATE pNMHDR, LRESULT *pResult);
        DECLARE_MESSAGE_MAP()
 };
 
index af87382..5c781d0 100644 (file)
 static char THIS_FILE[] = __FILE__;
 #endif
 
+
+//
+// Static data
+//
+
+static SCALE_INFO m_scaleInfo[] =
+{
+   { -4, { 10, 10 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, -1, -1 },
+   { -2, { 20, 20 }, { 2, 2 }, { -2, 21 }, { 24, 9 }, 1, 1 },
+   { 0, { 40, 40 }, { 3, 3 }, { -10, 42 }, { 60, 18 }, 0, 0 }   // Neutral scale
+};
+
+
 /////////////////////////////////////////////////////////////////////////////
 // CMapView
 
 CMapView::CMapView()
 {
+   m_nScale = NEUTRAL_SCALE;
+   m_pMap = NULL;
+   m_pSubmap = NULL;
+   m_rgbBkColor = RGB(224, 224, 224);
 }
 
 CMapView::~CMapView()
@@ -23,8 +40,9 @@ CMapView::~CMapView()
 }
 
 
-BEGIN_MESSAGE_MAP(CMapView, CListCtrl)
+BEGIN_MESSAGE_MAP(CMapView, CWnd)
        //{{AFX_MSG_MAP(CMapView)
+       ON_WM_CREATE()
        ON_WM_PAINT()
        //}}AFX_MSG_MAP
 END_MESSAGE_MAP()
@@ -33,45 +51,231 @@ END_MESSAGE_MAP()
 /////////////////////////////////////////////////////////////////////////////
 // CMapView message handlers
 
+BOOL CMapView::PreCreateWindow(CREATESTRUCT& cs) 
+{
+   cs.style |= WS_HSCROLL | WS_VSCROLL;
+       return CWnd::PreCreateWindow(cs);
+}
 
 
+//
+// WM_CREATE message handler
+//
+
+int CMapView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
+{
+       if (CWnd::OnCreate(lpCreateStruct) == -1)
+               return -1;
+       
+   // Create fonts
+   m_fontList[0].CreateFont(-MulDiv(7, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 72),
+                            0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
+                            OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
+                            VARIABLE_PITCH | FF_DONTCARE, "MS Sans Serif");
+   m_fontList[1].CreateFont(-MulDiv(5, GetDeviceCaps(GetDC()->m_hDC, LOGPIXELSY), 72),
+                            0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET,
+                            OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY,
+                            VARIABLE_PITCH | FF_DONTCARE, "MS Sans Serif");
+       
+   // Disable scroll bars
+   SetScrollRange(SB_HORZ, 0, 0);
+   SetScrollRange(SB_VERT, 0, 0);
+
+   return 0;
+}
+
+
+//
+// WM_PAINT message handler
+//
+
 void CMapView::OnPaint() 
 {
-   int i, iNumItems;
-   POINT pt;
+       CPaintDC sdc(this);  // original device context for painting
+   CDC dc;              // In-memory dc
+   CBitmap *pOldBitmap;
+   RECT rect;
+
+   GetClientRect(&rect);
+   
+   // Move drawing from in-memory bitmap to screen
+   dc.CreateCompatibleDC(&sdc);
+   pOldBitmap = dc.SelectObject(&m_bmpMap);
+   sdc.BitBlt(0, 0, rect.right, rect.bottom, &dc, 0, 0, SRCCOPY);
+
+   // Cleanup
+   dc.SelectObject(pOldBitmap);
+   dc.DeleteDC();
+}
+
+
+//
+// Draw entire map on bitmap in memory
+//
+
+void CMapView::DrawOnBitmap()
+{
+   CDC *pdc, dc;           // Window dc and in-memory dc
+   CBitmap *pOldBitmap;
+   CBrush brush;
+   NXC_OBJECT *pObject;
    RECT rect;
-   LVITEM item;
-   TCHAR szBuffer[256];
-   CFont *pFont;
+   DWORD i;
+   CImageList *pImageList;
+   CFont *pOldFont;
+   
+   GetClientRect(&rect);
+
+   // Create compatible DC and bitmap for painting
+   pdc = GetDC();
+   dc.CreateCompatibleDC(pdc);
+   m_bmpMap.DeleteObject();
+   m_bmpMap.CreateCompatibleBitmap(pdc, rect.right, rect.bottom);
+   ReleaseDC(pdc);
+
+   // Initial DC setup
+   pOldBitmap = dc.SelectObject(&m_bmpMap);
+   dc.SetBkColor(m_rgbBkColor);
+   brush.CreateSolidBrush(m_rgbBkColor);
+   dc.FillRect(&rect, &brush);
+   if (m_scaleInfo[m_nScale].nFontIndex != -1)
+      pOldFont = dc.SelectObject(&m_fontList[m_scaleInfo[m_nScale].nFontIndex]);
+   else
+      pOldFont = NULL;
+
+   if (m_pSubmap != NULL)
+   {
+      // Get current object
+      pObject = NXCFindObjectById(g_hSession, m_pSubmap->Id());
+      if (pObject != NULL)
+      {
+         if (m_scaleInfo[m_nScale].nImageList == 0)
+            pImageList = g_pObjectNormalImageList;
+         else if (m_scaleInfo[m_nScale].nImageList == 1)
+            pImageList = g_pObjectSmallImageList;
+         else
+            pImageList = NULL;
+
+         for(i = 0; i < pObject->dwNumChilds; i++)
+            DrawObject(dc, pObject->pdwChildList[i], pImageList);
+      }
+      else
+      {
+         dc.TextOut(0, 0, _T("NULL object"), 11);
+      }
+   }
+   else
+   {
+      dc.TextOut(0, 0, _T("NULL submap"), 11);
+   }
+
+   // Cleanup
+   if (pOldFont != NULL)
+      dc.SelectObject(pOldFont);
+   dc.SelectObject(pOldBitmap);
+   //font.DeleteObject();
+   dc.DeleteDC();
+}
+
+
+//
+// Draw single object on map
+//
 
-   // Setup DC
-       CPaintDC dc(this); // device context for painting
-   pFont = dc.SelectObject(GetFont());
+void CMapView::DrawObject(CDC &dc, DWORD dwObjectId, CImageList *pImageList)
+{
+   NXC_OBJECT *pObject;
+   POINT pt, ptIcon;
+   RECT rect;
 
-   iNumItems = GetItemCount();
-   for(i = 0; i < iNumItems; i++)
+   pObject = NXCFindObjectById(g_hSession, dwObjectId);
+   if (pObject != NULL)
    {
-      GetItemPosition(i, &pt);
-      
-      item.iItem = i;
-      item.iSubItem = 0;
-      item.mask = LVIF_IMAGE | LVIF_PARAM | LVIF_TEXT | LVIF_STATE;
-      item.cchTextMax = 256;
-      item.pszText = szBuffer;
-      GetItem(&item);
-
-      // Draw icon
-      GetImageList(LVSIL_NORMAL)->Draw(&dc, item.iImage, pt, 
-             item.state & LVIS_SELECTED ? ILD_SELECTED : ILD_TRANSPARENT);
-      
-      // Draw text under icon
-      rect.left = pt.x - 16;
-      rect.right = pt.x + 48;
-      rect.top = pt.y + 32;
-      rect.bottom = rect.top + 32;
-      dc.DrawText(item.pszText, _tcslen(item.pszText), &rect, DT_CENTER | DT_WORDBREAK);
+      // Get and scale object's position
+      pt = m_pSubmap->GetObjectPosition(dwObjectId);
+      if (m_scaleInfo[m_nScale].nFactor > 0)
+      {
+         pt.x *= m_scaleInfo[m_nScale].nFactor;
+         pt.y *= m_scaleInfo[m_nScale].nFactor;
+      }
+      else if (m_scaleInfo[m_nScale].nFactor < 0)
+      {
+         pt.x /= -m_scaleInfo[m_nScale].nFactor;
+         pt.y /= -m_scaleInfo[m_nScale].nFactor;
+      }
+
+      // Draw background and icon
+      dc.FillSolidRect(pt.x, pt.y, m_scaleInfo[m_nScale].ptObjectSize.x, 
+                       m_scaleInfo[m_nScale].ptObjectSize.y,
+                       g_statusColorTable[pObject->iStatus]);
+      ptIcon.x = pt.x + m_scaleInfo[m_nScale].ptIconOffset.x;
+      ptIcon.y = pt.y + m_scaleInfo[m_nScale].ptIconOffset.y;
+      if (pImageList != NULL)
+      {
+         pImageList->Draw(&dc, GetObjectImageIndex(pObject),
+                          ptIcon, ILD_TRANSPARENT);
+      }
+
+      // Draw object name
+      if (m_scaleInfo[m_nScale].nFontIndex != -1)
+      {
+         rect.left = pt.x + m_scaleInfo[m_nScale].ptTextOffset.x;
+         rect.top = pt.y + m_scaleInfo[m_nScale].ptTextOffset.y;
+         rect.right = rect.left + m_scaleInfo[m_nScale].ptTextSize.x;
+         rect.bottom = rect.top + m_scaleInfo[m_nScale].ptTextSize.y;
+         dc.SetBkColor(m_rgbBkColor);
+         dc.DrawText(pObject->szName, -1, &rect,
+                     DT_END_ELLIPSIS | DT_NOPREFIX | DT_WORDBREAK | DT_CENTER);
+      }
    }
+}
+
+
+//
+// Set new map
+//
+
+void CMapView::SetMap(nxMap *pMap)
+{
+   delete m_pMap;
+   m_pMap = pMap;
+   m_pSubmap = m_pMap->GetSubmap(m_pMap->ObjectId());
+   if (!m_pSubmap->IsLayoutCompleted())
+      DoSubmapLayout();
+   Update();
+}
 
-   // Cleanup DC
-   dc.SelectObject(pFont);
+
+//
+// Repaint entire map
+//
+
+void CMapView::Update()
+{
+   DrawOnBitmap();
+   Invalidate(FALSE);
+}
+
+
+//
+// (Re)do current submap layout
+//
+
+void CMapView::DoSubmapLayout()
+{
+   NXC_OBJECT *pObject;
+   RECT rect;
+
+   pObject = NXCFindObjectById(g_hSession, m_pSubmap->Id());
+   if (pObject != NULL)
+   {
+      GetClientRect(&rect);
+      m_pSubmap->DoLayout(pObject->dwNumChilds, pObject->pdwChildList,
+                          0, NULL, rect.right, rect.bottom);
+   }
+   else
+   {
+      MessageBox(_T("Internal error: cannot find root object for the current submap"),
+                 _T("Error"), MB_OK | MB_ICONSTOP);
+   }
 }
index 4447948..0590c63 100644 (file)
@@ -1,17 +1,49 @@
 #if !defined(AFX_MAPVIEW_H__9082BB7F_2C80_4E6E_9FDB_A4D4039C2CB1__INCLUDED_)
 #define AFX_MAPVIEW_H__9082BB7F_2C80_4E6E_9FDB_A4D4039C2CB1__INCLUDED_
 
-#include "..\..\..\INCLUDE\nxclapi.h"  // Added by ClassView
 #if _MSC_VER > 1000
 #pragma once
 #endif // _MSC_VER > 1000
 // MapView.h : header file
 //
 
+#include <netxms_maps.h>
+
+#define NEUTRAL_SCALE   2
+
+
+//
+// Scale-dependent elements
+//
+
+struct SCALE_INFO
+{
+   int nFactor;
+   POINT ptObjectSize;
+   POINT ptIconOffset;
+   POINT ptTextOffset;
+   POINT ptTextSize;
+   int nImageList;
+   int nFontIndex;
+};
+
+
+//
+// Additional information about objects on map
+//
+
+struct OBJINFO
+{
+   DWORD dwObjectId;
+   RECT rcObject;
+   RECT rcText;
+};
+
+
 /////////////////////////////////////////////////////////////////////////////
 // CMapView window
 
-class CMapView : public CListCtrl
+class CMapView : public CWnd
 {
 // Construction
 public:
@@ -27,15 +59,28 @@ public:
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CMapView)
        protected:
+       virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
        //}}AFX_VIRTUAL
 
 // Implementation
 public:
+       void Update(void);
+       void SetMap(nxMap *pMap);
        virtual ~CMapView();
 
        // Generated message map functions
 protected:
+       CFont m_fontList[2];
+       int m_nScale;
+       void DoSubmapLayout(void);
+       COLORREF m_rgbBkColor;
+       void DrawObject(CDC &dc, DWORD dwObjectId, CImageList *pImageList);
+       void DrawOnBitmap(void);
+       CBitmap m_bmpMap;
+       nxSubmap *m_pSubmap;
+       nxMap *m_pMap;
        //{{AFX_MSG(CMapView)
+       afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
        afx_msg void OnPaint();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
index 62abecd..976c2f9 100644 (file)
@@ -56,7 +56,7 @@ int CViewEditor::OnCreate(LPCREATESTRUCT lpCreateStruct)
        if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
                return -1;
        
-       // TODO: Add your specialized creation code here
+   theApp.OnViewCreate(VIEW_BUILDER, this);
        
        return 0;
 }
@@ -68,10 +68,8 @@ int CViewEditor::OnCreate(LPCREATESTRUCT lpCreateStruct)
 
 void CViewEditor::OnDestroy() 
 {
+   theApp.OnViewDestroy(VIEW_BUILDER, this);
        CMDIChildWnd::OnDestroy();
-       
-       // TODO: Add your message handler code here
-       
 }
 
 
@@ -82,8 +80,35 @@ void CViewEditor::OnDestroy()
 void CViewEditor::OnPaint() 
 {
        CPaintDC dc(this); // device context for painting
+   RECT rect;
+
+   GetClientRect(&rect);
+
+ViewElement e;
+e.m_pos.x = 0;
+e.m_pos.y = 0;
+e.m_size.cx = 80;
+e.m_size.cy = 80;
+DrawElement(dc, rect, &e);
+}
 
-   dc.SetMapMode(MM_ISOTROPIC);
-   dc.SetWindowExt(100, 100);
-   dc.Rectangle(0, 0, 20, 20);
+
+//
+// Draw single view element
+//
+
+void CViewEditor::DrawElement(CDC &dc, RECT &clRect, ViewElement *pElement)
+{
+   CBrush brush, *pBrush;
+   RECT rect;
+
+   rect.left = clRect.right * pElement->m_pos.x / 100;
+   rect.top = clRect.bottom * pElement->m_pos.y / 100;
+   rect.right = clRect.right * (pElement->m_pos.x + pElement->m_size.cx) / 100;
+   rect.bottom = clRect.bottom * (pElement->m_pos.y + pElement->m_size.cy) / 100;
+
+   brush.CreateSolidBrush(RGB(0, 0, 200));
+   pBrush = dc.SelectObject(&brush);
+   dc.Rectangle(&rect);
+   dc.SelectObject(pBrush);
 }
index 21e81c0..86306cd 100644 (file)
@@ -7,6 +7,22 @@
 // ViewEditor.h : header file
 //
 
+
+//
+// View element
+//
+
+class ViewElement
+{
+public:
+   POINT m_pos;
+   SIZE m_size;
+
+   ViewElement() {};
+   ~ViewElement() {};
+};
+
+
 /////////////////////////////////////////////////////////////////////////////
 // CViewEditor frame
 
@@ -31,6 +47,7 @@ public:
 
 // Implementation
 protected:
+       void DrawElement(CDC &dc, RECT &clRect, ViewElement *pElement);
        virtual ~CViewEditor();
 
        // Generated message map functions
index b903ed7..88e5514 100644 (file)
@@ -15,10 +15,10 @@ Class4=CChildFrame
 Class7=CEventBrowser
 Class9=CMapView
 
-ResourceCount=136
-Resource1=IDD_SAVE_AGENT_CFG (English (U.S.))
+ResourceCount=137
+Resource1=IDD_OBJECT_VPNC_GENERAL (English (U.S.))
 Resource2=IDD_OBJECT_NODE_GENERAL
-Resource3=IDD_OBJECT_GENERAL (English (U.S.))
+Resource3=IDD_OBJECT_CAPS (English (U.S.))
 Resource4=IDD_SELECT_OBJECT
 Resource5=IDD_SELECT_ACTION
 Class2=CChildView
@@ -32,9 +32,9 @@ Resource7=IDD_NEW_USER
 Class12=CObjectBrowser
 Resource8=IDD_CREATE_CONTAINER
 Class13=CObjectPropDlg
-Resource9=IDD_GRAPH_PROP_SETTINGS (English (U.S.))
-Resource10=IDD_LASTVAL_PROP (English (U.S.))
-Resource11=IDD_CREATE_NODE (English (U.S.))
+Resource9=IDD_OBJECT_RELATIONS (English (U.S.))
+Resource10=IDD_GRAPH_PROP_SETTINGS (English (U.S.))
+Resource11=IDD_SELECT_ACTION (English (U.S.))
 Resource12=IDR_CTRLPANEL (English (U.S.))
 Resource13=IDR_EVENTS (English (U.S.))
 Resource14=IDR_MAPFRAME (English (U.S.))
@@ -42,17 +42,17 @@ Resource15=IDR_OBJECTS (English (U.S.))
 Resource16=IDD_DUMMY (English (U.S.))
 Class14=CEventEditor
 Class15=CEditEventDlg
-Resource17=IDD_CREATE_NETSRV (English (U.S.))
+Resource17=IDD_SELECT_AGENT_PARAM (English (U.S.))
 Class16=CDebugFrame
-Resource18=IDD_DCI_SCHEDULE (English (U.S.))
+Resource18=IDD_EDIT_IP_SUBNET (English (U.S.))
 Resource19=IDD_OBJECT_PROPERTIES (English (U.S.))
 Resource20=IDD_SELECT_EVENT
 Class17=CObjectPreview
-Resource21=IDA_AGENT_CFG_EDITOR (English (U.S.))
+Resource21=IDA_LAST_VALUES (English (U.S.))
 Class18=CToolBox
 Class19=CObjectInfoBox
 Class20=CObjectSearchBox
-Resource22=IDD_CHANGE_IP (English (U.S.))
+Resource22=IDD_OBJTOOL_OPTIONS (English (U.S.))
 Class21=CEditBox
 Class22=COPGeneral
 Class23=CNodePropsGeneral
@@ -61,14 +61,14 @@ Class24=CObjectPropCaps
 Class25=CObjectPropSheet
 Resource24=IDA_MDI_DEFAULT
 Class26=CRequestProcessingDlg
-Resource25=IDD_INPUT_BOX (English (U.S.))
+Resource25=IDD_SELECT_INTERNAL_ITEM (English (U.S.))
 Resource26=IDD_PROGRESS (English (U.S.))
 Resource27=IDD_EDIT_RULE_ALARM
-Resource28=IDD_DESKTOP_SAVE_AS (English (U.S.))
+Resource28=IDD_OBJECT_NODE_POLL (English (U.S.))
 Class27=CObjectPropsGeneral
-Resource29=IDD_MIB_BROWSER (English (U.S.))
+Resource29=IDD_DCI_THRESHOLDS (English (U.S.))
 Class28=CObjectPropsSecurity
-Resource30=IDD_GROUP_PROPERTIES (English (U.S.))
+Resource30=IDD_NEW_USER (English (U.S.))
 Resource31=IDD_SELECT_USER
 Resource32=IDD_OBJECT_SECURITY
 Class29=CUserSelectDlg
@@ -79,36 +79,36 @@ Class31=CNewUserDlg
 Resource35=IDD_THRESHOLD
 Resource36=IDA_EPP
 Class32=CUserPropDlg
-Resource37=IDD_OBJECT_CAPS (English (U.S.))
+Resource37=IDD_EDIT_EVENT (English (U.S.))
 Resource38=IDD_ABOUTBOX
 Class33=CGroupPropDlg
 Resource39=IDD_CP_GENERAL
 Resource40=IDA_TRAP_EDITOR
 Resource41=IDM_VIEW_SPECIFIC
-Resource42=IDD_EDIT_RULE_SEVERITY (English (U.S.))
+Resource42=IDD_SELECT_EVENT (English (U.S.))
 Class34=CPasswordChangeDlg
 Class35=CNodeSummary
 Class36=CNetSummaryFrame
 Class37=CDataCollectionEditor
-Resource43=IDA_OBJECT_TOOLS_EDITOR (English (U.S.))
+Resource43=IDA_AGENT_CFG_EDITOR (English (U.S.))
 Class38=CDCIPropPage
-Resource44=IDA_DC_EDITOR (English (U.S.))
+Resource44=IDA_SERVER_CFG_EDITOR (English (U.S.))
 Class39=CDCIDataView
-Resource45=IDD_OBJECT_PRESENTATION (English (U.S.))
+Resource45=IDD_EDIT_RULE_COMMENT (English (U.S.))
 Class40=CGraph
 Class41=CGraphFrame
 Class42=CDCIThresholdsPage
-Resource46=IDD_DCI_TRANSFORM (English (U.S.))
-Resource47=IDD_REQUEST_PROCESSING (English (U.S.))
+Resource46=IDD_CREATE_CONTAINER (English (U.S.))
+Resource47=IDD_OBJECT_NODE_GENERAL (English (U.S.))
 Resource48=IDM_CONTEXT
 Class43=CThresholdDlg
-Resource49=IDD_REMOVE_TEMPLATE
+Resource49=IDD_NEW_OBJECT_TOOL (English (U.S.))
 Resource50=IDD_EDIT_TRAP_ARG
 Class44=CMIBBrowserDlg
 Class45=CEventPolicyEditor
 Class46=CRuleList
 Class47=CRuleHeader
-Resource51=IDA_NETMAP (English (U.S.))
+Resource51=IDA_EPP (English (U.S.))
 Resource52=IDD_CREATE_NODE
 Class48=CObjectSelDlg
 Resource53=IDD_OBJECT_CAPS
@@ -117,22 +117,22 @@ Class49=CRuleCommentDlg
 Resource55=IDD_DCI_COLLECTION
 Class50=CEventSelDlg
 Resource56=IDD_DATA_QUERY
-Resource57=IDD_SELECT_OBJECT (English (U.S.))
+Resource57=IDD_THRESHOLD (English (U.S.))
 Resource58=IDD_CREATE_TG
-Resource59=IDA_TRAP_EDITOR (English (U.S.))
-Resource60=IDA_LAST_VALUES (English (U.S.))
+Resource59=IDA_EVENT_EDITOR (English (U.S.))
+Resource60=IDA_GRAPH (English (U.S.))
 Class51=CObjectPropsPresentation
-Resource61=IDD_CREATE_CONTAINER (English (U.S.))
+Resource61=IDD_ACTION_PROPERTIES (English (U.S.))
 Resource62=IDD_EDIT_RULE_COMMENT
 Class52=CRuleSeverityDlg
 Resource63=IDD_ACTION_PROPERTIES
 Class53=CRuleAlarmDlg
 Class54=CAlarmBrowser
-Resource64=IDD_OBJECT_NODE_GENERAL (English (U.S.))
+Resource64=IDD_ABOUTBOX (English (U.S.))
 Resource65=IDD_DCI_TRANSFORM
-Resource66=IDD_ABOUTBOX (English (U.S.))
-Resource67=IDD_OBJECT_VPNC_GENERAL (English (U.S.))
-Resource68=IDD_OBJECT_STATUS (English (U.S.))
+Resource66=IDA_OBJECT_TOOLS_EDITOR (English (U.S.))
+Resource67=IDD_EDIT_VARIABLE (English (U.S.))
+Resource68=IDD_SAVE_AGENT_CFG (English (U.S.))
 Class55=CConsolePropsGeneral
 Class56=CActionEditor
 Resource69=IDA_ACTION_EDITOR
@@ -143,18 +143,18 @@ Class58=CEditActionDlg
 Resource72=IDA_NETMAP
 Class59=CActionSelDlg
 Resource73=IDD_MIB_BROWSER
-Resource74=IDR_MAINFRAME (English (U.S.))
-Resource75=IDD_OBJECT_SECURITY (English (U.S.))
+Resource74=IDD_OBJTOOL_COLUMNS
+Resource75=IDD_REQUEST_PROCESSING (English (U.S.))
 Resource76=IDD_USER_PROPERTIES
 Class60=CCreateObjectDlg
 Class61=CCreateContainerDlg
 Resource77=IDR_MAINFRAME
 Class62=CCreateNodeDlg
-Resource78=IDD_DATA_QUERY (English (U.S.))
-Resource79=IDA_OBJECT_BROWSER (English (U.S.))
-Resource80=IDD_SET_PASSWORD (English (U.S.))
+Resource78=IDD_CREATE_TG (English (U.S.))
+Resource79=IDR_MAINFRAME (English (U.S.))
+Resource80=IDD_USER_PROPERTIES (English (U.S.))
 Class63=CDCITransformPage
-Resource81=IDA_SCRIPT_MANAGER (English (U.S.))
+Resource81=IDA_DC_EDITOR (English (U.S.))
 Class64=CPollNodeDlg
 Resource82=IDD_POLL_NODE (English (U.S.))
 Class65=CNodePoller
@@ -171,7 +171,7 @@ Resource89=IDA_ALARM_BROWSER
 Class69=CDataQueryDlg
 Resource90=IDD_EDIT_RULE_SEVERITY
 Class70=CTrapEditDlg
-Resource91=IDD_OBJECT_NETSRV_GENERAL (English (U.S.))
+Resource91=IDD_INPUT_BOX (English (U.S.))
 Class71=CTrapParamDlg
 Resource92=IDD_EDIT_EVENT
 Resource93=IDD_CREATE_TEMPLATE
@@ -179,90 +179,91 @@ Class72=CGraphPropDlg
 Class73=CColorSelector
 Class74=CPackageMgr
 Resource94=IDD_GROUP_PROPERTIES
-Resource95=IDD_CREATE_TG (English (U.S.))
-Resource96=IDD_OBJECT_RELATIONS (English (U.S.))
+Resource95=IDD_CREATE_NODE (English (U.S.))
+Resource96=IDD_OBJECT_NETSRV_GENERAL (English (U.S.))
 Resource97=IDM_VIEW_SPECIFIC (English (U.S.))
-Resource98=IDD_DCI_COLLECTION (English (U.S.))
-Resource99=IDA_ACTION_EDITOR (English (U.S.))
-Resource100=IDD_SELECT_USER (English (U.S.))
-Resource101=IDA_GRAPH (English (U.S.))
-Resource102=IDD_EDIT_VARIABLE (English (U.S.))
-Resource103=IDD_EDIT_IP_SUBNET (English (U.S.))
-Resource104=IDD_OBJTOOL_GENERAL (English (U.S.))
-Resource105=IDD_DCI_DATA_EXPORT (English (U.S.))
-Resource106=IDA_EVENT_EDITOR (English (U.S.))
-Resource107=IDD_EDIT_RULE_ALARM (English (U.S.))
+Resource98=IDD_GROUP_PROPERTIES (English (U.S.))
+Resource99=IDA_NETMAP (English (U.S.))
+Resource100=IDD_OBJECT_GENERAL (English (U.S.))
+Resource101=IDA_ACTION_EDITOR (English (U.S.))
+Resource102=IDD_LASTVAL_PROP (English (U.S.))
+Resource103=IDD_CREATE_VPNC (English (U.S.))
+Resource104=IDD_DCI_SCHEDULE (English (U.S.))
+Resource105=IDD_GRAPH_PROP_DATA (English (U.S.))
+Resource106=IDA_ALARM_BROWSER (English (U.S.))
+Resource107=IDD_OBJECT_PRESENTATION (English (U.S.))
 Class75=CInternalItemSelDlg
-Resource108=IDD_EDIT_TRAP (English (U.S.))
+Resource108=IDD_CREATE_TEMPLATE (English (U.S.))
 Class76=CAgentParamSelDlg
-Resource109=IDD_OBJECT_NODE_POLL (English (U.S.))
+Resource109=IDD_CREATE_NETSRV (English (U.S.))
 Class77=CInputBox
-Resource110=IDD_SELECT_INTERNAL_ITEM (English (U.S.))
+Resource110=IDD_EDIT_TRAP (English (U.S.))
 Class78=CCreateNetSrvDlg
-Resource111=IDD_SELECT_AGENT_PARAM (English (U.S.))
+Resource111=IDD_EDIT_TRAP_ARG (English (U.S.))
 Class79=CNetSrvPropsGeneral
 Resource112=IDD_LOGIN (English (U.S.))
 Class80=CNodePropsPolling
 Class81=CDeploymentView
 Class82=CLastValuesView
 Class83=CValueList
-Resource113=IDD_NEW_USER (English (U.S.))
+Resource113=IDD_OBJECT_SECURITY (English (U.S.))
 Class84=CObjectPropsRelations
-Resource114=IDD_SELECT_ACTION (English (U.S.))
+Resource114=IDD_NEW_ACTION (English (U.S.))
 Class85=CSaveDesktopDlg
-Resource115=IDD_CP_GENERAL (English (U.S.))
+Resource115=IDD_EDIT_RULE_SEVERITY (English (U.S.))
 Class86=CGraphSettingsPage
-Resource116=IDD_SELECT_EVENT (English (U.S.))
+Resource116=IDD_SELECT_OBJECT (English (U.S.))
 Class87=CGraphDataPage
-Resource117=IDA_EPP (English (U.S.))
+Resource117=IDA_MDI_DEFAULT (English (U.S.))
 Class88=CRemoveTemplateDlg
-Resource118=IDD_NEW_OBJECT_TOOL (English (U.S.))
+Resource118=IDD_OBJECT_STATUS (English (U.S.))
 Class89=CAddrChangeDlg
-Resource119=IDD_NEW_ACTION (English (U.S.))
+Resource119=IDD_EDIT_RULE_ALARM (English (U.S.))
 Class90=CLastValuesPropDlg
 Class91=CAgentCfgEditor
-Resource120=IDA_PACKAGE_MGR (English (U.S.))
+Resource120=IDA_TRAP_EDITOR (English (U.S.))
 Class92=CDataExportDlg
 Class93=CServerCfgEditor
-Resource121=IDD_GRAPH_PROP_DATA (English (U.S.))
-Resource122=IDD_CREATE_TEMPLATE (English (U.S.))
+Resource121=IDD_DESKTOP_SAVE_AS (English (U.S.))
+Resource122=IDD_DCI_TRANSFORM (English (U.S.))
 Class94=CEditVariableDlg
-Resource123=IDD_USER_PROPERTIES (English (U.S.))
+Resource123=IDD_SELECT_USER (English (U.S.))
 Class95=CCreateVPNConnDlg
-Resource124=IDD_ACTION_PROPERTIES (English (U.S.))
+Resource124=IDD_CP_GENERAL (English (U.S.))
 Class96=CVPNCPropsGeneral
-Resource125=IDD_CREATE_VPNC (English (U.S.))
+Resource125=IDD_DCI_DATA_EXPORT (English (U.S.))
 Class97=CEditSubnetDlg
-Resource126=IDD_EDIT_EVENT (English (U.S.))
-Resource127=IDD_THRESHOLD (English (U.S.))
+Resource126=IDA_SCRIPT_MANAGER (English (U.S.))
+Resource127=IDD_DCI_COLLECTION (English (U.S.))
 Class98=CModifiedAgentCfgDlg
 Class99=CSimpleSplitter
 Class100=CAdvSplitter
-Resource128=IDA_ALARM_BROWSER (English (U.S.))
+Resource128=IDA_OBJECT_BROWSER (English (U.S.))
 Class101=CTableView
 Class102=CWaitView
 Class103=CWebBrowser
 Class104=CSyslogBrowser
 Class105=CLPPList
-Resource129=IDD_DCI_THRESHOLDS (English (U.S.))
+Resource129=IDD_SET_PASSWORD (English (U.S.))
 Class106=CDCISchedulePage
-Resource130=IDD_EDIT_TRAP_ARG (English (U.S.))
+Resource130=IDD_DATA_QUERY (English (U.S.))
 Class107=CObjectPropsStatus
 Class108=CObjectToolsEditor
 Resource131=IDM_CONTEXT (English (U.S.))
-Resource132=IDA_MDI_DEFAULT (English (U.S.))
+Resource132=IDD_CHANGE_IP (English (U.S.))
 Class109=CObjToolPropGeneral
-Resource133=IDD_OBJTOOL_OPTIONS (English (U.S.))
+Resource133=IDD_OBJTOOL_GENERAL (English (U.S.))
 Class110=CObjToolPropColumns
-Resource134=IDD_EDIT_RULE_COMMENT (English (U.S.))
+Resource134=IDD_MIB_BROWSER (English (U.S.))
 Class111=CNewObjectToolDlg
 Class112=CObjToolPropOptions
 Class113=CScriptManager
 Class114=CScriptView
-Resource135=IDA_SERVER_CFG_EDITOR (English (U.S.))
+Resource135=IDA_PACKAGE_MGR (English (U.S.))
 Class115=CTrapLogBrowser
 Class116=CViewEditor
-Resource136=IDD_OBJTOOL_COLUMNS
+Resource136=IDD_REMOVE_TEMPLATE
+Resource137=IDT_MAP (English (U.S.))
 
 [CLS:CConsoleApp]
 Type=0
@@ -400,7 +401,7 @@ VirtualFilter=mfWC
 Type=0
 HeaderFile=MapView.h
 ImplementationFile=MapView.cpp
-BaseClass=CListCtrl
+BaseClass=CWnd
 Filter=W
 VirtualFilter=WC
 LastObject=CMapView
@@ -3772,3 +3773,12 @@ BaseClass=CMDIChildWnd
 Filter=M
 VirtualFilter=mfWC
 
+[TB:IDT_MAP (English (U.S.))]
+Type=1
+Class=?
+Command1=ID_BUTTON32988
+Command2=ID_BUTTON32989
+Command3=ID_BUTTON32992
+Command4=ID_BUTTON32990
+CommandCount=4
+
index 82f863f..0c890e0 100644 (file)
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 /nologo /subsystem:windows /machine:I386
-# ADD LINK32 libnxcl.lib libnetxms.lib libnxsnmp.lib libnxcscp.lib nxuilib.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\libnxcl\Release" /libpath:"..\..\libnetxms\Release" /libpath:"..\..\libnxsnmp\Release" /libpath:"..\..\libnxcscp\Release" /libpath:"..\nxuilib\Release"
+# ADD LINK32 libnxcl.lib libnetxms.lib libnxsnmp.lib libnxcscp.lib nxuilib.lib libnxmap.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\libnxcl\Release" /libpath:"..\..\libnetxms\Release" /libpath:"..\..\libnxsnmp\Release" /libpath:"..\..\libnxcscp\Release" /libpath:"..\nxuilib\Release" /libpath:"..\..\libnxmap\Release"
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Desc=Copy files
@@ -84,7 +84,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 libnxcl.lib libnetxms.lib libnxsnmp.lib libnxcscp.lib nxuilib.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"..\..\libnxcl\Debug" /libpath:"..\..\libnetxms\Debug" /libpath:"..\..\libnxsnmp\Debug" /libpath:"..\..\libnxcscp\Debug" /libpath:"..\nxuilib\Debug"
+# ADD LINK32 libnxcl.lib libnetxms.lib libnxsnmp.lib libnxcscp.lib nxuilib.lib libnxmap.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"..\..\libnxcl\Debug" /libpath:"..\..\libnetxms\Debug" /libpath:"..\..\libnxsnmp\Debug" /libpath:"..\..\libnxcscp\Debug" /libpath:"..\nxuilib\Debug" /libpath:"..\..\libnxmap\Debug"
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Cmds=copy Debug\nxcon.exe ..\..\..\bin
@@ -1138,6 +1138,10 @@ SOURCE=.\icons\graph.ico
 # End Source File
 # Begin Source File
 
+SOURCE=.\res\idt_map.bmp
+# End Source File
+# Begin Source File
+
 SOURCE=.\icons\iexplore.ico
 # End Source File
 # Begin Source File
index c997873..c5f6a52 100644 (file)
@@ -135,6 +135,7 @@ IDB_UP_ARROW            BITMAP  DISCARDABLE     "res\\up_arrow.bmp"
 IDB_DOWN_ARROW          BITMAP  DISCARDABLE     "res\\down_arrow.bmp"
 IDB_ANY                 BITMAP  DISCARDABLE     "res\\any.bmp"
 IDB_NONE                BITMAP  DISCARDABLE     "res\\none.bmp"
+IDT_MAP                 BITMAP  DISCARDABLE     "res\\idt_map.bmp"
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -154,6 +155,14 @@ BEGIN
     BUTTON      ID_APP_ABOUT
 END
 
+IDT_MAP TOOLBAR DISCARDABLE  18, 18
+BEGIN
+    BUTTON      ID_BUTTON32988
+    BUTTON      ID_BUTTON32989
+    BUTTON      ID_BUTTON32992
+    BUTTON      ID_BUTTON32990
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
index 999b75b..3fdbcfe 100644 (file)
@@ -26,6 +26,7 @@
 #define IDC_SPLITTER                    122
 #define ID_WAIT_VIEW                    123
 #define ID_BROWSER_CTRL                 124
+#define ID_TOOLBAR_CTRL                 126
 #define IDR_MAINFRAME                   128
 #define IDR_NXCONTYPE                   129
 #define IDI_ALARM                       130
 #define IDI_CLOSED_FOLDER               299
 #define IDI_OPEN_FOLDER                 300
 #define IDA_SCRIPT_MANAGER              301
+#define IDT_MAP                         302
 #define ID_EDIT_BOX                     525
 #define IDC_STATIC_TITLE                1003
 #define IDC_STATIC_TEXT                 1004
 #define ID_GRAPH_PRESETS_LASTYEAR       32983
 #define ID_VIEW_SNMPTRAPLOG             32986
 #define ID_CONTROLPANEL_VIEWBUILDER     32987
+#define ID_BUTTON32988                  32988
+#define ID_BUTTON32989                  32989
+#define ID_BUTTON32990                  32990
+#define ID_BUTTON32991                  32991
+#define ID_BUTTON32992                  32992
 #define IDS_GETFOLDERPATH_FAILED        61216
 #define IDS_WORKDIR_CREATION_FAILED     61217
 #define IDS_SCINTILLA_INIT_FAILED       61218
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_3D_CONTROLS                     1
-#define _APS_NEXT_RESOURCE_VALUE        302
-#define _APS_NEXT_COMMAND_VALUE         32988
+#define _APS_NEXT_RESOURCE_VALUE        304
+#define _APS_NEXT_COMMAND_VALUE         32995
 #define _APS_NEXT_CONTROL_VALUE         1342
-#define _APS_NEXT_SYMED_VALUE           126
+#define _APS_NEXT_SYMED_VALUE           127
 #endif
 #endif
index 3bc85d0..b2eb6e5 100644 (file)
@@ -111,6 +111,8 @@ void LIBNETXMS_EXPORTABLE strupr(char *in)
 #ifndef UNDER_CE // FIXME
 BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 {
+   if (dwReason == DLL_PROCESS_ATTACH)
+      DisableThreadLibraryCalls(hInstance);
    return TRUE;
 }
 #endif // UNDER_CE
index 38ccb8a..dd9e608 100644 (file)
@@ -43,7 +43,7 @@ RSC=rc.exe
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX- /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /c
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -74,7 +74,7 @@ PostBuild_Cmds=copy Release\libnxcl.dll C:\NetXMS\bin
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX- /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /GZ /c
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -189,6 +189,10 @@ SOURCE="..\..\include\netxms-version.h"
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\netxms_maps.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\nms_common.h
 # End Source File
 # Begin Source File
index 852141a..8cb5e6e 100644 (file)
@@ -236,6 +236,8 @@ const TCHAR LIBNXCL_EXPORTABLE *NXCGetErrorText(DWORD dwError)
 
 BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 {
+   if (dwReason == DLL_PROCESS_ATTACH)
+      DisableThreadLibraryCalls(hInstance);
    return TRUE;
 }
 
similarity index 68%
copy from src/libnxcl/libnxcl.dsp
copy to src/libnxmap/libnxmap.dsp
index 38ccb8a..be91675 100644 (file)
@@ -1,24 +1,24 @@
-# Microsoft Developer Studio Project File - Name="libnxcl" - Package Owner=<4>
+# Microsoft Developer Studio Project File - Name="libnxmap" - Package Owner=<4>
 # Microsoft Developer Studio Generated Build File, Format Version 6.00
 # ** DO NOT EDIT **
 
 # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
 
-CFG=libnxcl - Win32 Debug
+CFG=libnxmap - Win32 Debug
 !MESSAGE This is not a valid makefile. To build this project using NMAKE,
 !MESSAGE use the Export Makefile command and run
 !MESSAGE 
-!MESSAGE NMAKE /f "libnxcl.mak".
+!MESSAGE NMAKE /f "libnxmap.mak".
 !MESSAGE 
 !MESSAGE You can specify a configuration when running NMAKE
 !MESSAGE by defining the macro CFG on the command line. For example:
 !MESSAGE 
-!MESSAGE NMAKE /f "libnxcl.mak" CFG="libnxcl - Win32 Debug"
+!MESSAGE NMAKE /f "libnxmap.mak" CFG="libnxmap - Win32 Debug"
 !MESSAGE 
 !MESSAGE Possible choices for configuration are:
 !MESSAGE 
-!MESSAGE "libnxcl - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "libnxcl - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libnxmap - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "libnxmap - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
 !MESSAGE 
 
 # Begin Project
@@ -29,7 +29,7 @@ CPP=cl.exe
 MTL=midl.exe
 RSC=rc.exe
 
-!IF  "$(CFG)" == "libnxcl - Win32 Release"
+!IF  "$(CFG)" == "libnxmap - Win32 Release"
 
 # PROP BASE Use_MFC 0
 # PROP BASE Use_Debug_Libraries 0
@@ -42,8 +42,8 @@ RSC=rc.exe
 # PROP Intermediate_Dir "Release"
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX- /O2 /I "..\..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /c
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "libnxmap_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /O2 /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXMAP_EXPORTS" /YX /FD /c
 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "NDEBUG"
@@ -57,10 +57,10 @@ LINK32=link.exe
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Desc=Copy files
-PostBuild_Cmds=copy Release\libnxcl.dll C:\NetXMS\bin
+PostBuild_Cmds=copy Release\libnxmap.dll C:\NetXMS\bin
 # End Special Build Tool
 
-!ELSEIF  "$(CFG)" == "libnxcl - Win32 Debug"
+!ELSEIF  "$(CFG)" == "libnxmap - Win32 Debug"
 
 # PROP BASE Use_MFC 0
 # PROP BASE Use_Debug_Libraries 1
@@ -73,8 +73,8 @@ PostBuild_Cmds=copy Release\libnxcl.dll C:\NetXMS\bin
 # PROP Intermediate_Dir "Debug"
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX- /ZI /Od /I "..\..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXCL_EXPORTS" /YX /FD /GZ /c
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "libnxmap_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /ZI /Od /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "LIBNXMAP_EXPORTS" /YX /FD /GZ /c
 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
 # ADD BASE RSC /l 0x409 /d "_DEBUG"
@@ -87,93 +87,29 @@ LINK32=link.exe
 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libnetxms.lib ws2_32.lib libnxcscp.lib /nologo /version:0.1 /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\libnetxms\Debug" /libpath:"..\libnxcscp\Debug"
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
-PostBuild_Cmds=copy Debug\libnxcl.dll ..\..\bin
+PostBuild_Cmds=copy Debug\libnxmap.dll ..\..\bin
 # End Special Build Tool
 
 !ENDIF 
 
 # Begin Target
 
-# Name "libnxcl - Win32 Release"
-# Name "libnxcl - Win32 Debug"
+# Name "libnxmap - Win32 Release"
+# Name "libnxmap - Win32 Debug"
 # Begin Group "Source Files"
 
 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
 # Begin Source File
 
-SOURCE=.\actions.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\alarms.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\comm.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\datacoll.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\epp.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\eventdb.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\events.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\image.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\lpp.cpp
-# End Source File
-# Begin Source File
-
 SOURCE=.\main.cpp
 # End Source File
 # Begin Source File
 
-SOURCE=.\mib.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\objects.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\objtools.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\package.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\script.cpp
+SOURCE=.\map.cpp
 # End Source File
 # Begin Source File
 
-SOURCE=.\server.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\session.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\snmptrap.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\users.cpp
+SOURCE=.\submap.cpp
 # End Source File
 # End Group
 # Begin Group "Header Files"
@@ -181,7 +117,7 @@ SOURCE=.\users.cpp
 # PROP Default_Filter "h;hpp;hxx;hm;inl"
 # Begin Source File
 
-SOURCE=.\libnxcl.h
+SOURCE=.\libnxmap.h
 # End Source File
 # Begin Source File
 
@@ -189,6 +125,10 @@ SOURCE="..\..\include\netxms-version.h"
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\netxms_maps.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\nms_common.h
 # End Source File
 # Begin Source File
diff --git a/src/libnxmap/libnxmap.dsw b/src/libnxmap/libnxmap.dsw
new file mode 100644 (file)
index 0000000..2b676db
--- /dev/null
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "libnxmap"=.\libnxmap.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
similarity index 73%
copy from include/netxmsdb.h
copy to src/libnxmap/libnxmap.h
index 9013c32..3ba9cf3 100644 (file)
@@ -1,6 +1,7 @@
 /* 
 ** NetXMS - Network Management System
-** Copyright (C) 2003, 2004 Victor Kirhenshtein
+** Network Map Library
+** Copyright (C) 2006 Victor Kirhenshtein
 **
 ** 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
 ** along with this program; if not, write to the Free Software
 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 **
-** $module: netxmsdb.h
+** File: libnxmap.h
 **
 **/
 
-#ifndef _netxms_db_h
-#define _netxms_db_h
+#ifndef _libnxmap_h_
+#define _libnxmap_h_
 
-#define DB_FORMAT_VERSION      38
+#include <nms_common.h>
+#include <nms_util.h>
+#include <nms_threads.h>
+#include <nxcscpapi.h>
+#include <netxms_maps.h>
 
-#endif
+#endif   /* _libnxmap_h_ */
similarity index 66%
copy from include/netxmsdb.h
copy to src/libnxmap/main.cpp
index 9013c32..8785bab 100644 (file)
@@ -1,6 +1,7 @@
 /* 
 ** NetXMS - Network Management System
-** Copyright (C) 2003, 2004 Victor Kirhenshtein
+** Network Maps Library
+** Copyright (C) 2006 Victor Kirhenshtein
 **
 ** 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
 ** along with this program; if not, write to the Free Software
 ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 **
-** $module: netxmsdb.h
+** File: main.cpp
 **
 **/
 
-#ifndef _netxms_db_h
-#define _netxms_db_h
+#include "libnxmap.h"
 
-#define DB_FORMAT_VERSION      38
 
-#endif
+//
+// DLL entry point
+//
+
+#if defined(_WIN32) && !defined(UNDER_CE)
+
+BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
+{
+   if (dwReason == DLL_PROCESS_ATTACH)
+      DisableThreadLibraryCalls(hInstance);
+   return TRUE;
+}
+
+#endif   /* _WIN32 */
diff --git a/src/libnxmap/map.cpp b/src/libnxmap/map.cpp
new file mode 100644 (file)
index 0000000..9835d11
--- /dev/null
@@ -0,0 +1,145 @@
+/* 
+** NetXMS - Network Management System
+** Network Maps Library
+** Copyright (C) 2006 Victor Kirhenshtein
+**
+** 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: map.cpp
+**
+**/
+
+#include "libnxmap.h"
+
+
+//
+// Default map object constructor
+//
+
+nxMap::nxMap()
+{
+   CommonInit();
+}
+
+
+//
+// Constructor for new map object
+//
+
+nxMap::nxMap(DWORD dwObjectId, TCHAR *pszName, TCHAR *pszDescription)
+{
+   CommonInit();
+   m_dwObjectId = dwObjectId;
+   m_pszName = _tcsdup(pszName);
+   m_pszDescription = _tcsdup(pszDescription);
+}
+
+
+//
+// Create map object from NXCP message
+//
+
+nxMap::nxMap(CSCPMessage *pMsg)
+{
+   CommonInit();
+   ModifyFromMessage(pMsg);
+}
+
+
+//
+// Common initialization code
+//
+
+void nxMap::CommonInit(void)
+{
+   m_pszName = NULL;
+   m_pszDescription = NULL;
+   m_dwObjectId = 0;
+   m_dwNumSubmaps = 0;
+   m_ppSubmaps = NULL;
+   m_dwACLSize = 0;
+   m_pACL = NULL;
+   m_mutex = MutexCreate();
+}
+
+
+//
+// Destructor
+//
+
+nxMap::~nxMap()
+{
+   DWORD i;
+
+   safe_free(m_pszName);
+   safe_free(m_pszDescription);
+   for(i = 0; i < m_dwNumSubmaps; i++)
+      delete m_ppSubmaps[i];
+   safe_free(m_ppSubmaps);
+   safe_free(m_pACL);
+   MutexDestroy(m_mutex);
+}
+
+
+//
+// Get submap by object ID or create if one doesn't exist
+//
+
+nxSubmap *nxMap::GetSubmap(DWORD dwObjectId)
+{
+   DWORD i;
+   nxSubmap *pSubmap;
+
+   Lock();
+
+   for(i = 0; i < m_dwNumSubmaps; i++)
+   {
+      if (m_ppSubmaps[i]->Id() == dwObjectId)
+      {
+         pSubmap = m_ppSubmaps[i];
+         break;
+      }
+   }
+
+   if (i == m_dwNumSubmaps)
+   {
+      // Create new submap
+      pSubmap = new nxSubmap(dwObjectId);
+      m_dwNumSubmaps++;
+      m_ppSubmaps = (nxSubmap **)realloc(m_ppSubmaps, sizeof(nxSubmap *) * m_dwNumSubmaps);
+      m_ppSubmaps[i] = pSubmap;
+   }
+
+   Unlock();
+   return pSubmap;
+}
+
+
+//
+// Fill NXCP message with map data
+//
+
+void nxMap::CreateMessage(CSCPMessage *pMsg)
+{
+}
+
+
+//
+// Modify map object from NXCP message
+//
+
+void nxMap::ModifyFromMessage(CSCPMessage *pMsg)
+{
+}
diff --git a/src/libnxmap/submap.cpp b/src/libnxmap/submap.cpp
new file mode 100644 (file)
index 0000000..20364ed
--- /dev/null
@@ -0,0 +1,175 @@
+/* 
+** NetXMS - Network Management System
+** Network Maps Library
+** Copyright (C) 2006 Victor Kirhenshtein
+**
+** 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+**
+** File: submap.cpp
+**
+**/
+
+#include "libnxmap.h"
+
+
+//
+// Default submap object constructor
+//
+
+nxSubmap::nxSubmap()
+{
+   CommonInit();
+}
+
+
+//
+// Create default submap for given object
+//
+
+nxSubmap::nxSubmap(DWORD dwObjectId)
+{
+   CommonInit();
+   m_dwId = dwObjectId;
+}
+
+
+//
+// Create submap object from NXCP message
+//
+
+nxSubmap::nxSubmap(CSCPMessage *pMsg)
+{
+   CommonInit();
+   ModifyFromMessage(pMsg);
+}
+
+
+//
+// Common initialization code
+//
+
+void nxSubmap::CommonInit(void)
+{
+   m_dwId = 0;
+   m_dwAttr = 0;
+   m_dwPosListSize = 0;
+   m_pPosList = NULL;
+}
+
+
+//
+// Destructor
+//
+
+nxSubmap::~nxSubmap()
+{
+   safe_free(m_pPosList);
+}
+
+
+//
+// Fill NXCP message with submap data
+//
+
+void nxSubmap::CreateMessage(CSCPMessage *pMsg)
+{
+}
+
+
+//
+// Modify submap object from NXCP message
+//
+
+void nxSubmap::ModifyFromMessage(CSCPMessage *pMsg)
+{
+}
+
+
+//
+// Returns position of given object or (-1,-1) if object's position is undefined
+//
+
+POINT nxSubmap::GetObjectPosition(DWORD dwObjectId)
+{
+   DWORD i;
+   POINT pt;
+
+   pt.x = -1;
+   pt.y = -1;
+   for(i = 0; i < m_dwPosListSize; i++)
+      if (m_pPosList[i].dwId == dwObjectId)
+      {
+         pt.x = m_pPosList[i].x;
+         pt.y = m_pPosList[i].y;
+         break;
+      }
+   return pt;
+}
+
+
+//
+// Set object's position
+//
+
+void nxSubmap::SetObjectPosition(DWORD dwObjectId, int x, int y)
+{
+   DWORD i;
+
+   for(i = 0; i < m_dwPosListSize; i++)
+      if (m_pPosList[i].dwId == dwObjectId)
+      {
+         m_pPosList[i].x = x;
+         m_pPosList[i].y = y;
+         break;
+      }
+   if (i == m_dwPosListSize)
+   {
+      // New element
+      m_dwPosListSize++;
+      m_pPosList = (OBJPOS *)realloc(m_pPosList, m_dwPosListSize * sizeof(OBJPOS));
+      m_pPosList[i].dwId = dwObjectId;
+      m_pPosList[i].x = x;
+      m_pPosList[i].y = y;
+   }
+}
+
+
+//
+// Layout objects on map
+//
+
+void nxSubmap::DoLayout(DWORD dwNumObjects, DWORD *pdwObjectList,
+                        DWORD dwNumLinks, OBJLINK *pLinkList,
+                        int nIdealX, int nIdealY)
+{
+   DWORD i;
+   int x, y;
+
+   safe_free_and_null(m_pPosList);
+   m_dwPosListSize = 0;
+
+   for(i = 0, x = MAP_LEFT_MARGIN, y = MAP_TOP_MARGIN; i < dwNumObjects; i++)
+   {
+      SetObjectPosition(pdwObjectList[i], x, y);
+      x += MAP_OBJECT_SIZE_X + MAP_OBJECT_INTERVAL;
+      if (x >= nIdealX - MAP_OBJECT_SIZE_X - MAP_OBJECT_INTERVAL / 2)
+      {
+         x = MAP_LEFT_MARGIN;
+         y += MAP_OBJECT_SIZE_X + MAP_TEXT_BOX_HEIGHT + MAP_OBJECT_INTERVAL;
+      }
+   }
+   
+   m_dwAttr |= SUBMAP_ATTR_LAYOUT_COMPLETED;
+}
index 8bcb113..496db2f 100644 (file)
@@ -126,6 +126,8 @@ const TCHAR LIBNXSNMP_EXPORTABLE *SNMPGetErrorText(DWORD dwError)
 #ifndef UNDER_CE // FIXME
 BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 {
+   if (dwReason == DLL_PROCESS_ATTACH)
+      DisableThreadLibraryCalls(hInstance);
    return TRUE;
 }
 #endif // UNDER_CE
index c9bb995..30765fd 100644 (file)
@@ -97,6 +97,17 @@ static void DeleteEmptySubnets(void)
 
 
 //
+// Maintenance tasks specific to PostgreSQL
+//
+
+static void PGSQLMaintenance(void)
+{
+   if (!ConfigReadInt("DisableVacuum", 0))
+      DBQuery(m_hdb, "VACUUM ANALYZE");
+}
+
+
+//
 // Housekeeper thread
 //
 
@@ -159,6 +170,10 @@ THREAD_RESULT THREAD_CALL HouseKeeper(void *pArg)
       for(i = 0; i < g_dwNodeAddrIndexSize; i++)
          ((Node *)g_pNodeIndexByAddr[i].pObject)->CleanDCIData();
       RWLockUnlock(g_rwlockNodeIndex);
+
+      // Run DB-specific maintenance tasks
+      if (g_dwDBSyntax == DB_SYNTAX_PGSQL)
+         PGSQLMaintenance();
    }
 
    // Disconnect from database if using separate connection