From f33a2c1ceb9eda7eadd97e5251cc65ac4a55372e Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Fri, 7 Jun 2024 20:02:35 +0300 Subject: [PATCH] Initial commit --- VBAMake.txt | 43 +++ VERSION | 1 + distr/!Руководство пользователя.docx | Bin 0 -> 68063 bytes distr/Шаблоны/Блоки-Excel.xltx | Bin 0 -> 16981 bytes distr/Шаблоны/Блоки-Word.dotx | Bin 0 -> 31513 bytes script/manifest.txt | 94 +++++++ skeleton/Блоки.vstm | Bin 0 -> 67852 bytes src/DataAccess.bas | 173 ++++++++++++ src/Declarations.bas | 112 ++++++++ src/DevHelper.bas | 24 ++ src/Main.bas | 269 +++++++++++++++++++ src/MainImpl.bas | 376 +++++++++++++++++++++++++++ src/PowerEstimator.cls | 71 +++++ src/ThisDocument.cls | 22 ++ src/WordExporter.cls | 82 ++++++ src/XLExporter.cls | 106 ++++++++ src/s_ContextActions.cls | 164 ++++++++++++ src/s_DataAccess.cls | 155 +++++++++++ src/s_Operations.cls | 47 ++++ src/z_UIMessages.bas | 72 +++++ src/z_UIRibbon.bas | 26 ++ ui/.rels | 2 + ui/customUI1.xml | 125 +++++++++ 23 files changed, 1964 insertions(+) create mode 100644 VBAMake.txt create mode 100644 VERSION create mode 100644 distr/!Руководство пользователя.docx create mode 100644 distr/Шаблоны/Блоки-Excel.xltx create mode 100644 distr/Шаблоны/Блоки-Word.dotx create mode 100644 script/manifest.txt create mode 100644 skeleton/Блоки.vstm create mode 100644 src/DataAccess.bas create mode 100644 src/Declarations.bas create mode 100644 src/DevHelper.bas create mode 100644 src/Main.bas create mode 100644 src/MainImpl.bas create mode 100644 src/PowerEstimator.cls create mode 100644 src/ThisDocument.cls create mode 100644 src/WordExporter.cls create mode 100644 src/XLExporter.cls create mode 100644 src/s_ContextActions.cls create mode 100644 src/s_DataAccess.cls create mode 100644 src/s_Operations.cls create mode 100644 src/z_UIMessages.bas create mode 100644 src/z_UIRibbon.bas create mode 100644 ui/.rels create mode 100644 ui/customUI1.xml diff --git a/VBAMake.txt b/VBAMake.txt new file mode 100644 index 0000000..959b0c5 --- /dev/null +++ b/VBAMake.txt @@ -0,0 +1,43 @@ +# == Properties Section == +# configuration properties +# use .ini format to define properties +# mandatory properties: name, artifact_home, source_home + +id = Concept-Blocks +name = Концепт-Блоки +description = Технология визуализации отношений КС в различных формах +artifact_home = Концепт-Блоки +source_home = Concept-Blocks +install_home = \\fs1.concept.ru\projects\10 Автоматизация деятельности\01 Высокие технологии\Концепт-Блоки + +%% +# === Build section === +# Available commands: +# build LOCAL_MANIFEST +# copy LOCAL_SOURCE -> [LOCAL_ARTIFACT] +# save_as LOCAL_ARTIFACT -> LOCAL_ARTIFACT +# run LOCAL_SOURCE.bat + +build script\manifest.txt + +copy distr\!Руководство пользователя.docx +copy distr\Шаблоны\Блоки-Excel.xltx -> Шаблоны\Блоки-Excel.xltx +copy distr\Шаблоны\Блоки-Word.dotx -> Шаблоны\Блоки-Word.dotx + +%% +# === Install section == +# Available commands: +# install LOCAL_ARTIFACT -> [INSTALL_PATH] +# add_template LOCAL_ARTIFACT -> [LOCAL_TEMPLATE] +# run LOCAL_ARTIFACT.bat <- [PARAMETERS] +# run APPLICATION <- [PARAMETERS] + +install Блоки.vstm + +install !Руководство пользователя.docx +install Шаблоны\Блоки-Excel.xltx -> Шаблоны\Блоки-Excel.xltx +install Шаблоны\Блоки-Word.dotx -> Шаблоны\Блоки-Word.dotx + +add_template Блоки.vstm -> 20 Концепт-Блоки.vstm +add_template Шаблоны\Блоки-Excel.xltx -> Технологии\Блоки-Excel.xltx +add_template Шаблоны\Блоки-Word.dotx -> Технологии\Блоки-Word.dotx \ No newline at end of file diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..f0bb29e --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.3.0 diff --git a/distr/!Руководство пользователя.docx b/distr/!Руководство пользователя.docx new file mode 100644 index 0000000000000000000000000000000000000000..c92b61fee6f25893e2a86ff48f4009a804dd567f GIT binary patch literal 68063 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 literal 0 HcmV?d00001 diff --git a/distr/Шаблоны/Блоки-Word.dotx b/distr/Шаблоны/Блоки-Word.dotx new file mode 100644 index 0000000000000000000000000000000000000000..ed99c691534c716b8b58330ce71dd9692af8a8e5 GIT binary patch literal 31513 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�LQph4>lZJP42 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 " delimiter +# First component is a path relative to SourceHome\ui folders +# Second component is internal path inside project file + +.rels -> _rels\.rels +customUI1.xml -> visio\customUI\customUI1.xml + +%% +# === References Section === +# List dependencies in one of the formats +# global : GLOBAL_NAME +# guid : {REGISTERED_GUID} +# file : PATH_TO_LIBRARY + +global : Scripting +global : Excel +global : Word +global : MSForms +global : Shell32 \ No newline at end of file diff --git a/skeleton/Блоки.vstm b/skeleton/Блоки.vstm new file mode 100644 index 0000000000000000000000000000000000000000..f903405d4a208480c1163b85bcf8543025c270ab GIT binary patch literal 67852 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 G@c#ggjIGZA literal 0 HcmV?d00001 diff --git a/src/DataAccess.bas b/src/DataAccess.bas new file mode 100644 index 0000000..25e3827 --- /dev/null +++ b/src/DataAccess.bas @@ -0,0 +1,173 @@ +Attribute VB_Name = "DataAccess" +Option Private Module +Option Explicit + +Public Function ExtractGraphNodes(target As Visio.Page) As Collection + Dim iNodes As New Collection + Dim aShape As Visio.Shape + For Each aShape In target.Shapes + If aShape.OneD Or aShape.MasterShape Is Nothing Then _ + GoTo NEXT_SHAPE + Dim sMaster$: sMaster = aShape.MasterShape.Name + If sMaster = SHAPE_OPERATION _ + Or sMaster = SHAPE_SCHEMA _ + Or sMaster = SHAPE_PROXY Then _ + Call iNodes.Add(aShape) +NEXT_SHAPE: + Next aShape + Set ExtractGraphNodes = iNodes +End Function + +Public Function ExtractSchemas(target As Visio.Page) As Collection + Dim iSchemas As New Collection + Dim aShape As Visio.Shape + For Each aShape In target.Shapes + If aShape.OneD Or aShape.MasterShape Is Nothing Then _ + GoTo NEXT_SHAPE + Dim sMaster$: sMaster = aShape.MasterShape.Name + If sMaster = SHAPE_SCHEMA Then _ + Call iSchemas.Add(aShape) +NEXT_SHAPE: + Next aShape + Set ExtractSchemas = iSchemas +End Function + +Public Function GetTemplate(sFile$, sLocalFolder$) As String + Dim fso As New Scripting.FileSystemObject + + GetTemplate = SERVER_TEMPLATES & "\" & sFile + If fso.FileExists(GetTemplate) Then _ + Exit Function + + GetTemplate = sLocalFolder & "\" & sFile + If fso.FileExists(GetTemplate) Then _ + Exit Function + + GetTemplate = TEMPLATE_PREFIX & "\" & sFile +End Function + +Public Function TrimEnumerator(sText$) As String + If IsNumerated(sText) Then + Dim pos&: pos = VBA.InStr(1, sText, " ") + TrimEnumerator = VBA.Right(sText, VBA.Len(sText) - pos) + Else + TrimEnumerator = sText + End If +End Function + +Public Function ExtractEnumerator(sText$) As Long + If Not IsNumerated(sText) Then _ + Exit Function + If sText Like "[?][?][?] *" Then _ + Exit Function + Dim nPos&: nPos = VBA.InStr(1, sText, " ") + If VBA.Left(sText, 1) = "!" Then + ExtractEnumerator = CLng(VBA.Mid(sText, 4, nPos - 4)) + Else + ExtractEnumerator = CLng(VBA.Mid(sText, 3, nPos - 3)) + End If +End Function + +Public Function AppendEnumerator(sText$, nIndex&) As String + AppendEnumerator = "" + Format(nIndex, "00") + " " + sText +End Function + +Public Function IsElementary(shapeType As TElement) As Boolean + Select Case (shapeType) + Case T_EL_UNKNOWN: IsElementary = False + Case T_EL_SCHEMA: IsElementary = False + Case T_EL_PROXY: IsElementary = False + Case T_EL_BLOCK: IsElementary = False + Case T_EL_OPERATION: IsElementary = False + Case T_EL_HEADER: IsElementary = False + Case T_EL_MINIATURE: IsElementary = False + Case Else: IsElementary = True + End Select +End Function + +Public Function GetShapeType(target As Visio.Shape) As TElement + If target.MasterShape Is Nothing Then + GetShapeType = T_EL_UNKNOWN + Exit Function + End If + + Select Case (target.MasterShape.Name) + Case SHAPE_SCHEMA: GetShapeType = T_EL_SCHEMA + Case SHAPE_PROXY: GetShapeType = T_EL_PROXY + Case SHAPE_BLOCK: GetShapeType = T_EL_BLOCK + Case SHAPE_OPERATION: GetShapeType = T_EL_OPERATION + Case SHAPE_IDENTIFICATION: GetShapeType = T_EL_IDENTITY + Case SHAPE_ELEMENT: GetShapeType = GetElementaryType(target) + Case SHAPE_HEADER: GetShapeType = T_EL_HEADER + Case SHAPE_MINIATURE: GetShapeType = T_EL_MINIATURE + Case Else: GetShapeType = T_EL_UNKNOWN + End Select +End Function + +Public Function GetElementaryType(target As Visio.Shape) As TElement + If Not target.CellExistsU(CELLSU_ELEMENT_TYPE, visExistsAnywhere) Then + GetElementaryType = T_EL_COMMENT + Exit Function + End If + + Select Case (target.CellsU(CELLSU_ELEMENT_TYPE)) + Case T_SE_BASIC: GetElementaryType = T_EL_BASIC + Case T_SE_DERIVED: GetElementaryType = T_EL_DERIVED + Case T_SE_ASSERTION: GetElementaryType = T_EL_ASSERTION + Case T_SE_COMMENT: GetElementaryType = T_EL_COMMENT + Case T_SE_INTERPRETATION: GetElementaryType = T_EL_INTERPRETATION + Case Else: GetElementaryType = T_EL_BASIC + End Select +End Function + +Public Function ExtractPowerLevels(target As Visio.Page) As Scripting.Dictionary + Dim iGraph As CDS_Graph: Set iGraph = ScanGraph(ExtractGraphNodes(target), False) + Dim iOrder As Collection: Set iOrder = GeotopSort(target, iGraph) + Dim iReps As Scripting.Dictionary: Set iReps = ExtractRepresentatives(target) + Dim estimator As New PowerEstimator + Set ExtractPowerLevels = estimator.Estimate(iGraph, iOrder, iReps) +End Function + +Public Function ExtractRepresentatives(target As Visio.Page) As Scripting.Dictionary + Dim iReps As New Scripting.Dictionary + + Dim schemas As Collection: Set schemas = ExtractGraphNodes(target) + Dim textReps As New Scripting.Dictionary + Dim aShape As Visio.Shape + Dim sText$ + For Each aShape In schemas + If aShape.MasterShape.Name = SHAPE_SCHEMA Then + sText = TrimEnumerator(aShape.Text) + If Not textReps.Exists(sText) Then _ + Call textReps.Add(sText, aShape.ID) + End If + Next aShape + + For Each aShape In schemas + If aShape.MasterShape.Name = SHAPE_PROXY Then + sText = TrimEnumerator(aShape.Text) + If textReps.Exists(sText) Then _ + Call iReps.Add(aShape.ID, textReps(sText)) + End If + Next aShape + + Set ExtractRepresentatives = iReps +End Function + +' ========= +Private Function IsNumerated(sText$) As Boolean + IsNumerated = True + + If sText Like "#### *" Or sText Like "!#### *" Then _ + Exit Function + If sText Like "### *" Or sText Like "!### *" Then _ + Exit Function + If sText Like "## *" Or sText Like "!## *" Then _ + Exit Function + If sText Like "# *" Or sText Like "!# *" Then _ + Exit Function + If sText Like "[?][?][?] *" Then _ + Exit Function + + IsNumerated = False +End Function diff --git a/src/Declarations.bas b/src/Declarations.bas new file mode 100644 index 0000000..dcd76eb --- /dev/null +++ b/src/Declarations.bas @@ -0,0 +1,112 @@ +Attribute VB_Name = "Declarations" +Option Private Module +Option Explicit + +Public Const MASTER_BLOCK = "" +Public Const MASTER_ELEMENT = "" +Public Const MASTER_IDENTIFICATION = "" +Public Const MASTER_HEADER = "" +Public Const MASTER_SCHEMA = "" +Public Const MASTER_OPERATION = "" +Public Const MASTER_PROXY = "" +Public Const MASTER_MINIATURE = "" + +Public Const SHAPE_BLOCK = "Blocks.Block" +Public Const SHAPE_ELEMENT = "Blocks.Element" +Public Const SHAPE_IDENTIFICATION = "Blocks.IdentityPair" +Public Const SHAPE_HEADER = "Blocks.Header" +Public Const SHAPE_SCHEMA = "Blocks.SchemaContainer" +Public Const SHAPE_OPERATION = "Blocks.OperationContainer" +Public Const SHAPE_PROXY = "Blocks.Proxy" +Public Const SHAPE_MINIATURE = "Blocks.Summary" + +Public Const OPERATION_GAP = 30# / 25.4 ' mm to inches +Public Const HEADER_MARGINS = 20# / 25.4 +Public Const HEADER_MAX_WIDTH = 1300 / 25.4 +Public Const MINIATURE_OFFSET = 5# / 25.4 +Public Const MINIATURE_HEIGHT_MULTIPLIER = 1.75 + +Public Const CELLSU_CONTAINER_MARGINS = "User.msvSDContainerMargin" +Public Const CELLSU_BLOCK_HEADER = "User.ShowHeader" +Public Const CELLSU_ELEMENT_TYPE = "User.UType" +Public Const CELLSU_IS_INHERITED = "User.IsInherited" +Public Const CELLSU_IS_HIGHTLIGHT = "User.IsHighlight" + +Public Const TEMPLATE_PREFIX = "" +Public Const SERVER_TEMPLATES = "\\fs1.concept.ru\projects\10 \01 \-\" +Public Const HELP_FILE_PATH = "\\fs1.concept.ru\projects\10 \01 \-\! .docx" + +' Type of schema element +Public Enum TElement + T_EL_UNKNOWN = 0 + [_First] = 1 + + T_EL_BASIC = 1 + T_EL_DERIVED = 2 + T_EL_ASSERTION = 3 + T_EL_COMMENT = 4 + T_EL_INTERPRETATION = 5 + + T_EL_SCHEMA = 6 + T_EL_PROXY = 7 + T_EL_BLOCK = 8 + T_EL_OPERATION = 9 + T_EL_IDENTITY = 10 + + [_Last] = 10 + T_EL_HEADER = 20 + T_EL_MINIATURE = 21 +End Enum + +' Schema entity type +Public Enum TSchemaEntity + T_SE_COMMENT = 0 + T_SE_BASIC = 1 + T_SE_DERIVED = 2 + T_SE_INTERPRETATION = 3 + T_SE_ASSERTION = 4 +End Enum + +' -------- Excel ------------- +Public Const XL_TEMPLATE_NAME = "-Excel.xltx" + +Public Const XL_SHEET_SHAPES = "" +Public Const XL_SHEET_LINKS = "" + +Public Enum OutXLShapesStruct + [_First] = 1 + + S_XLS_ID = 1 + S_XLS_TYPE = 2 + S_XLS_POWER = 3 + S_XLS_TEXT1 = 4 + S_XLS_TEXT2 = 5 + S_XLS_CONTAINED = 6 + S_XLS_INHERITED = 7 + S_XLS_HIGHLIGHT = 8 + S_XLS_PINX = 9 + S_XLS_PINY = 10 + S_XLS_WIDTH = 11 + S_XLS_HEIGHT = 12 + + [_Last] = 12 +End Enum + +Public Enum OutXLLinksStruct + [_First] = 1 + + S_XLL_ID = 1 + S_XLL_SOURCE = 2 + S_XLL_DESTINATION = 3 + S_XLL_TEXT = 4 + + [_Last] = 4 +End Enum + +' -------- Word ------------- +Public Const WD_TEMPLATE_NAME = "-Word.dotx" + +Public Const WB_STYLE_TEXT = "! " +Public Const WB_STYLE_SCHEMA = " 2" +Public Const WB_STYLE_COMMENT = "! " +Public Const WB_STYLE_INTERPRETATION = "! " diff --git a/src/DevHelper.bas b/src/DevHelper.bas new file mode 100644 index 0000000..a2bde60 --- /dev/null +++ b/src/DevHelper.bas @@ -0,0 +1,24 @@ +Attribute VB_Name = "DevHelper" +Option Private Module +Option Explicit + +Public Function Dev_PrepareSkeleton() + ' Do nothing + Call ClearAll +End Function + +Public Function Dev_ManualRunTest() + Dim sSuite$: sSuite = "s_Operations" + Dim sTest$: sTest = "t_ToggleThemeColors" + Dim sMsg$: sMsg = Dev_RunTestDebug(sSuite, sTest) + Debug.Print sMsg + Call MsgBox(sMsg) +End Function + +Public Function Dev_GetTestSuite(sName$) As Object + Select Case sName + Case "s_DataAccess": Set Dev_GetTestSuite = New s_DataAccess + Case "s_ContextActions": Set Dev_GetTestSuite = New s_ContextActions + Case "s_Operations": Set Dev_GetTestSuite = New s_Operations + End Select +End Function diff --git a/src/Main.bas b/src/Main.bas new file mode 100644 index 0000000..bd968f2 --- /dev/null +++ b/src/Main.bas @@ -0,0 +1,269 @@ +Attribute VB_Name = "Main" +Option Explicit + +Public Const PRODUCT_VERSION = "1.3.0" +Public Const PRODUCT_NAME = "Concept-Blocks" + +Public g_VersionTimer As Long + +Public Sub StartVersionCheck() + g_VersionTimer = SetTimer(0, 0, CP_VERSION_MSG_DELAY, AddressOf OnVersionCheck) +End Sub + +Public Function OnVersionCheck(ByVal nHwnd As Long, ByVal uMsg As Long, ByVal nEvent As Long, ByVal nTime As Long) + Call KillTimer(0, g_VersionTimer) + Call VersionValidate(PRODUCT_NAME, PRODUCT_VERSION) +End Function + +Public Sub RunToggleHeaders() +Attribute RunToggleHeaders.VB_ProcData.VB_Invoke_Func = "t" + Call GlobalUndo.BeginScope("") + ThisDocument.DiagramServicesEnabled = visServiceStructureFull + + Dim iSelected As Visio.Selection: Set iSelected = ActiveWindow.Selection + If iSelected.Count <> 0 Then + Call ToggleHeadersSelected(iSelected) + Else + Call ToggleHeadersAll(ActivePage) + End If + + ActiveWindow.Selection = iSelected + + ThisDocument.DiagramServicesEnabled = 0 + Call GlobalUndo.EndScope +End Sub + +Public Sub RunWidthAdd10() +Attribute RunWidthAdd10.VB_ProcData.VB_Invoke_Func = "e" + Call CC_WidthAdd10 +End Sub + +Public Sub RunWidthSub10() +Attribute RunWidthSub10.VB_ProcData.VB_Invoke_Func = "q" + Call CC_WidthSub10 +End Sub + +Public Sub RunGotoLinkBegin() +Attribute RunGotoLinkBegin.VB_ProcData.VB_Invoke_Func = "Q" + Call CC_GotoLinkBegin +End Sub + +Public Sub RunGotoLinkEnd() +Attribute RunGotoLinkEnd.VB_ProcData.VB_Invoke_Func = "E" + Call CC_GotoLinkEnd +End Sub + +Public Sub RunToggleMiniatures() +Attribute RunToggleMiniatures.VB_ProcData.VB_Invoke_Func = "T" + Call GlobalUndo.BeginScope(" ") + + Call ToggleMiniatures(ActivePage) + Call ActiveWindow.DeselectAll + + Call GlobalUndo.EndScope +End Sub + +Public Sub RunToggleHighlight() +Attribute RunToggleHighlight.VB_ProcData.VB_Invoke_Func = "R" + Call GlobalUndo.BeginScope(" ") + + Call ToggleHighlight(ActiveWindow.Selection) + + Call GlobalUndo.EndScope +End Sub + +Public Sub RunToggleInherited() + Call GlobalUndo.BeginScope(" ") + + Call ToggleInherited(ActiveWindow.Selection) + + Call GlobalUndo.EndScope +End Sub + +Public Sub RunCycleElementType() +Attribute RunCycleElementType.VB_ProcData.VB_Invoke_Func = "r" + If ActiveWindow.Selection.Count = 0 Then + Call UserInteraction.ShowMessage(EM_SELECT_ELEMENT) + Exit Sub + End If + + Call GlobalUndo.BeginScope(" ") + + Dim aShape As Visio.Shape + For Each aShape In ActiveWindow.Selection + Call CycleElementType(aShape) + Next aShape + + Call GlobalUndo.EndScope +End Sub + +Public Sub RunReflectParents() + If ActiveWindow.Selection.Count <> 1 Then + Call UserInteraction.ShowMessage(EM_SELECT_SCHEMA) + Exit Sub + End If + + Call GlobalUndo.BeginScope("") + ThisDocument.DiagramServicesEnabled = visServiceStructureBasic + + Call ReflectParents(ActiveWindow.Selection(1)) + + ThisDocument.DiagramServicesEnabled = 0 + Call GlobalUndo.EndScope +End Sub + +Public Sub RunEnumerateSchemas() + Call GlobalUndo.BeginScope(" ") + Call EnumerateSchemasOn(ActivePage) + Call GlobalUndo.EndScope +End Sub + +Public Sub RunFixEnumeration() + Call GlobalUndo.BeginScope(" ") + Call FixEnumerationOn(ActivePage) + Call GlobalUndo.EndScope +End Sub + +Public Sub RunExportWord() + Dim iExporter As New WordExporter + If Not iExporter.Init(ThisDocument.Path) Then _ + Exit Sub + + Dim iPage As Visio.Page: Set iPage = ActivePage + Dim iOrder As Collection: Set iOrder = GeotopSort(iPage, ScanGraph(ExtractGraphNodes(iPage), False)) + + Call CSE_ProgressBar.Init(" ", maxVal:=iOrder.Count) + Call CSE_ProgressBar.ShowModeless + + Call iExporter.Export(iPage, iOrder) + + Call Unload(CSE_ProgressBar) + + Call UserInteraction.ShowMessage(IM_EXPORT_OK) +End Sub + +Public Sub RunExportExcel() + Dim iExporter As New XLExporter + If Not iExporter.Init(ThisDocument.Path) Then _ + Exit Sub + + Call CSE_ProgressBar.Init(" ", maxVal:=ActivePage.Shapes.Count) + Call CSE_ProgressBar.ShowModeless + Call iExporter.Export(ActivePage) + Call Unload(CSE_ProgressBar) + + Call UserInteraction.ShowMessage(IM_EXPORT_OK) +End Sub + +Public Sub RunToggleColorTheme() + Call GlobalUndo.BeginScope(" ") + Call ToggleThemeColors(ActivePage) + Call GlobalUndo.EndScope +End Sub + +Public Sub RunHelp() + Dim wordWrap As New API_WordWrapper + Dim helpDoc As Word.Document: Set helpDoc = wordWrap.OpenDocument(HELP_FILE_PATH, bReadOnly:=True) + If helpDoc Is Nothing Then _ + Exit Sub + With helpDoc + .ActiveWindow.View.ReadingLayout = False + Call .Application.Activate + End With +End Sub + +' ===== Context menu API ======== +Public Function ToggleHeaderFor(target As Visio.Shape) + Call GlobalUndo.BeginScope("") + ThisDocument.DiagramServicesEnabled = visServiceStructureFull + + Dim iSelected As Visio.Selection: Set iSelected = ActiveWindow.Selection + Dim bShow As Boolean: bShow = CellsGetValue(target, CELLSU_BLOCK_HEADER) + Call ShowHeader(target, Not bShow) + ActiveWindow.Selection = iSelected + + ThisDocument.DiagramServicesEnabled = 0 + Call GlobalUndo.EndScope +End Function + +Public Function MinimizeListContainer(target As Visio.Shape) + If target.Shapes.Count <> 2 Then + Call UserInteraction.ShowMessage(EM_MINIMIZE_CONTAINERS_ONLY) + Exit Function + End If + + Call GlobalUndo.BeginScope("") + + Call target.Resize(visResizeDirS, target.Shapes(2).CellsU("Height") - target.CellsU("Height"), visInches) + + Call GlobalUndo.EndScope +End Function + +Public Function FixElementsWidthFor(target As Visio.Shape) + ThisDocument.DiagramServicesEnabled = visServiceStructureBasic + + Dim itemWidth As Double: itemWidth = target.CellsU("Width") - 2 * target.CellsU(CELLSU_CONTAINER_MARGINS) + Dim memberID As Variant + Dim itemShape As Visio.Shape + For Each memberID In target.ContainerProperties.GetListMembers + Set itemShape = target.ContainingPage.Shapes.ItemFromID(memberID) + Call itemShape.Resize(visResizeDirE, itemWidth - itemShape.CellsU("Width"), visInches) + Next memberID + + ThisDocument.DiagramServicesEnabled = 0 +End Function + +Public Function FitToContentsFor(target As Visio.Shape) + Dim tmp&: tmp = target.ContainerProperties.ResizeAsNeeded + target.ContainerProperties.ResizeAsNeeded = visContainerAutoResizeExpandContract + DoEvents + target.ContainerProperties.ResizeAsNeeded = tmp +End Function + +Public Function CreateProxyFor(target As Visio.Shape) + Call GlobalUndo.BeginScope(" ") + ThisDocument.DiagramServicesEnabled = visServiceStructureFull + + Dim iProxy As Visio.Shape: Set iProxy = CreateProxyShape(target) + Call ActiveWindow.Select(iProxy, visSelect) + + ThisDocument.DiagramServicesEnabled = 0 + Call GlobalUndo.EndScope +End Function + +Public Function CreateOperationFor(target As Visio.Shape) + If CountInboundConnects(target) < 1 Then + Call UserInteraction.ShowMessage(EM_OPERANDS_MISSING) + Exit Function + End If + + Call GlobalUndo.BeginScope(" ") + ThisDocument.DiagramServicesEnabled = visServiceStructureFull + + Dim iOperation As Visio.Shape: Set iOperation = CreateOperationShape(target) + Call ActiveWindow.Select(iOperation, visSelect) + + ThisDocument.DiagramServicesEnabled = 0 + Call GlobalUndo.EndScope +End Function + +Public Function RenameSchema(target As Visio.Shape) + Dim sInput$: sInput = UserInteraction.PromptInput(" ", sInitial:=TrimEnumerator(target.Text)) + If sInput = vbNullString Then _ + Exit Function + + Call GlobalUndo.BeginScope(" ") + Call RenameSchemaDeep(target, sInput) + Call GlobalUndo.EndScope +End Function + +' ========== +Private Function CountInboundConnects(target As Visio.Shape) As Long + Dim nCount& + Dim iConnect As Visio.Connect + For Each iConnect In target.FromConnects + If target = iConnect.FromSheet.Connects(2).ToSheet Then _ + nCount = nCount + 1 + Next iConnect + CountInboundConnects = nCount +End Function diff --git a/src/MainImpl.bas b/src/MainImpl.bas new file mode 100644 index 0000000..529faaf --- /dev/null +++ b/src/MainImpl.bas @@ -0,0 +1,376 @@ +Attribute VB_Name = "MainImpl" +Option Private Module +Option Explicit + +Public Function ClearAll() + Call VsoClearPage(ActivePage) +End Function + +Public Function CycleElementType(target As Visio.Shape) + If Not target.CellExistsU(CELLSU_ELEMENT_TYPE, visExistsAnywhere) Then _ + Exit Function + + Select Case (target.CellsU(CELLSU_ELEMENT_TYPE)) + Case T_SE_BASIC: target.CellsU(CELLSU_ELEMENT_TYPE) = 2 + Case T_SE_DERIVED: target.CellsU(CELLSU_ELEMENT_TYPE) = 4 + Case T_SE_ASSERTION: target.CellsU(CELLSU_ELEMENT_TYPE) = 0 + Case T_SE_COMMENT: target.CellsU(CELLSU_ELEMENT_TYPE) = 3 + Case T_SE_INTERPRETATION: target.CellsU(CELLSU_ELEMENT_TYPE) = 1 + Case Else: target.CellsU(CELLSU_ELEMENT_TYPE) = 1 + End Select +End Function + +Public Function ToggleInherited(targets As Visio.Selection) + Dim aShape As Visio.Shape + For Each aShape In targets + If aShape.CellExistsU(CELLSU_IS_INHERITED, visExistsAnywhere) Then _ + aShape.CellsU(CELLSU_IS_INHERITED).FormulaU = IIf(aShape.CellsU(CELLSU_IS_INHERITED).Result(visLogical), "FALSE", "TRUE") + Next aShape +End Function + +Public Function ToggleHighlight(targets As Visio.Selection) + Dim aShape As Visio.Shape + For Each aShape In targets + If aShape.CellExistsU(CELLSU_IS_HIGHTLIGHT, visExistsAnywhere) Then _ + aShape.CellsU(CELLSU_IS_HIGHTLIGHT).FormulaU = IIf(aShape.CellsU(CELLSU_IS_HIGHTLIGHT).Result(visLogical), "FALSE", "TRUE") + Next aShape +End Function + +Public Function ToggleMiniatures(target As Visio.Page) + If ClearMiniatures(target) = 0 Then _ + Call CreateMiniatures(target) +End Function + +Public Function EnumerateSchemasOn(target As Visio.Page) + Dim shapeOrder As Collection: Set shapeOrder = GeotopSort(target, ScanGraph(ExtractGraphNodes(target), False)) + Dim indexBase As Scripting.Dictionary: Set indexBase = EnumerateSchemas(shapeOrder) + Call EnumerateProxies(shapeOrder, indexBase) +End Function + +Public Function FixEnumerationOn(target As Visio.Page) + Dim shapeOrder As Collection: Set shapeOrder = GeotopSort(target, ScanGraph(ExtractGraphNodes(target), False)) + Dim indexBase As New Scripting.Dictionary: Set indexBase = FixSchemas(target, shapeOrder) + Call EnumerateProxies(shapeOrder, indexBase) +End Function + +Public Function ReflectParents(target As Visio.Shape) + Dim iGraph As CDS_Graph: Set iGraph = ScanGraph(CColl(target), True) + + Dim dBaseX As Double: dBaseX = target.CellsU("PinX") + + Dim nShapeID As Variant + Dim aShape As Visio.Shape + For Each nShapeID In iGraph.Nodes + Set aShape = target.Parent.Shapes.ItemFromID(nShapeID) + If aShape.MasterShape.Name = SHAPE_OPERATION Then _ + Call SwapIdentifications(aShape) + aShape.CellsU("PinX") = dBaseX + (dBaseX - aShape.CellsU("PinX")) + Next nShapeID +End Function + +Public Function ToggleThemeColors(iPage As Visio.Page) + Dim aShape As Visio.Shape + Dim bFirst As Boolean: bFirst = True + Dim bMakeLighter As Boolean + For Each aShape In iPage.Shapes + If aShape.MasterShape.Name <> SHAPE_ELEMENT Then _ + GoTo NEXT_SHAPE + + If bFirst Then + bFirst = False + bMakeLighter = aShape.CellsU("User.Color1").FormulaU <> "RGB(233,244,226)" + End If + + Call ToggleElementColor(aShape, bMakeLighter) + +NEXT_SHAPE: + Next aShape +End Function + +Public Function CreateOperationShape(target As Visio.Shape) As Visio.Shape + Dim iOperation As Visio.Shape + With target + Set iOperation = .ContainingPage.Drop(FindMaster(.Document, MASTER_OPERATION), .CellsU("PinX"), .CellsU("PinY")) + iOperation.CellsU("PinY") = .CellsU("PinY") + .CellsU("Height") / 2# + iOperation.CellsU("Height") / 2# + OPERATION_GAP + End With + + Dim connection As Visio.Connect + For Each connection In target.FromConnects + If target = connection.FromSheet.Connects(2).ToSheet Then _ + Call connection.FromSheet.CellsU("EndX").GlueTo(iOperation.CellsSRC(7, 1, 0)) + Next connection + + Call iOperation.AutoConnect(target, visAutoConnectDirNone) + Set CreateOperationShape = iOperation +End Function + +Public Function CreateProxyShape(target As Visio.Shape) As Visio.Shape + Dim newShape As Visio.Shape + With target + Set newShape = .ContainingPage.Drop(FindMaster(.Document, MASTER_PROXY), .CellsU("PinX"), .CellsU("PinY")) + newShape.Text = .Text + newShape.CellsU("PinX") = .CellsU("PinX") + .CellsU("Width") / 2# + newShape.CellsU("Width") / 2# + End With + Set CreateProxyShape = newShape +End Function + +Public Function ToggleHeadersSelected(iSelected As Visio.Selection) + Dim aShape As Visio.Shape + Dim bShow As Boolean + For Each aShape In iSelected + If GetShapeType(aShape) <> T_EL_BLOCK Then _ + GoTo NEXT_SHAPE + + bShow = CellsGetValue(aShape, CELLSU_BLOCK_HEADER) + Call ShowHeader(aShape, Not bShow) + +NEXT_SHAPE: + Next aShape +End Function + +Public Function ToggleHeadersAll(iPage As Visio.Page) + Dim aShape As Visio.Shape + Dim bFirst As Boolean: bFirst = True + Dim bShow As Boolean + For Each aShape In iPage.Shapes + If GetShapeType(aShape) <> T_EL_BLOCK Then _ + GoTo NEXT_SHAPE + + If bFirst Then + bFirst = False + bShow = CellsGetValue(aShape, CELLSU_BLOCK_HEADER) + bShow = Not bShow + End If + + Call ShowHeader(aShape, bShow) + +NEXT_SHAPE: + Next aShape +End Function + +Public Function ShowHeader(target As Visio.Shape, bShow As Boolean) As Visio.Shape + Call ResetHeader(target) + Call CellsSetValue(target, CELLSU_BLOCK_HEADER, bShow) + If bShow Then _ + Set ShowHeader = CreateHeader(target) +End Function + +Public Function GeotopSort(iPage As Visio.Page, iGraph As CDS_Graph) As Collection + If iGraph.Size = 0 Then + Set GeotopSort = New Collection + Exit Function + End If + + Dim ids() As Long: ids = ToLongArray(iGraph.Nodes) + Call VsoGeometricSort(ids, iPage) + + Dim iSorter As New API_GraphOrdering: Call iSorter.Init(iGraph) + Set GeotopSort = iSorter.SortLayers(FromArray(ids)) +End Function + +Public Function RenameSchemaDeep(target As Visio.Shape, sInput$) + Dim sPrefix$: sPrefix = target.Text + Dim sName$: sName = TrimEnumerator(target.Text) + If sName = sPrefix Then + sPrefix = vbNullString + Else + sPrefix = VBA.Left(sPrefix, VBA.Len(sPrefix) - VBA.Len(sName)) + End If + + target.Text = sPrefix & sInput + Call RenameProxies(target.Parent, sPrefix, sName, sInput) +End Function + +' =========== +Private Function ResetHeader(target As Visio.Shape) + Dim memberID As Variant + Dim iPage As Visio.Page: Set iPage = target.ContainingPage + Dim itemShape As Visio.Shape + For Each memberID In target.ContainerProperties.GetMemberShapes(visContainerFlagsDefault) + Set itemShape = iPage.Shapes.ItemFromID(memberID) + If GetShapeType(itemShape) = T_EL_HEADER Then + Call itemShape.Delete + Exit Function + End If + Next memberID +End Function + +Private Function CreateHeader(target) As Visio.Shape + Dim newShape As Visio.Shape + With target + Set newShape = .ContainingPage.Drop(FindMaster(.Document, MASTER_HEADER), .CellsU("PinX"), .CellsU("PinY")) + newShape.CellsU("LockTextEdit") = 0 + newShape.Text = .Text + newShape.CellsU("LockTextEdit") = 1 + newShape.CellsU("Width") = IIf(HEADER_MAX_WIDTH > .CellsU("Width") - HEADER_MARGINS, .CellsU("Width") - HEADER_MARGINS, HEADER_MAX_WIDTH) + End With + Set CreateHeader = newShape +End Function + +Private Function ClearMiniatures(target As Visio.Page) As Long + Dim cDelete As New Collection + Dim iShape As Visio.Shape + For Each iShape In target.Shapes + If GetShapeType(iShape) = T_EL_MINIATURE Then _ + Call cDelete.Add(iShape) + Next iShape + + For Each iShape In cDelete + Call iShape.Delete + Next iShape + + ClearMiniatures = cDelete.Count +End Function + +Private Function CreateMiniatures(target As Visio.Page) + Dim sText$ + Dim dHeight As Double + Dim iMiniature As Visio.Shape + Dim iSchema As Visio.Shape + For Each iSchema In ExtractSchemas(target) + Set iMiniature = target.Drop(FindMaster(iSchema.Document, MASTER_MINIATURE), iSchema.CellsU("PinX"), iSchema.CellsU("PinY")) + iMiniature.CellsU("Width") = iSchema.CellsU("Width") + 2 * MINIATURE_OFFSET + iMiniature.Shapes(2).Text = iSchema.Text + + dHeight = 0 + sText = "" + + Dim nElement As Variant + Dim iElement As Visio.Shape + Dim elems As Variant: elems = iSchema.ContainerProperties.GetListMembers + For Each nElement In elems + Set iElement = target.Shapes.ItemFromID(nElement) + If CellsGetValue(iElement, CELLSU_IS_HIGHTLIGHT) Then + dHeight = dHeight + iElement.CellsU("Height") + If sText = vbNullString Then + sText = iElement.Text + Else + sText = sText & vbNewLine & iElement.Text + End If + End If + Next nElement + + iMiniature.Shapes(1).Text = sText + iMiniature.CellsU("Height") = iMiniature.Shapes(2).CellsU("Height") + dHeight * MINIATURE_HEIGHT_MULTIPLIER + iMiniature.CellsU("PinY") = iSchema.CellsU("PinY") + iSchema.CellsU("Height") / 2# - iMiniature.CellsU("Height") / 2# + MINIATURE_OFFSET + + Next iSchema +End Function + +Private Function SwapIdentifications(target As Visio.Shape) + Dim memberID As Variant + Dim member As Visio.Shape + For Each memberID In target.ContainerProperties.GetListMembers + Set member = target.ContainingPage.Shapes.ItemFromID(memberID) + If member.MasterShape.Name = SHAPE_IDENTIFICATION Then + Dim sText$: sText = member.Shapes(1).Text + member.Shapes(1).Text = member.Shapes(2).Text + member.Shapes(2).Text = sText + End If + Next memberID +End Function + +Private Function EnumerateSchemas(shapeOrder As Collection) As Scripting.Dictionary + Dim indexBase As New Scripting.Dictionary + Dim nNext&: nNext = 1 + Dim shapeID As Variant + Dim aShape As Visio.Shape + For Each shapeID In shapeOrder + Set aShape = ActivePage.Shapes.ItemFromID(shapeID) + If aShape.MasterShape.Name = SHAPE_SCHEMA Then + Dim sText$: sText = TrimEnumerator(aShape.Text) + If Not indexBase.Exists(sText) Then + Call indexBase.Add(sText, nNext) + nNext = nNext + 1 + aShape.Text = AppendEnumerator(sText, indexBase(sText)) + Else + aShape.Text = "!" + AppendEnumerator(sText, indexBase(sText)) + End If + End If + Next shapeID + Set EnumerateSchemas = indexBase +End Function + +Private Function EnumerateProxies(iOrder As Collection, indexBase As Scripting.Dictionary) + Dim shapeID As Variant + Dim aShape As Visio.Shape + For Each shapeID In iOrder + Set aShape = ActivePage.Shapes.ItemFromID(shapeID) + If aShape.MasterShape.Name = SHAPE_PROXY Then + Dim sText$: sText = TrimEnumerator(aShape.Text) + If Not indexBase.Exists(sText) Then + aShape.Text = "??? " + sText + Else + aShape.Text = AppendEnumerator(sText, indexBase(sText)) + End If + End If + Next shapeID +End Function + +Private Function FixSchemas(iPage As Visio.Page, iOrder As Collection) As Scripting.Dictionary + Dim indexBase As New Scripting.Dictionary + Dim nMaxIndex&: nMaxIndex = 0 + + Dim sText$ + Dim aShape As Visio.Shape + Dim shapeID As Variant + For Each shapeID In iOrder + Set aShape = iPage.Shapes.ItemFromID(shapeID) + If aShape.MasterShape.Name <> SHAPE_SCHEMA Then _ + GoTo NEXT_SHAPE + + Dim enumerator&: enumerator = ExtractEnumerator(aShape.Text) + If enumerator = 0 Then _ + GoTo NEXT_SHAPE + If enumerator > nMaxIndex Then _ + nMaxIndex = enumerator + + sText = TrimEnumerator(aShape.Text) + If Not indexBase.Exists(sText) Then + Call indexBase.Add(sText, enumerator) + Else + aShape.Text = "!" + AppendEnumerator(sText, enumerator) + End If +NEXT_SHAPE: + Next shapeID + + Dim nextIndex&: nextIndex = nMaxIndex + 1 + For Each shapeID In iOrder + Set aShape = iPage.Shapes.ItemFromID(shapeID) + If aShape.MasterShape.Name = SHAPE_SCHEMA Then + sText = TrimEnumerator(aShape.Text) + If Not indexBase.Exists(sText) Then + Call indexBase.Add(sText, nextIndex) + nextIndex = nextIndex + 1 + aShape.Text = AppendEnumerator(sText, indexBase(sText)) + End If + End If + Next shapeID + + Set FixSchemas = indexBase +End Function + +Private Function RenameProxies(iPage As Visio.Page, sPrefix$, sOldName$, sNewName$) + Dim aShape As Visio.Shape + For Each aShape In iPage.Shapes + If aShape.MasterShape.Name = SHAPE_PROXY Then _ + If TrimEnumerator(aShape.Text) = sOldName Then _ + aShape.Text = sPrefix & sNewName + Next aShape +End Function + +Private Function ToggleElementColor(target As Visio.Shape, bMakeLighter As Boolean) + With target + If bMakeLighter Then + .CellsU("User.Color1").FormulaU = "RGB(233,244,226)" + .CellsU("User.Color2").FormulaU = "RGB(213,241,255)" + .CellsU("User.Color3").FormulaU = "RGB(238,227,240)" + .CellsU("User.Color4").FormulaU = "RGB(255,216,213)" + Else + .CellsU("User.Color1").FormulaU = "=" + .CellsU("User.Color2").FormulaU = "=" + .CellsU("User.Color3").FormulaU = "=" + .CellsU("User.Color4").FormulaU = "=" + End If + End With +End Function diff --git a/src/PowerEstimator.cls b/src/PowerEstimator.cls new file mode 100644 index 0000000..b36820c --- /dev/null +++ b/src/PowerEstimator.cls @@ -0,0 +1,71 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "PowerEstimator" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +' ====== Estimate power level according to graph synthesis ==== +Option Explicit + +Private graph_ As CDS_Graph +Private powerLevels_ As Scripting.Dictionary +Private visiting_ As Scripting.Dictionary +Private reps_ As Scripting.Dictionary + +Public Function Estimate(iGraph As CDS_Graph, iOrder As Collection, iReps As Scripting.Dictionary) As Scripting.Dictionary + Set graph_ = iGraph + Set reps_ = iReps + Call Reset + + Dim vNode As Variant + For Each vNode In iOrder + Call GetPowerRecursive(vNode) + Next vNode + + Set Estimate = powerLevels_ +End Function + +' =========== +Private Function Reset() + Set powerLevels_ = New Scripting.Dictionary + Set visiting_ = New Scripting.Dictionary + Set reps_ = New Scripting.Dictionary +End Function + +Private Function GetPowerRecursive(vNode As Variant) As Long + If reps_.Exists(vNode) Then _ + vNode = reps_(vNode) + + If visiting_.Exists(vNode) Then + Call MsgBox("! !", vbExclamation) ' TODO: extract message and raise error instead + GetPowerRecursive = 0 + Exit Function + End If + + If powerLevels_.Exists(vNode) Then + GetPowerRecursive = powerLevels_(vNode) + Exit Function + End If + + Call visiting_.Add(vNode, 0) + + Dim parentCount&: parentCount = graph_.nodes_(vNode).inputs_.Count + Dim nLevel& + If parentCount = 0 Then + nLevel = 1 + Else + nLevel = 0 + Dim vChild As Variant + For Each vChild In graph_.nodes_(vNode).inputs_ + nLevel = nLevel + GetPowerRecursive(vChild) + Next vChild + End If + + Call visiting_.Remove(vNode) + + Call powerLevels_.Add(vNode, nLevel) + GetPowerRecursive = nLevel +End Function diff --git a/src/ThisDocument.cls b/src/ThisDocument.cls new file mode 100644 index 0000000..8d5a8b6 --- /dev/null +++ b/src/ThisDocument.cls @@ -0,0 +1,22 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "ThisDocument" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = True +Attribute VB_Exposed = True +Option Explicit + +Private Sub Document_DocumentOpened(ByVal iDoc As IVDocument) + If iDoc.ID <> ThisDocument.ID Then _ + Exit Sub + + Dim sCmd$: sCmd = OfficeCommandLine + If VBA.InStr(1, sCmd, "/automation", vbTextCompare) <> 0 Then _ + Exit Sub + + Call StartVersionCheck +End Sub + diff --git a/src/WordExporter.cls b/src/WordExporter.cls new file mode 100644 index 0000000..0712b83 --- /dev/null +++ b/src/WordExporter.cls @@ -0,0 +1,82 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "WordExporter" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Private app_ As API_WordWrapper +Private out_ As Word.Document +Private source_ As Visio.Page + +Public Function Init(sLocalTemplates$) As Boolean + Init = False + + Set app_ = New API_WordWrapper + Dim sTemplate$: sTemplate = GetTemplate(WD_TEMPLATE_NAME, sLocalTemplates) + If sTemplate = vbNullString Then + Call UserInteraction.ShowMessage(EM_WORD_MISSING_TEMPLATE) + Exit Function + End If + Set out_ = app_.NewDocument(sTemplate) + If out_ Is Nothing Then _ + Exit Function + + Init = True +End Function + +Public Function Export(iSource As Visio.Page, iOrder As Collection) + Set source_ = iSource + Call app_.PauseUI + + Dim shapeID As Variant + Dim aShape As Visio.Shape + For Each shapeID In iOrder + Set aShape = source_.Shapes.ItemFromID(CLng(shapeID)) + If aShape.MasterShape.Name = SHAPE_SCHEMA Then _ + Call ExportSchema(aShape) + Call CSE_ProgressBar.IncrementA + Next shapeID + Call out_.TablesOfContents(1).Update + + Call app_.ResumeUI +End Function + +' ======== +Private Function ExportSchema(target As Visio.Shape) + Dim textPos As Word.Range + Set textPos = WordAddLine(VBA.Trim(target.Text), out_.Content, WB_STYLE_SCHEMA) + + Dim nCount&: nCount = UBound(target.ContainerProperties.GetListMembers) + 1 + If nCount = 0 Then _ + Exit Function + + Dim memberID As Variant + Dim bFirst As Boolean: bFirst = True + Dim aShape As Visio.Shape + For Each memberID In target.ContainerProperties.GetListMembers + Set aShape = source_.Shapes.ItemFromID(memberID) + Set textPos = WordAddLine(VBA.Trim(aShape.Text), textPos, ElementStyle(aShape)) + If Not bFirst Then _ + Set textPos = WordAddLine(vbNullString, textPos, WB_STYLE_TEXT) + bFirst = False + Next memberID +End Function + +Private Function ElementStyle(target As Visio.Shape) As String + If Not target.CellExistsU(CELLSU_ELEMENT_TYPE, visExistsAnywhere) Then _ + ElementStyle = WB_STYLE_TEXT + + Select Case (target.CellsU(CELLSU_ELEMENT_TYPE)) + Case T_SE_BASIC: ElementStyle = WB_STYLE_TEXT + Case T_SE_DERIVED: ElementStyle = WB_STYLE_TEXT + Case T_SE_ASSERTION: ElementStyle = WB_STYLE_TEXT + Case T_SE_COMMENT: ElementStyle = WB_STYLE_COMMENT + Case T_SE_INTERPRETATION: ElementStyle = WB_STYLE_INTERPRETATION + Case Else: ElementStyle = WB_STYLE_TEXT + End Select +End Function diff --git a/src/XLExporter.cls b/src/XLExporter.cls new file mode 100644 index 0000000..8e46ca8 --- /dev/null +++ b/src/XLExporter.cls @@ -0,0 +1,106 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "XLExporter" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Private app_ As API_XLWrapper +Private outLinks_ As Excel.Worksheet +Private outShapes_ As Excel.Worksheet + +Private powers_ As Scripting.Dictionary +Private nLink_ As Long +Private nShape_ As Long + +Public Function Init(sLocalTemplates$) As Boolean + Set app_ = New API_XLWrapper + Dim sTemplate$: sTemplate = GetTemplate(XL_TEMPLATE_NAME, sLocalTemplates) + Init = Not app_.NewDocument(sTemplate, bDefaultIfFail:=True) Is Nothing + If Not Init Then _ + Exit Function + If sTemplate = vbNullString Then _ + Call PrepareDefaultOutput + Set outLinks_ = app_.Document.Sheets(XL_SHEET_LINKS) + Set outShapes_ = app_.Document.Sheets(XL_SHEET_SHAPES) +End Function + +Public Function Export(iSource As Visio.Page) + Call app_.PauseUI + + Set powers_ = ExtractPowerLevels(iSource) + nLink_ = 2 + nShape_ = 2 + Dim aShape As Visio.Shape + For Each aShape In iSource.Shapes + If aShape.OneD Then + If aShape.Connects.Count = 2 Then + Call ExportLink(aShape) + End If + Else + Call ExportShape(aShape) + End If + Call CSE_ProgressBar.IncrementA + Next aShape + + Call app_.ResumeUI +End Function + +' ========== +Private Function PrepareDefaultOutput() + Call UserInteraction.ShowMessage(EM_MISSING_TEMPLATE) + With app_.Document + .Sheets.Add + .Sheets(1).Name = XL_SHEET_SHAPES + .Sheets(2).Name = XL_SHEET_LINKS + End With +End Function + +Private Function ExportLink(target As Visio.Shape) + outLinks_.Cells(nLink_, S_XLL_ID) = target.ID + outLinks_.Cells(nLink_, S_XLL_SOURCE) = target.Connects(1).ToSheet.ID + outLinks_.Cells(nLink_, S_XLL_DESTINATION) = target.Connects(2).ToSheet.ID + outLinks_.Cells(nLink_, S_XLL_TEXT) = target.Text + nLink_ = nLink_ + 1 +End Function + +Private Function ExportShape(target As Visio.Shape) As Boolean + Dim nType As TElement: nType = GetShapeType(target) + If nType = T_EL_HEADER Or nType = T_EL_MINIATURE Then _ + Exit Function + + Dim bInherited As Boolean: bInherited = CellsGetValue(target, CELLSU_IS_INHERITED) + Dim bHighlighted As Boolean: bHighlighted = CellsGetValue(target, CELLSU_IS_HIGHTLIGHT) + Dim vParent As Visio.Shape: Set vParent = GetContainingShape(target) + + outShapes_.Cells(nShape_, S_XLS_ID) = target.ID + outShapes_.Cells(nShape_, S_XLS_TYPE) = nType + If powers_.Exists(target.ID) And nType = T_EL_SCHEMA Then _ + outShapes_.Cells(nShape_, S_XLS_POWER) = powers_(target.ID) + + If IsElementary(nType) Then + outShapes_.Cells(nShape_, S_XLS_INHERITED) = IIf(bInherited, "", "") + outShapes_.Cells(nShape_, S_XLS_HIGHLIGHT) = IIf(bHighlighted, "", "") + End If + + outShapes_.Cells(nShape_, S_XLS_PINX) = target.CellsU("PinX").Result(visMillimeters) + outShapes_.Cells(nShape_, S_XLS_PINY) = target.CellsU("PinY").Result(visMillimeters) + outShapes_.Cells(nShape_, S_XLS_WIDTH) = target.CellsU("Width").Result(visMillimeters) + outShapes_.Cells(nShape_, S_XLS_HEIGHT) = target.CellsU("Height").Result(visMillimeters) + + If Not vParent Is Nothing Then _ + outShapes_.Cells(nShape_, S_XLS_CONTAINED) = vParent.ID + + If nType <> T_EL_IDENTITY Then + outShapes_.Cells(nShape_, S_XLS_TEXT1) = target.Text + Else + outShapes_.Cells(nShape_, S_XLS_TEXT1) = target.Shapes(1).Text + outShapes_.Cells(nShape_, S_XLS_TEXT2) = target.Shapes(2).Text + End If + + nShape_ = nShape_ + 1 +End Function diff --git a/src/s_ContextActions.cls b/src/s_ContextActions.cls new file mode 100644 index 0000000..a41774d --- /dev/null +++ b/src/s_ContextActions.cls @@ -0,0 +1,164 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "s_ContextActions" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +' ====== Test context shape actions ====== +Option Explicit + +Private page_ As Visio.Page + +Public Function Setup() + ' Mandatory setup function + Set page_ = ThisDocument.Application.ActivePage +End Function + +Public Function Teardown() + ' Mandatory teardown function + Call ClearAll +End Function + +Public Function t_CycleElementType() + On Error GoTo PROPAGATE_ERROR + + Dim iShape As Visio.Shape + + Call Dev_NewCase("Not element") + Set iShape = page_.Drop(FindMaster(ThisDocument, MASTER_PROXY), 10, 10) + On Error Resume Next + Call CycleElementType(iShape) + Call Dev_ExpectNoError + On Error GoTo PROPAGATE_ERROR + + Call Dev_NewCase("Valid cycle") + Set iShape = page_.Drop(FindMaster(ThisDocument, MASTER_ELEMENT), 0, 10) + Call CellsSetValue(iShape, CELLSU_ELEMENT_TYPE, T_SE_BASIC) + Call CycleElementType(iShape) + Call Dev_ExpectEQ(T_SE_DERIVED, iShape.CellsU(CELLSU_ELEMENT_TYPE)) + Call CycleElementType(iShape) + Call Dev_ExpectEQ(T_SE_ASSERTION, iShape.CellsU(CELLSU_ELEMENT_TYPE)) + Call CycleElementType(iShape) + Call Dev_ExpectEQ(T_SE_COMMENT, iShape.CellsU(CELLSU_ELEMENT_TYPE)) + Call CycleElementType(iShape) + Call Dev_ExpectEQ(T_SE_INTERPRETATION, iShape.CellsU(CELLSU_ELEMENT_TYPE)) + Call CycleElementType(iShape) + Call Dev_ExpectEQ(T_SE_BASIC, iShape.CellsU(CELLSU_ELEMENT_TYPE)) + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_RenameSchemaDeep() + On Error GoTo PROPAGATE_ERROR + + Dim iSchema As Visio.Shape: Set iSchema = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 0, 0) + Dim iDuplicate As Visio.Shape: Set iDuplicate = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 10, 10) + Dim iProxy As Visio.Shape: Set iProxy = page_.Drop(FindMaster(ThisDocument, MASTER_PROXY), 20, 20) + iSchema.Text = "01 Test" + iDuplicate.Text = "01 Test" + iProxy.Text = "Test" + + Call RenameSchemaDeep(iSchema, "Test2") + Call Dev_ExpectEQ("01 Test2", iSchema.Text, "Rename keep prefix") + Call Dev_ExpectEQ("01 Test", iDuplicate.Text, "Do not rename duplicates") + Call Dev_ExpectEQ("01 Test2", iProxy.Text, "Rename proxies") + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_CreateProxyShape() + On Error GoTo PROPAGATE_ERROR + + Dim iSchema As Visio.Shape: Set iSchema = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 0, 0) + iSchema.Text = "Test" + + Dim iProxy As Visio.Shape: Set iProxy = CreateProxyShape(iSchema) + Call Dev_AssertNotNothing(iProxy) + Call Dev_ExpectEQ(SHAPE_PROXY, iProxy.MasterShape.Name, "Proxy master") + Call Dev_ExpectEQ(iSchema.Text, iProxy.Text, "Proxy texxt") + Call Dev_ExpectNE(iSchema.CellsU("PinX"), iProxy.CellsU("PinX"), "Proxy position") + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_CreateOperationShape() + On Error GoTo PROPAGATE_ERROR + + Call Dev_NewCase("No parents") + Dim iSchema As Visio.Shape: Set iSchema = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 0, 0) + Dim iOperation As Visio.Shape: Set iOperation = CreateOperationShape(iSchema) + Call Dev_AssertNotNothing(iOperation) + Call Dev_AssertEQ(3, page_.Shapes.Count, "Shapes count") + Call Dev_ExpectEQ(SHAPE_OPERATION, iOperation.MasterShape.Name, "Operation master") + Call Dev_ExpectAEQ(iOperation.CellsU("PinX"), iSchema.CellsU("PinX"), 1, "Operation position X") + Call Dev_ExpectGR(iOperation.CellsU("PinY"), iSchema.CellsU("PinY"), "Operation position Y") + Call Dev_ExpectTrue(VsoIsConnected(iOperation, iSchema), "Connection") + Call ClearAll + + Call Dev_NewCase("Valid parents") + Set iSchema = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 0, 0) + Dim iParent1 As Visio.Shape: Set iParent1 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 10, 10) + Dim iParent2 As Visio.Shape: Set iParent2 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), -10, 10) + Dim iChild As Visio.Shape: Set iChild = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 0, -10) + Call iParent1.AutoConnect(iSchema, visAutoConnectDirDown) + Call iParent2.AutoConnect(iSchema, visAutoConnectDirDown) + Call iSchema.AutoConnect(iChild, visAutoConnectDirDown) + + Set iOperation = CreateOperationShape(iSchema) + Call Dev_AssertEQ(9, page_.Shapes.Count, "Shapes count") + Call Dev_ExpectTrue(VsoIsConnected(iOperation, iSchema), "New Connection") + Call Dev_ExpectTrue(VsoIsConnected(iParent1, iOperation), "Connection redirect1") + Call Dev_ExpectTrue(VsoIsConnected(iParent2, iOperation), "Connection redirect2") + Call Dev_ExpectTrue(VsoIsConnected(iSchema, iChild), "Do not redirect child") + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_ShowHeader() + On Error GoTo PROPAGATE_ERROR + + ThisDocument.DiagramServicesEnabled = visServiceStructureFull + + Dim iBlock As Visio.Shape: Set iBlock = page_.Drop(FindMaster(ThisDocument, MASTER_BLOCK), 0, 0) + iBlock.Text = "Test" + + Call Dev_NewCase("Create valid header") + Dim iHeader As Visio.Shape: Set iHeader = ShowHeader(iBlock, bShow:=True) + Call Dev_AssertNotNothing(iHeader) + Call Dev_ExpectEQ(iBlock.Text, iHeader.Text, "Header text") + Call Dev_ExpectTrue(CellsGetValue(iBlock, CELLSU_BLOCK_HEADER), "Header flag") + Call Dev_ExpectAEQ(iBlock.CellsU("PinX"), iHeader.CellsU("PinX"), 1, "Header position") + + Call Dev_NewCase("Remove header") + Set iHeader = ShowHeader(iBlock, bShow:=False) + Call Dev_AssertNothing(iHeader) + Call Dev_ExpectEQ(1, page_.Shapes.Count, "Delete header") + Call Dev_ExpectFalse(CellsGetValue(iBlock, CELLSU_BLOCK_HEADER), "Header flag") + + Call Dev_NewCase("Change header") + Call ShowHeader(iBlock, bShow:=True) + iBlock.Text = "Test2" + Set iHeader = ShowHeader(iBlock, bShow:=True) + Call Dev_AssertNotNothing(iHeader) + Call Dev_ExpectEQ(2, page_.Shapes.Count, "Delete previous header") + Call Dev_ExpectEQ(iBlock.Text, iHeader.Text, "Header text") + Call Dev_ExpectTrue(CellsGetValue(iBlock, CELLSU_BLOCK_HEADER), "Header flag") + Call Dev_ExpectAEQ(iBlock.CellsU("PinX"), iHeader.CellsU("PinX"), 1, "Header position") + + ThisDocument.DiagramServicesEnabled = 0 + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function diff --git a/src/s_DataAccess.cls b/src/s_DataAccess.cls new file mode 100644 index 0000000..ff77089 --- /dev/null +++ b/src/s_DataAccess.cls @@ -0,0 +1,155 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "s_DataAccess" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +Option Explicit + +Private page_ As Visio.Page + +Public Function Setup() + ' Mandatory setup function + Set page_ = ThisDocument.Application.ActivePage +End Function + +Public Function Teardown() + ' Mandatory teardown function + Call ClearAll +End Function + +Public Function t_Enumerator() + On Error GoTo PROPAGATE_ERROR + + Call Dev_NewCase("Empty string") + Call Dev_ExpectEQ("", TrimEnumerator("")) + Call Dev_ExpectEQ(0, ExtractEnumerator("")) + + Call Dev_NewCase("Invalid enumerated") + Call Dev_ExpectEQ("1.1 Test", TrimEnumerator("1.1 Test")) + Call Dev_ExpectEQ(0, ExtractEnumerator("1.1 Test")) + Call Dev_ExpectEQ("1.1. Test", TrimEnumerator("1.1. Test")) + Call Dev_ExpectEQ(0, ExtractEnumerator("1.1. Test")) + + Call Dev_NewCase("Valid enumerated") + Call Dev_ExpectEQ("Test1", TrimEnumerator("1 Test1")) + Call Dev_ExpectEQ(1, ExtractEnumerator("1 Test1")) + Call Dev_ExpectEQ("Test2", TrimEnumerator("!2 Test2")) + Call Dev_ExpectEQ(2, ExtractEnumerator("!2 Test2")) + Call Dev_ExpectEQ("Test3", TrimEnumerator("??? Test3")) + Call Dev_ExpectEQ(0, ExtractEnumerator("??? Test3")) + + Call Dev_NewCase("Extract appended") + Dim sText$: sText = AppendEnumerator("Test", 1337) + Call Dev_ExpectEQ("Test", TrimEnumerator(sText)) + Call Dev_ExpectEQ(1337, ExtractEnumerator(sText)) + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_ExtractGraphNodes() + On Error GoTo PROPAGATE_ERROR + + Call Dev_ExpectEQ(0, ExtractGraphNodes(page_).Count, "Empty page") + + Call Dev_NewCase("Invalid shapes") + Call page_.DrawLine(0, 0, 1, 1) + Call page_.DrawRectangle(2, 2, 3, 3) + Call page_.Drop(FindMaster(ThisDocument, MASTER_ELEMENT), 10, 10) + Call page_.Drop(FindMaster(ThisDocument, MASTER_IDENTIFICATION), 15, 15) + Call Dev_ExpectEQ(0, ExtractGraphNodes(page_).Count) + + Call Dev_NewCase("Valid schemas") + Dim ks1 As Visio.Shape: Set ks1 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 20, 20) + ks1.Text = "Test1" + Dim ks2 As Visio.Shape: Set ks2 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 25, 25) + ks2.Text = "Test2" + Dim iOperation As Visio.Shape: Set iOperation = page_.Drop(FindMaster(ThisDocument, MASTER_OPERATION), 30, 30) + Dim iProxy As Visio.Shape: Set iProxy = page_.Drop(FindMaster(ThisDocument, MASTER_PROXY), 35, 35) + iProxy.Text = ks1.Text + Dim iBlock As Visio.Shape: Set iBlock = page_.Drop(FindMaster(ThisDocument, MASTER_BLOCK), 40, 40) + Dim iNodes As Collection: Set iNodes = CColl(ks1, ks2, iOperation, iProxy) + Call Dev_ExpectEQ(iNodes, ExtractGraphNodes(page_)) + + Call Dev_NewCase("Contained shapes") + Call iBlock.ContainerProperties.AddMember(ks2, visMemberAddExpandContainer) + Call Dev_ExpectEQ(iNodes, ExtractGraphNodes(page_)) + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_ExtractRepresentatives() + On Error GoTo PROPAGATE_ERROR + + Call Dev_ExpectEQ(0, ExtractRepresentatives(page_).Count, "Empty page") + + Call Dev_NewCase("Literal representatives") + Dim iSchema As Visio.Shape: Set iSchema = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 20, 20) + iSchema.Text = "Test" + Dim iProxy As Visio.Shape: Set iProxy = page_.Drop(FindMaster(ThisDocument, MASTER_PROXY), 35, 35) + iProxy.Text = "Test" + Dim iReps As New Scripting.Dictionary + iReps(iProxy.ID) = iSchema.ID + Call Dev_ExpectEQ(iReps, ExtractRepresentatives(page_)) + + Call Dev_NewCase("Invalid enumerated representatives") + iSchema.Text = "2 Test" + iProxy.Text = "1 Test" + Call Dev_ExpectEQ(iReps, ExtractRepresentatives(page_)) + + Call Dev_NewCase("Unrelated proxy") + iSchema.Text = "1 Test" + iProxy.Text = "1 Test1337" + Call Dev_ExpectEQ(0, ExtractRepresentatives(page_).Count) + + Call Dev_NewCase("Duplicate schema") + Dim iDuplicate As Visio.Shape: Set iDuplicate = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 30, 30) + iDuplicate.Text = iSchema.Text + Call Dev_ExpectEQ(0, ExtractRepresentatives(page_).Count) + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function + +Public Function t_ExtractPowerLevels() + On Error GoTo PROPAGATE_ERROR + + Call Dev_ExpectEQ(0, ExtractPowerLevels(page_).Count, "Empty page") + + Call Dev_NewCase("Unlinked nodes") + Dim ks1 As Visio.Shape: Set ks1 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 30, 30) + Dim ks2 As Visio.Shape: Set ks2 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 25, 25) + Dim ks3 As Visio.Shape: Set ks3 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 20, 20) + Dim ks4 As Visio.Shape: Set ks4 = page_.Drop(FindMaster(ThisDocument, MASTER_SCHEMA), 35, 35) + Dim iOperation As Visio.Shape: Set iOperation = page_.Drop(FindMaster(ThisDocument, MASTER_OPERATION), 15, 15) + Dim iLevels As New Scripting.Dictionary + iLevels(ks1.ID) = 1 + iLevels(ks2.ID) = 1 + iLevels(ks3.ID) = 1 + iLevels(ks4.ID) = 1 + iLevels(iOperation.ID) = 1 + Call Dev_ExpectEQ(iLevels, ExtractPowerLevels(page_)) + + Call Dev_NewCase("Valid graph") + Call ks1.AutoConnect(iOperation, visAutoConnectDirNone) + Call ks2.AutoConnect(iOperation, visAutoConnectDirNone) + Call iOperation.AutoConnect(ks3, visAutoConnectDirNone) + Call ks3.AutoConnect(ks4, visAutoConnectDirNone) + Call ks1.AutoConnect(ks4, visAutoConnectDirNone) + iLevels(ks3.ID) = 2 + iLevels(ks4.ID) = 3 + iLevels(iOperation.ID) = 2 + Call Dev_ExpectEQ(iLevels, ExtractPowerLevels(page_)) + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function diff --git a/src/s_Operations.cls b/src/s_Operations.cls new file mode 100644 index 0000000..52a0ff1 --- /dev/null +++ b/src/s_Operations.cls @@ -0,0 +1,47 @@ +VERSION 1.0 CLASS +BEGIN + MultiUse = -1 'True +END +Attribute VB_Name = "s_Operations" +Attribute VB_GlobalNameSpace = False +Attribute VB_Creatable = False +Attribute VB_PredeclaredId = False +Attribute VB_Exposed = False +' ====== Test block operations ====== +Option Explicit + +' TODO: +' Public Function EnumerateSchemasOn(target As Visio.Page) +' Public Function FixEnumerationOn(target As Visio.Page) +' Public Function ToggleHeadersSelected(iSelected As Visio.Selection) +' Public Function ToggleHeadersAll(iPage As Visio.Page) +' Public Function ToggleHighlight(targets As Visio.Selection) +' Public Function ToggleInherited(targets As Visio.Selection) +' Public Function ToggleMiniatures(target As Visio.Page) +' Public Function ReflectParents(target As Visio.Shape) +' Public Function ToggleThemeColors(iPage As Visio.Page) + +' Public Function ExportExcel(iSource As Visio.Page, iDestination As Excel.Workbook) +' Public Function ExportWord(iSource As Visio.Page, iDestination As Word.Document, iOrder As Collection) + +Private page_ As Visio.Page + +Public Function Setup() + ' Mandatory setup function + Set page_ = ThisDocument.Application.ActivePage +End Function + +Public Function Teardown() + ' Mandatory teardown function + Call ClearAll +End Function + +Public Function t_Init() + On Error GoTo PROPAGATE_ERROR + + + + Exit Function +PROPAGATE_ERROR: + Call Dev_LogError(Err.Number, Err.Description) +End Function diff --git a/src/z_UIMessages.bas b/src/z_UIMessages.bas new file mode 100644 index 0000000..b50e16d --- /dev/null +++ b/src/z_UIMessages.bas @@ -0,0 +1,72 @@ +Attribute VB_Name = "z_UIMessages" +' Messaging module +Option Private Module +Option Explicit + +Public Enum MsgCode + MSG_OK = 0 + + EM_SELECT_ELEMENT + EM_SELECT_SCHEMA + EM_MISSING_TEMPLATE + EM_MINIMIZE_CONTAINERS_ONLY + EM_OPERANDS_MISSING + EM_WORD_MISSING_TEMPLATE + + IM_EXPORT_OK + +' QM_CLEAR_ALL +End Enum + +Private g_UI As API_UserInteraction + +Public Function UserInteraction() As API_UserInteraction + If g_UI Is Nothing Then _ + Set g_UI = New API_UserInteraction + Set UserInteraction = g_UI +End Function + +Public Function SetUserInteraction(newUI As API_UserInteraction) + Set g_UI = newUI +End Function + +Public Function UIShowMessage(theCode As MsgCode, ParamArray params() As Variant) + Dim unwrapped As Variant: unwrapped = params + unwrapped = FixForwardedParams(unwrapped) + + Select Case theCode + Case EM_SELECT_ELEMENT + Call MsgBox(" ", vbExclamation) + Case EM_SELECT_SCHEMA + Call MsgBox(" ", vbExclamation) + Case EM_MISSING_TEMPLATE + Call MsgBox(" . ", vbExclamation) + Case EM_MINIMIZE_CONTAINERS_ONLY + Call MsgBox(" ", vbExclamation) + Case EM_OPERANDS_MISSING + Call MsgBox(" 1 ", vbExclamation) + Case EM_WORD_MISSING_TEMPLATE + Call MsgBox(" ", vbExclamation) + + Case IM_EXPORT_OK + Call MsgBox(" ", vbInformation) + + Case Else + Call MsgBox("Invalid message code", vbCritical) + End Select +End Function + +Public Function UIAskQuestion(theCode As MsgCode, ParamArray params() As Variant) As Boolean + Dim unwrapped As Variant: unwrapped = params + unwrapped = FixForwardedParams(unwrapped) + + Dim answer&: answer = vbNo + Select Case theCode +' Case QM_CLEAR_ALL +' answer = MsgBox(" ?", vbYesNo + vbQuestion) + + Case Else + Call MsgBox("Invalid message code", vbCritical) + End Select + UIAskQuestion = answer = vbYes +End Function diff --git a/src/z_UIRibbon.bas b/src/z_UIRibbon.bas new file mode 100644 index 0000000..0a3f1f4 --- /dev/null +++ b/src/z_UIRibbon.bas @@ -0,0 +1,26 @@ +Attribute VB_Name = "z_UIRibbon" +Option Explicit + +Public Sub OnAction(iControl As IRibbonControl) + Select Case iControl.ID + Case "ToggleHeaders": Call RunToggleHeaders + Case "ToggleMiniatures": Call RunToggleMiniatures + Case "CycleType": Call RunCycleElementType + Case "ToggleInherited": Call RunToggleInherited + Case "ToggleHighlight": Call RunToggleHighlight + Case "ReflectParents": Call RunReflectParents + Case "FixEnumeration": Call RunFixEnumeration + Case "EnumerateAll": Call RunEnumerateSchemas + + Case "ExportWord": Call RunExportWord + Case "ExportExcel": Call RunExportExcel + Case "ToggleTheme": Call RunToggleColorTheme + Case "GlobalHelp": Call RunHelp + + Case Else: Call CC_DispatchCommand(iControl.ID) + End Select +End Sub + +Public Sub OnUpdateRibbon(iControl As IRibbonControl, ByRef returnedVal) + returnedVal = True +End Sub diff --git a/ui/.rels b/ui/.rels new file mode 100644 index 0000000..dbe39dd --- /dev/null +++ b/ui/.rels @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/ui/customUI1.xml b/ui/customUI1.xml new file mode 100644 index 0000000..c50c9b4 --- /dev/null +++ b/ui/customUI1.xml @@ -0,0 +1,125 @@ + + + + + + +