|
From: <got...@us...> - 2008-12-17 11:21:52
|
Revision: 134
http://scstudio.svn.sourceforge.net/scstudio/?rev=134&view=rev
Author: gotthardp
Date: 2008-12-17 11:21:46 +0000 (Wed, 17 Dec 2008)
Log Message:
-----------
Integrated with scmsc.dll.
Added framework for Visio --> msc.h conversion.
Fixed functionality when add-on is executed when no document is open.
Still missing: Stencils and document templates. More testing needed before commit.
Modified Paths:
--------------
trunk/src/view/visio/addon/addon.cpp
trunk/src/view/visio/addon/addon.h
trunk/src/view/visio/addon/dllmodule.rc
trunk/src/view/visio/addon/document.cpp
trunk/src/view/visio/addon/resource.h
trunk/src/view/visio/addon/scstudio.vcproj
Added Paths:
-----------
trunk/src/view/visio/addon/extract.cpp
trunk/src/view/visio/addon/extract.h
Modified: trunk/src/view/visio/addon/addon.cpp
===================================================================
--- trunk/src/view/visio/addon/addon.cpp 2008-12-15 06:50:06 UTC (rev 133)
+++ trunk/src/view/visio/addon/addon.cpp 2008-12-17 11:21:46 UTC (rev 134)
@@ -37,7 +37,7 @@
#include <Addsink.cpp>
const int MIN_VISIO_VERSION = 11;
-const _bstr_t VST_FILE_NAME = _T("Flowchart (VSL).vst");
+const _bstr_t VST_FILE_NAME = _T("MSC.vtx");
CStudioAddon scstudio(_T(ADDON_NAME), IDS_ADDON_NAME);
@@ -151,24 +151,10 @@
// when no document is active
if(vsoDocument == NULL)
- {
- // open a new document based on the add-on template
- _bstr_t bstrVSTName = GetVisioModulePath();
- bstrVSTName += VST_FILE_NAME;
+ vsoDocument = vsoApp->GetDocuments()->Add(VST_FILE_NAME);
- // check if template file exists
- _tfinddata_t stFileInfo;
- TCHAR * pszVSTName = (TCHAR *)bstrVSTName;
- if (_tfindfirst(pszVSTName, &stFileInfo) == -1)
- {
- DisplayException(vsoApp,
- bstrVSTName + LoadStringResource(IDS_ERROR_FILE_NOT_EXISTS), MB_OK);
- return VAORC_FAILURE;
- }
+ RegisterPersistentEvents(vsoDocument);
- vsoDocument = vsoApp->GetDocuments()->Add(bstrVSTName);
- }
-
CDocumentMonitor *pDocumentMonitor = GetDocumentMonitor(vsoApp, vsoDocument);
return VAORC_SUCCESS;
}
@@ -192,18 +178,22 @@
{
OPT_VISIO,
OPT_EVENT,
+ OPT_EVENTID,
OPT_DOC,
OPT_PAGE,
- OPT_SHAPE
+ OPT_SHAPE,
+ OPT_SHAPEU
};
static CSimpleOpt::SOption const long_options[] =
{
{ OPT_VISIO, _T("-visio"), SO_REQ_CMB },
{ OPT_EVENT, _T("-event"), SO_REQ_CMB },
+ { OPT_EVENTID, _T("-eventid"), SO_REQ_CMB },
{ OPT_DOC, _T("-doc"), SO_REQ_CMB },
{ OPT_PAGE, _T("-page"), SO_REQ_CMB },
{ OPT_SHAPE, _T("-shape"), SO_REQ_CMB },
+ { OPT_SHAPEU, _T("-shapeu"), SO_REQ_CMB },
SO_END_OF_OPTIONS
};
@@ -248,10 +238,16 @@
}
free(cmdline);
+ RegisterPersistentEvents(vsoDocument);
+
CDocumentMonitor *pDocumentMonitor = GetDocumentMonitor(vsoApp, vsoDocument);
// execute the relevant event handler
switch(iEvent)
{
+ case 1: // DocumentCreate
+ case 2: // DocumentOpen
+ return VAORC_SUCCESS;
+
// to keep the stencil compatibility, the 1xx events must not be renumbered
case 100:
TRACE("CStudioAddon::Run() stencil event 'OnDrop'");
@@ -326,8 +322,25 @@
break;
case visEvtConnectionsAdded:
+ {
TRACE("CStudioAddon::HandleVisioEvent() visEvtConnectionsAdded");
+/*
+ Visio::IVConnectsPtr vsoConnects = pSubjectObj;
+ int k = vsoConnects->Count;
+ for(int i = 1; i <= vsoConnects->Count; i++)
+ {
+ Visio::IVConnectPtr vsoConnect = vsoConnects->Item[i];
+ if(vsoConnect == NULL || vsoConnect->ToCell->Error != 0)
+ continue;
+
+ _bstr_t text = vsoConnect->ToCell->LocalName;
+ _bstr_t form = vsoConnect->ToCell->Formula;
+ double val = vsoConnect->ToCell->ResultIU;
+ vsoConnect->ToCell->Formula = text;
+ }
+*/
break;
+ }
case visEvtConnectionsDeleted:
TRACE("CStudioAddon::HandleVisioEvent() visEvtConnectionsDeleted");
@@ -340,12 +353,43 @@
return NOERROR;
}
- catch (_com_error &) // catch exceptions thrown by Visio
+ catch (_com_error &err) // catch exceptions thrown by Visio
{
+ _bstr_t message = err.Description();
return E_FAIL;
}
}
+void CStudioAddon::RegisterPersistentEvents(Visio::IVDocumentPtr vsoDocument)
+{
+ Visio::IVEventPtr vsoDocumentCreateEvent = NULL;
+ Visio::IVEventPtr vsoDocumentOpenEvent = NULL;
+
+ Visio::IVEventListPtr vsoDocumentEventList = vsoDocument->EventList;
+ for(int i = 1; i <= vsoDocumentEventList->Count; i++)
+ {
+ Visio::IVEventPtr vsoEvent = vsoDocumentEventList->Item[i];
+
+ if(vsoEvent == NULL || vsoEvent->Action != visActCodeRunAddon)
+ continue;
+
+ _bstr_t aa = vsoEvent->Target;
+ if(vsoEvent != NULL && _tcscmp(vsoEvent->Target, _T(ADDON_NAME)) == 0)
+ {
+ if(vsoEvent->Event == visEvtCodeDocCreate)
+ vsoDocumentCreateEvent = vsoEvent;
+ else if(vsoEvent->Event == visEvtCodeDocOpen)
+ vsoDocumentOpenEvent = vsoEvent;
+ }
+ }
+
+ if(vsoDocumentCreateEvent == NULL)
+ vsoDocumentCreateEvent = vsoDocumentEventList->Add(visEvtCodeDocCreate, visActCodeRunAddon, ADDON_NAME, ""); // event=1
+
+ if(vsoDocumentOpenEvent == NULL)
+ vsoDocumentOpenEvent = vsoDocumentEventList->Add(visEvtCodeDocOpen, visActCodeRunAddon, ADDON_NAME, ""); // event=2
+}
+
CDocumentMonitor *CStudioAddon::GetDocumentMonitor(Visio::IVApplicationPtr vsoApp, Visio::IVDocumentPtr vsoDocument)
{
CDocumentMonitor *pDocumentMonitor = NULL;
@@ -396,8 +440,8 @@
vsoEvent = vsoDocumentEventList->AddAdvise(visEvtBeforeDocumentClose, varSink, _T(""), _T(""));
pDocumentMonitor->m_vsoBeforeDocumentClosedEvent = vsoEvent;
- vsoDocumentEventList->AddAdvise(visEvtConnectionsAdded, varSink, _T(""), _T(""));
- vsoDocumentEventList->AddAdvise(visEvtConnectionsDeleted, varSink, _T(""), _T(""));
+ vsoDocumentEventList->AddAdvise(visEvtConnectionsAdded, varSink, _T(""), _T("ConnectionsAdded"));
+ vsoDocumentEventList->AddAdvise(visEvtConnectionsDeleted, varSink, _T(""), _T("ConnectionsDeleted"));
// add this document to our monitored documents list
m_DocumentMonitors.insert(DocumentMonitorsMap::value_type(nID, pDocumentMonitor));
Modified: trunk/src/view/visio/addon/addon.h
===================================================================
--- trunk/src/view/visio/addon/addon.h 2008-12-15 06:50:06 UTC (rev 133)
+++ trunk/src/view/visio/addon/addon.h 2008-12-17 11:21:46 UTC (rev 134)
@@ -46,6 +46,7 @@
VARIANT vMoreInfo, // [in] other info
VARIANT *pvResult); // [retval][out] return a value to Visio for query events
+ void RegisterPersistentEvents(Visio::IVDocumentPtr vsoDocument);
CDocumentMonitor *GetDocumentMonitor(Visio::IVApplicationPtr vsoApp, Visio::IVDocumentPtr vsoDocument);
void StopDocumentMonitor(Visio::IVApplicationPtr vsoApp, Visio::IVDocumentPtr vsoDocument);
Modified: trunk/src/view/visio/addon/dllmodule.rc
===================================================================
--- trunk/src/view/visio/addon/dllmodule.rc 2008-12-15 06:50:06 UTC (rev 133)
+++ trunk/src/view/visio/addon/dllmodule.rc 2008-12-17 11:21:46 UTC (rev 134)
@@ -102,7 +102,6 @@
BEGIN
IDS_ADDON_NAME "Sequence Chart Studio"
IDS_ERROR_VISIO_VERSION "This application requires Microsoft Office Visio 2003 or later."
- IDS_ERROR_FILE_NOT_EXISTS " does not exist."
IDS_VSL_NAME "msc.vsl"
IDS_REPORT_VIEW "Verification Report"
END
Modified: trunk/src/view/visio/addon/document.cpp
===================================================================
--- trunk/src/view/visio/addon/document.cpp 2008-12-15 06:50:06 UTC (rev 133)
+++ trunk/src/view/visio/addon/document.cpp 2008-12-17 11:21:46 UTC (rev 134)
@@ -20,6 +20,7 @@
#include "dllmodule.h"
#include "addon.h"
#include "document.h"
+#include "extract.h"
#include "data/msc.h"
@@ -90,34 +91,28 @@
if(!m_reportVisible)
ShowReportView(vsoApp);
- Visio::IVDocumentPtr vsoDocument = vsoApp->GetActiveDocument();
Visio::IVPagePtr vsoPage = vsoApp->GetActivePage();
- Visio::IVShapesPtr vsoShapes = vsoPage->GetShapes();
-
- long cnt = vsoShapes->GetCount();
- if (cnt > 0) {
- Visio::IVShapePtr shape;
- std::string s;
+ TDrawingType type = get_drawing_type(m_reportView, vsoPage);
+ if(type == DT_BMSC)
+ {
+ m_reportView->Print("Detected bMSC drawing.");
- for (long i = 1; i < cnt; i++) {
- shape = vsoShapes->GetItem(i);
-
- s.erase();
- s.append("Shape: ");
- s.append(shape->GetName());
- s.append("/");
- s.append(shape->GetNameU());
-
- m_reportView->Print(s);
- }
- } else {
- m_reportView->Print("No Shapes detected");
+ BMscPtr bmsc = extract_bmsc(m_reportView, vsoPage);
+ return VAORC_SUCCESS;
}
-
- m_reportView->Print("\\b No error detected.\\b0");
+ else if(type == DT_HMSC)
+ {
+ m_reportView->Print("Detected hMSC drawing.");
- return VAORC_SUCCESS;
+ BMscPtr hmsc = extract_hmsc(m_reportView, vsoPage);
+ return VAORC_SUCCESS;
+ }
+ else
+ {
+ m_reportView->Print("\\b This drawing is neither bMSC nor hMSC.\\b0");
+ return VAORC_FAILURE;
+ }
}
VAORC CDocumentMonitor::OnMenuWindowsReporter(Visio::IVApplicationPtr vsoApp)
Added: trunk/src/view/visio/addon/extract.cpp
===================================================================
--- trunk/src/view/visio/addon/extract.cpp (rev 0)
+++ trunk/src/view/visio/addon/extract.cpp 2008-12-17 11:21:46 UTC (rev 134)
@@ -0,0 +1,70 @@
+/*
+ * scstudio - Sequence Chart Studio
+ * http://scstudio.sourceforge.net
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * Copyright (c) 2007-2008 Petr Gotthard <pet...@ce...>
+ *
+ * $Id$
+ */
+
+#include "stdafx.h"
+#include "extract.h"
+
+TDrawingType get_drawing_type(CReportView *reporter, Visio::IVPagePtr vsoPage)
+{
+ return DT_UNKNOWN;
+}
+
+BMscPtr extract_bmsc(CReportView *reporter, Visio::IVPagePtr vsoPage)
+{
+ BMscPtr bmsc = new BMsc();
+
+ Visio::IVShapesPtr vsoShapes = vsoPage->GetShapes();
+
+ long cnt = vsoShapes->GetCount();
+
+ if (cnt > 0) {
+ Visio::IVShapePtr shape;
+ std::string s;
+
+ for (long i = 1; i < cnt; i++) {
+ shape = vsoShapes->GetItem(i);
+
+ s.erase();
+ s.append("Shape: ");
+ s.append(shape->GetName());
+ s.append("/");
+ s.append(shape->GetNameU());
+
+ reporter->Print(s);
+ }
+ } else {
+ reporter->Print("No Shapes detected");
+ }
+
+ reporter->Print("\\b No error detected.\\b0");
+
+ return bmsc;
+
+ return (BMsc *)NULL;
+}
+
+HMscPtr extract_hmsc(CReportView *reporter, Visio::IVPagePtr vsoPage)
+{
+ HMscPtr hmsc = new HMsc();
+
+ return hmsc;
+
+ return (HMsc *)NULL;
+}
+
+// $Id$
Property changes on: trunk/src/view/visio/addon/extract.cpp
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Added: trunk/src/view/visio/addon/extract.h
===================================================================
--- trunk/src/view/visio/addon/extract.h (rev 0)
+++ trunk/src/view/visio/addon/extract.h 2008-12-17 11:21:46 UTC (rev 134)
@@ -0,0 +1,38 @@
+/*
+ * scstudio - Sequence Chart Studio
+ * http://scstudio.sourceforge.net
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * Copyright (c) 2007-2008 Petr Gotthard <pet...@ce...>
+ *
+ * $Id$
+ */
+
+#pragma once
+#include "reportview.h"
+
+#include "Vaddon.h"
+#include "data/msc.h"
+
+enum TDrawingType
+{
+ DT_UNKNOWN = 0,
+ DT_BMSC,
+ DT_HMSC
+};
+
+TDrawingType get_drawing_type(CReportView *reporter, Visio::IVPagePtr vsoPage);
+
+BMscPtr extract_bmsc(CReportView *reporter, Visio::IVPagePtr vsoPage);
+
+HMscPtr extract_hmsc(CReportView *reporter, Visio::IVPagePtr vsoPage);
+
+// $Id$
Property changes on: trunk/src/view/visio/addon/extract.h
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Modified: trunk/src/view/visio/addon/resource.h
===================================================================
--- trunk/src/view/visio/addon/resource.h 2008-12-15 06:50:06 UTC (rev 133)
+++ trunk/src/view/visio/addon/resource.h 2008-12-17 11:21:46 UTC (rev 134)
@@ -5,9 +5,8 @@
#define IDS_ADDON_NAME 100
#define IDR_SCSTUDIO 101
#define IDS_ERROR_VISIO_VERSION 101
-#define IDS_ERROR_FILE_NOT_EXISTS 102
-#define IDS_VSL_NAME 103
-#define IDS_REPORT_VIEW 104
+#define IDS_VSL_NAME 102
+#define IDS_REPORT_VIEW 103
// Next default values for new objects
//
Modified: trunk/src/view/visio/addon/scstudio.vcproj
===================================================================
--- trunk/src/view/visio/addon/scstudio.vcproj 2008-12-15 06:50:06 UTC (rev 133)
+++ trunk/src/view/visio/addon/scstudio.vcproj 2008-12-17 11:21:46 UTC (rev 134)
@@ -22,11 +22,12 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\;"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Include";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Source";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\TypeLib";"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\WTL80\include""
+ AdditionalIncludeDirectories="..\..\..\..\src;"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Include";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Source";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\TypeLib";"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\WTL80\include""
PreprocessorDefinitions="WIN32;_WIN32_WINNT=0x0500;_WINDOWS;_DEBUG;_USRDLL"
MinimalRebuild="TRUE"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
+ RuntimeTypeInfo="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
@@ -37,8 +38,10 @@
Name="VCLinkerTool"
RegisterOutput="TRUE"
IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="scmsc.lib"
OutputFile="$(OutDir)\$(ProjectName).vsl"
LinkIncremental="2"
+ AdditionalLibraryDirectories="..\..\..\..\$(OutDir)"
ModuleDefinitionFile=".\dllmodule.def"
GenerateDebugInformation="TRUE"
SubSystem="2"
@@ -92,9 +95,10 @@
<Tool
Name="VCCLCompilerTool"
Optimization="2"
- AdditionalIncludeDirectories=""C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Include";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Source";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\TypeLib";"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\WTL80\include""
+ AdditionalIncludeDirectories="..\..\..\..\src;"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Include";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\CPP\Source";"C:\Program Files\Microsoft Office\Visio11\SDK\Libraries\TypeLib";"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\WTL80\include""
PreprocessorDefinitions="WIN32;_WIN32_WINNT=0x0500;_WINDOWS;NDEBUG;_USRDLL"
RuntimeLibrary="2"
+ RuntimeTypeInfo="TRUE"
UsePrecompiledHeader="2"
WarningLevel="3"
Detect64BitPortabilityProblems="TRUE"
@@ -105,8 +109,10 @@
Name="VCLinkerTool"
RegisterOutput="TRUE"
IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="scmsc.lib"
OutputFile="$(OutDir)\$(ProjectName).vsl"
LinkIncremental="1"
+ AdditionalLibraryDirectories="..\..\..\..\$(OutDir)"
ModuleDefinitionFile=".\dllmodule.def"
GenerateDebugInformation="TRUE"
SubSystem="2"
@@ -206,6 +212,12 @@
</FileConfiguration>
</File>
<File
+ RelativePath=".\extract.cpp">
+ </File>
+ <File
+ RelativePath=".\extract.h">
+ </File>
+ <File
RelativePath=".\reportview.cpp">
</File>
<File
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|