|
From: <ob...@us...> - 2010-03-29 00:40:31
|
Revision: 706
http://scstudio.svn.sourceforge.net/scstudio/?rev=706&view=rev
Author: obouda
Date: 2010-03-29 00:40:24 +0000 (Mon, 29 Mar 2010)
Log Message:
-----------
Instances Field drawing feature reworked and completed. The dialog has changed, units are now taken into consideration, accessible via context menu, form values validation and error handling.
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/document.h
trunk/src/view/visio/addon/instancesfielddlg.cpp
trunk/src/view/visio/addon/instancesfielddlg.h
trunk/src/view/visio/addon/resource.h
trunk/src/view/visio/addon/scstudio.vcproj
trunk/src/view/visio/addon/stdafx.h
trunk/src/view/visio/stencils/Sequence Chart Studio/MSC-logo.vtx
trunk/src/view/visio/stencils/Sequence Chart Studio/MSC.vtx
Added Paths:
-----------
trunk/src/view/visio/addon/pageutils.cpp
trunk/src/view/visio/addon/pageutils.h
Modified: trunk/src/view/visio/addon/addon.cpp
===================================================================
--- trunk/src/view/visio/addon/addon.cpp 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/addon.cpp 2010-03-29 00:40:24 UTC (rev 706)
@@ -27,6 +27,7 @@
#include "extract.h"
#include "errors.h"
#include "resource.h"
+#include "pageutils.h"
// include command line parsing library SimpleOpt
// http://code.jellycan.com/simpleopt
@@ -57,6 +58,7 @@
{
m_pIAddonSink = NULL;
m_keyButtonState = 0;
+ m_mousePosX = m_mousePosY = 0.0;
};
VAORC CStudioAddon::About(LPVAOV2LSTRUCT pV2L)
@@ -265,6 +267,10 @@
case 101:
TRACE("CStudioAddon::Run() reference action 'Open Reference'");
return pDocumentMonitor->OnOpenReference(iDocumentIndex, iPageIndex, sShapeU);
+ case 102:
+ case CDocumentMonitor::MENU_INSTANCES_FIELD:
+ TRACE("CStudioAddon::Run() menu item 'Check--Drawing--Instances Field'");
+ return DoInstancesField(pDocumentMonitor, vsoApp);
case CDocumentMonitor::MENU_WINDOWS_REPORTER:
TRACE("CStudioAddon::Run() menu item 'Check--Windows--Verification Report'");
@@ -308,9 +314,6 @@
case CDocumentMonitor::MENU_SELECT_ADD_ALL_MESSAGES:
TRACE("CStudioAddon::Run() add all messages to the current selection");
return pDocumentMonitor->OnMenuSelectAllMessages(vsoApp, true);
- case CDocumentMonitor::MENU_INSTANCES_FIELD:
- TRACE("CStudioAddon::Run() menu item 'Check--Drawing--Instances Field'");
- return DoInstancesField(pDocumentMonitor, vsoApp);
default:
TRACE("CStudioAddon::Run() unexpected event id=" << iEvent);
@@ -372,7 +375,8 @@
VAORC CStudioAddon::DoInstancesField(CDocumentMonitor* documentMonitor, Visio::IVApplicationPtr vsoApp)
{
TRACE("CStudioAddon::DoInstancesField() called");
- CInstancesFieldDlg dlg;
+
+ CInstancesFieldDlg dlg(vsoApp, m_mousePosX, m_mousePosY);
if (!dlg.DoModal()) return VAORC_SUCCESS;
if (!documentMonitor->IsEmpty(vsoApp))
@@ -386,9 +390,16 @@
}
return documentMonitor->DrawInstancesField(
- vsoApp, dlg.m_instances_cnt,
- (dlg.m_use_const_spacing ? dlg.m_spacing : 0.0f),
- dlg.m_margin_left, dlg.m_margin_top, dlg.m_margin_right
+ vsoApp,
+ dlg.m_instances_cnt,
+ CPageUtils::ConvertUnits(vsoApp, dlg.m_instance_length, visPageUnits, visMillimeters),
+ CPageUtils::ConvertUnits(vsoApp, dlg.m_instance_width, visPageUnits, visMillimeters),
+ CPageUtils::ConvertUnits(vsoApp, dlg.m_start_pos_x, visPageUnits, visMillimeters),
+ CPageUtils::ConvertUnits(vsoApp,
+ (CPageUtils::GetPageHeight(vsoApp->ActivePage) - dlg.m_start_pos_y), // the drawing y-coordinates are upside down
+ visPageUnits, visMillimeters),
+ dlg.m_use_const_spacing,
+ CPageUtils::ConvertUnits(vsoApp, (dlg.m_use_const_spacing ? dlg.m_spacing : dlg.m_total_width), visPageUnits, visMillimeters)
);
}
@@ -441,6 +452,11 @@
HandleKeyUp(pSubjectObj, pSourceObj);
break;
+ case Visio::visEvtCodeMouseMove:
+ TRACE("CStudioAddon::HandleVisioEvent() visEvtCodeMouseMove");
+ HandleMouseMove(pSubjectObj, pSourceObj);
+ break;
+
default:
TRACE("CStudioAddon::HandleVisioEvent() unexpected event id="
<< std::ios::hex << event);
@@ -551,6 +567,12 @@
}
}
+void CStudioAddon::HandleMouseMove(Visio::IVMouseEventPtr vsoMouseEvent, Visio::IVApplicationPtr vsoApp)
+{
+ m_mousePosX = vsoMouseEvent->x;
+ m_mousePosY = vsoMouseEvent->y;
+}
+
void CStudioAddon::RegisterPersistentEvents(Visio::IVDocumentPtr vsoDocument)
{
Visio::IVEventPtr vsoDocumentCreateEvent = NULL;
@@ -618,9 +640,10 @@
m_vsoMarkerEvent = vsoApplicationEventList->AddAdvise(visEvtApp|visEvtMarker, varSink, _T(""), _T(""));
}
- // register key listening
+ // register key & mouse listening
vsoApp->EventList->AddAdvise(Visio::visEvtCodeKeyDown, varSink, _T(""), _T("KeyDown"));
vsoApp->EventList->AddAdvise(Visio::visEvtCodeKeyUp, varSink, _T(""), _T("KeyUp"));
+ vsoApp->EventList->AddAdvise(Visio::visEvtCodeMouseMove, varSink, _T(""), _T("MouseMove"));
// Create a monitor class to keep track of this document and the Events
// being monitored for this document.
Modified: trunk/src/view/visio/addon/addon.h
===================================================================
--- trunk/src/view/visio/addon/addon.h 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/addon.h 2010-03-29 00:40:24 UTC (rev 706)
@@ -53,6 +53,7 @@
void HandleMarker(Visio::IVApplicationPtr vsoApp);
void HandleKeyDown(Visio::IVKeyboardEventPtr vsoKeyboardEvent, Visio::IVApplicationPtr vsoApp);
void HandleKeyUp(Visio::IVKeyboardEventPtr vsoKeyboardEvent, Visio::IVApplicationPtr vsoApp);
+ void HandleMouseMove(Visio::IVMouseEventPtr vsoMouseEvent, Visio::IVApplicationPtr vsoApp);
void RegisterPersistentEvents(Visio::IVDocumentPtr vsoDocument);
CDocumentMonitor *GetDocumentMonitor(Visio::IVApplicationPtr vsoApp, Visio::IVDocumentPtr vsoDocument);
@@ -66,6 +67,8 @@
DocumentMonitorsMap m_DocumentMonitors;
long m_keyButtonState;
+ double m_mousePosX;
+ double m_mousePosY;
};
// $Id$
Modified: trunk/src/view/visio/addon/dllmodule.rc
===================================================================
--- trunk/src/view/visio/addon/dllmodule.rc 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/dllmodule.rc 2010-03-29 00:40:24 UTC (rev 706)
@@ -96,29 +96,35 @@
CONTROL "",IDC_DRAWING2,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,110,14,100,92
END
-IDD_INSTANCES_FIELD_OPTIONS DIALOGEX 0, 0, 186, 137
+IDD_INSTANCES_FIELD_OPTIONS DIALOGEX 0, 0, 201, 127
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Instances Field Options"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
- DEFPUSHBUTTON "OK",IDOK,131,5,50,14
- PUSHBUTTON "Cancel",IDCANCEL,131,25,50,14
+ DEFPUSHBUTTON "OK",IDOK,146,5,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,146,25,50,14
LTEXT "Number of instances:",IDC_STATIC,5,5,70,12,SS_CENTERIMAGE
- EDITTEXT IDC_IF_INSTANCES_CNT,80,5,40,14,ES_AUTOHSCROLL
- GROUPBOX "",IDC_OPTIONS_GROUP_BOX,5,42,176,90
- PUSHBUTTON "+",IDC_OPTIONS_SWITCH_BTN,5,41,10,10
- LTEXT " Options ",IDC_OPTIONS_SWITCH_LBL,19,41,30,8
- CONTROL "Use constant spacing between instances",IDC_IF_SPACING_SWITCH,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,57,146,10
- EDITTEXT IDC_IF_SPACING,69,69,40,14,ES_AUTOHSCROLL
- LTEXT "Spacing [mm]:",IDC_IF_LBL1,19,71,46,8
- LTEXT "Margins [mm]",IDC_IF_LBL2,10,87,44,8
- LTEXT "Left:",IDC_IF_LBL3,19,99,16,8
- EDITTEXT IDC_IF_MARGIN_LEFT,48,97,40,14,ES_AUTOHSCROLL
- LTEXT "Right:",IDC_IF_LBL4,100,99,30,8
- EDITTEXT IDC_IF_MARGIN_RIGHT,130,97,40,14,ES_AUTOHSCROLL
- LTEXT "Top:",IDC_IF_LBL5,19,115,16,8
- EDITTEXT IDC_IF_MARGIN_TOP,48,113,40,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_IF_INSTANCES_CNT,80,5,43,14,ES_AUTOHSCROLL
+ GROUPBOX "",IDC_OPTIONS_GROUP_BOX,5,73,191,50
+ LTEXT " Options ",IDC_OPTIONS_SWITCH_LBL,19,73,30,8
+ LTEXT "Instance length:",IDC_STATIC,5,23,70,12,SS_CENTERIMAGE
+ EDITTEXT IDC_IF_INSTANCE_LENGTH,80,23,43,14,ES_AUTOHSCROLL
+ LTEXT "Start position:",IDC_STATIC,5,40,50,12,SS_CENTERIMAGE
+ EDITTEXT IDC_IF_START_POS_X,80,40,43,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_IF_START_POS_Y,80,54,43,14,ES_AUTOHSCROLL
+ PUSHBUTTON "+",IDC_OPTIONS_SWITCH_BTN,5,73,10,10
+ CONTROL "Total width:",IDC_TOTAL_WIDTH_RDO,"Button",BS_AUTORADIOBUTTON,10,89,54,10
+ CONTROL "Spacing:",IDC_SPACING_RDO,"Button",BS_AUTORADIOBUTTON,10,104,43,10
+ EDITTEXT IDC_IF_TOTAL_WIDTH,63,88,40,14,ES_AUTOHSCROLL
+ EDITTEXT IDC_IF_SPACING,63,103,40,14,ES_AUTOHSCROLL
+ PUSHBUTTON "Default values",IDC_DEFAULT_BTN,131,88,58,14
+ LTEXT "x:",IDC_STATIC,64,40,9,12,SS_CENTERIMAGE
+ LTEXT "y:",IDC_STATIC,64,54,9,12,SS_CENTERIMAGE
+ LTEXT "",IDC_UNITS_LBL1,126,23,14,12,SS_CENTERIMAGE
+ LTEXT "",IDC_UNITS_LBL2,126,40,14,12,SS_CENTERIMAGE
+ LTEXT "",IDC_UNITS_LBL3,126,54,14,12,SS_CENTERIMAGE
+ LTEXT "",IDC_UNITS_LBL4,107,88,14,12,SS_CENTERIMAGE
+ LTEXT "",IDC_UNITS_LBL5,107,103,14,12,SS_CENTERIMAGE
END
@@ -230,19 +236,16 @@
IDD_INSTANCES_FIELD_OPTIONS, DIALOG
BEGIN
LEFTMARGIN, 5
- RIGHTMARGIN, 181
+ RIGHTMARGIN, 196
VERTGUIDE, 10
VERTGUIDE, 19
VERTGUIDE, 48
- VERTGUIDE, 100
+ VERTGUIDE, 64
+ VERTGUIDE, 123
VERTGUIDE, 130
TOPMARGIN, 5
- BOTTOMMARGIN, 132
- HORZGUIDE, 76
- HORZGUIDE, 107
- HORZGUIDE, 111
- HORZGUIDE, 123
- HORZGUIDE, 127
+ BOTTOMMARGIN, 122
+ HORZGUIDE, 54
END
END
#endif // APSTUDIO_INVOKED
Modified: trunk/src/view/visio/addon/document.cpp
===================================================================
--- trunk/src/view/visio/addon/document.cpp 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/document.cpp 2010-03-29 00:40:24 UTC (rev 706)
@@ -586,25 +586,25 @@
m_vsoDocument->CustomToolbars->UpdateUI();
}
-VAORC CDocumentMonitor::DrawInstancesField(Visio::IVApplicationPtr vsoApp, int instancesCnt, Coordinate spacing, Coordinate marginLeft, Coordinate marginTop, Coordinate marginRight)
+VAORC CDocumentMonitor::DrawInstancesField(Visio::IVApplicationPtr vsoApp, int instancesCnt, Coordinate instanceLength, Coordinate instanceWidth, Coordinate startX, Coordinate startY, bool useConstSpacing, Coordinate spacingOrWidth)
{
TRACE("CDocumentMonitor::DrawInstancesField() Drawing instances field");
- if (instancesCnt < 0 || spacing < 0 || marginLeft < 0 || marginTop < 0 || marginRight < 0)
+ if (instancesCnt < 0 || instanceLength < 0 || instanceWidth < 0 || startX < 0 || startY < 0)
{
TRACE("CDocumentMonitor::DrawInstancesField() Bad arguments (some are negative)");
return VAORC_FAILURE;
}
- Visio::IVPagePtr vsoPage = vsoApp->GetActivePage();
+ Visio::IVPagePtr vsoPage = vsoApp->ActivePage;
int oldShapesCount = vsoPage->Shapes->Count;
CDrawingVisualizer visualizer(m_vsoApp);
+ Coordinate spacing = spacingOrWidth;
// compute dynamic spacing
- if (spacing == 0.0f && instancesCnt > 1)
+ if (!useConstSpacing && instancesCnt > 1)
{
- Coordinate pageWidth = vsoPage->PageSheet->CellsSRC[visSectionObject][visRowPage][visPageWidth]->Result[visMillimeters];
- spacing = (pageWidth - marginRight - marginLeft) / (instancesCnt - 1);
+ spacing = (spacingOrWidth - instanceWidth) / (instancesCnt - 1);
}
// build a bmsc according to the parameters
@@ -612,13 +612,13 @@
for (int i=0; i<instancesCnt; i++)
{
- Coordinate x = marginLeft + i*spacing;
- Coordinate height = 30;
- Coordinate width = 10;
+ Coordinate x = startX + instanceWidth/2 + i*spacing;
+ Coordinate height = instanceLength;
+ Coordinate width = instanceWidth;
InstancePtr inst(new Instance(_T("NAME")));
- inst->set_line_begin(MscPoint(x, marginTop));
- inst->set_line_end(MscPoint(x, marginTop + height));
+ inst->set_line_begin(MscPoint(x, startY));
+ inst->set_line_end(MscPoint(x, startY + height));
inst->set_width(width);
bmsc->add_instance(inst);
@@ -640,51 +640,6 @@
selection->Select(shape, Visio::visSelect);
}
vsoApp->ActiveWindow->Selection = selection;
-
-
-
- /*
- Visio::IVPagePtr vsoPage = vsoApp->GetActivePage();
- //double page_height = align5(shape->ContainingPage->PageSheet->CellsSRC[visSectionObject][visRowPage][visPageHeight]->Result[visMillimeters]);
- double page_width = vsoPage->PageSheet->CellsSRC[visSectionObject][visRowPage][visPageWidth]->Result[visMillimeters];
- long scope_id = m_vsoApp->BeginUndoScope("Instances Field") + page_width;
- // temporary mappers Visio shape-id --> msc.h
- //std::map<long,InstancePtr> instances;
- //MscMessageMap messages;
- //TimeRelationEventMap time_relations;
- int instcnt = 0;
- // first walk through all shapes: create objects
- for(int i = 1; i <= vsoPage->Shapes->Count; i++)
- {
- Visio::IVShapePtr shape = vsoPage->Shapes->Item[i];
-
- TShapeType type = get_shape_type(shape);
- if(type == ST_BMSC_INSTANCE)
- {
- instcnt++;
- //instances[shape->ID] = new_instance_ptr(shape);
- }
- }
-
- if(instcnt < 2)
- {
- MessageBox(GetActiveWindow(),
- _T("This page contains less than 2 instances.\n"),
- _T("Less than 2 instances"), MB_ICONERROR);
- m_vsoApp->EndUndoScope(scope_id, false);
- return VAORC_FAILURE;
- }
-
- Visio::IVDocumentPtr bmsc_stencil = vsoApp->Documents->Item[BMSC_STENCIL_NAME];
- Visio::IVMasterPtr instance_master = bmsc_stencil->Masters->Item["Line Instance"];
- Visio::IVMasterPtr message_master = bmsc_stencil->Masters->Item["Message (Right)"];
- Visio::IVShapePtr m1 = vsoPage->Drop(message_master, 0, 0);
- Visio::IVShapePtr m2 = vsoPage->Drop(message_master, 3, 0);
- m1->Text = "INVITE 1";
- m2->Text = "INVITE 2";
-
- m_vsoApp->EndUndoScope(scope_id, true);
- */
return VAORC_SUCCESS;
}
@@ -966,11 +921,6 @@
return VAORC_SUCCESS;
}
-bool CDocumentMonitor::IsEmpty(Visio::IVApplicationPtr vsoApp)
-{
- return (vsoApp->ActivePage->Shapes->Count == 0);
-}
-
void CDocumentMonitor::selectAll(Visio::IVApplicationPtr vsoApp, bool select_instances, bool add_to_selection)
{
Visio::IVPagePtr page = vsoApp->ActivePage;
Modified: trunk/src/view/visio/addon/document.h
===================================================================
--- trunk/src/view/visio/addon/document.h 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/document.h 2010-03-29 00:40:24 UTC (rev 706)
@@ -96,25 +96,41 @@
void OnSimulationError();
/**
+ * Retrieves the document being monitored.
+ * @return document being monitored
+ */
+ Visio::IVDocumentPtr GetMonitoredDocument() { return m_vsoDocument; }
+
+ /**
* Tells whether the active document page is empty.
* @param vsoApp the application for which to tell the result
* @return true when the active document page is empty, false if not
*/
- bool IsEmpty(Visio::IVApplicationPtr vsoApp);
+ bool IsEmpty(Visio::IVApplicationPtr vsoApp) { return (vsoApp->ActivePage->Shapes->Count == 0); }
+ /**
+ * Toggles the toolbar items according to whether modifiers (Ctrl or Shift) are pressed.
+ * @param modifiersPressed are modifiers (Ctrl or Shift) pressed?
+ */
void ToggleToolbarItems(bool modifiersPressed);
/**
* Draws a field of instances on the current page.
- * @param vsoApp the monitored application where to draw
- * @param instancesCnt number of instances to draw
- * @param spacing constant spacing between instances; 0 for dynamic
- * @param marginLeft left margin - horizontal offset where to start
- * @param marginTop top margin - vertical offset where to start
- * @param marginRight right margin; used only if spacing=0
+ *
+ * All coordinates are expected to be in the millimeters (as it seems to be the units visualizer uses), and the upper-left corner
+ * is expected to be at [0,0].
+ *
+ * @param vsoApp the monitored application where to draw
+ * @param instancesCnt number of instances to draw
+ * @param instanceLength requested length of the instances
+ * @param instanceWidth requested width of the instances
+ * @param startX x-coordinate where to start drawing the upper left corner of the first instance
+ * @param startY y-coordinate where to start drawing the upper left corner of the first instance
+ * @param useConstSpacing use constant (true) or dynamic (false) spacing?
+ * @param spacingOrWidth constant spacing between instances for constant spacing, or total width for dynamic spacing
* @return result: VAORC_SUCCESS or VAORC_FAILURE
*/
- VAORC DrawInstancesField(Visio::IVApplicationPtr vsoApp, int instancesCnt, Coordinate spacing, Coordinate marginLeft, Coordinate marginTop, Coordinate marginRight);
+ VAORC DrawInstancesField(Visio::IVApplicationPtr vsoApp, int instancesCnt, Coordinate instanceLength, Coordinate instanceWidth, Coordinate startX, Coordinate startY, bool useConstSpacing, Coordinate spacingOrWidth);
// event objects for this document
Visio::IVEventPtr m_vsoPageAddedEvent;
Modified: trunk/src/view/visio/addon/instancesfielddlg.cpp
===================================================================
--- trunk/src/view/visio/addon/instancesfielddlg.cpp 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/instancesfielddlg.cpp 2010-03-29 00:40:24 UTC (rev 706)
@@ -11,7 +11,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
- * Copyright (c) 2010 Ondrej Bouda <xb...@fi...>
+ * Copyright (c) 2010 Ondrej Bouda <ond...@wh...>
*
* $Id$
*/
@@ -20,18 +20,64 @@
#include "dllmodule.h"
#include "instancesfielddlg.h"
#include "errors.h"
+#include "document.h"
+#include "pageutils.h"
+CInstancesFieldDlg::CInstancesFieldDlg(Visio::IVApplicationPtr vsoApp, double mousePosX, double mousePosY)
+{
+ m_vsoApp = vsoApp;
+ Visio::IVPagePtr page = vsoApp->ActivePage;
+
+ // we got the mouse coordinates in the internal units
+ m_mousePosX = static_cast<float>(CPageUtils::ConvertUnits(page, mousePosX, 0, visPageUnits));
+ m_mousePosY = static_cast<float>(CPageUtils::ConvertUnits(page, mousePosY, 0, visPageUnits));
+
+ m_pageWidth = static_cast<float>(CPageUtils::GetPageWidth(page));
+ m_pageHeight = static_cast<float>(CPageUtils::GetPageHeight(page));
+
+ /* FIXME: type the units in the form
+ // type the units in the form
+ Visio::IVShapePtr sheet = page->PageSheet;
+ Visio::IVCellPtr pageWidthCell = sheet->CellsSRC[visSectionObject][visRowPage][visPageWidth];
+ m_pageUnits = static_cast<VisUnitCodes>(pageWidthCell->Units);
+
+ for (int i=0; i<ARRAYSIZE(m_unitsLabels); i++) {
+ // FIXME: change the units in the form
+ //m_unitsLabels[i].SetWindowText(CDocumentMonitor::VisioUnitToString(m_pageUnits));
+ //m_unitsLabels[i].SetWindowText(_T("blah"));
+ }
+ */
+}
+
+void CInstancesFieldDlg::OnDataValidateError(UINT nCtrlID, BOOL bSave, _XData& data)
+{
+ CString sMsg = "";
+
+ switch (nCtrlID) {
+ case IDC_IF_INSTANCES_CNT:
+ sMsg.Format(_T("The number of instances must be between %d and %d."),
+ data.intData.nMin, data.intData.nMax );
+ break;
+ default:
+ TRACE("CInstancesFieldDlg::OnDataValidateError() does not have a validation error message for a control");
+ }
+
+ MessageBox(sMsg, _T("Instances Field Error"), MB_ICONEXCLAMATION);
+}
+
LRESULT CInstancesFieldDlg::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CenterWindow(GetParent());
LoadRegistryData();
+ if (m_mousePosX > 0 && m_mousePosY > 0) {
+ m_start_pos_x = m_mousePosX;
+ m_start_pos_y = m_mousePosY;
+ }
DoDataExchange(false);
SetOptionsVisibility(m_optionsVisible);
- m_spacingSwitchBtn.SetCheck(m_use_const_spacing ? BST_CHECKED : BST_UNCHECKED);
- m_spacingEdit.EnableWindow(m_use_const_spacing);
- m_marginRightEdit.EnableWindow(!m_use_const_spacing);
+ UpdateSpacingControls();
m_instancesCntEdit.SetSel(0, -1);
@@ -40,13 +86,16 @@
LRESULT CInstancesFieldDlg::OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
{
+ BOOL dataExchanged = FALSE;
if(wID == IDOK)
{
- DoDataExchange(true);
- SaveRegistryData();
+ dataExchanged = DoDataExchange(true);
+ if (dataExchanged) {
+ SaveRegistryData();
+ }
}
- EndDialog((wID == IDOK));
+ EndDialog((wID == IDOK && dataExchanged));
return 0;
}
@@ -57,15 +106,49 @@
return 0;
}
-LRESULT CInstancesFieldDlg::OnSpacingSwitch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
+void CInstancesFieldDlg::UpdateSpacingControls()
{
- bool checked = (m_spacingSwitchBtn.GetCheck() == BST_CHECKED);
- m_use_const_spacing = checked;
+ m_totalWidthRdo.SetCheck(m_use_const_spacing ? BST_UNCHECKED : BST_CHECKED);
+ m_spacingRdo.SetCheck(m_use_const_spacing ? BST_CHECKED : BST_UNCHECKED);
+ m_totalWidthEdit.EnableWindow(!m_use_const_spacing);
m_spacingEdit.EnableWindow(m_use_const_spacing);
- m_marginRightEdit.EnableWindow(!m_use_const_spacing);
+}
+
+LRESULT CInstancesFieldDlg::OnTotalWidthRdo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
+{
+ m_use_const_spacing = false;
+ UpdateSpacingControls();
return 0;
}
+LRESULT CInstancesFieldDlg::OnSpacingRdo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
+{
+ m_use_const_spacing = true;
+ UpdateSpacingControls();
+ return 0;
+}
+
+LRESULT CInstancesFieldDlg::OnDefaultCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
+{
+ m_start_pos_x = 0.0f;
+ m_start_pos_y = m_pageHeight;
+ m_total_width = (m_pageWidth > 0 ? m_pageWidth :
+ CPageUtils::ConvertUnits(m_vsoApp->ActivePage, DEFAULT_IF_TOTAL_WIDTH, 0, visPageUnits)
+ );
+ m_instance_length = (m_pageHeight > 0 ? m_pageHeight :
+ CPageUtils::ConvertUnits(m_vsoApp->ActivePage, DEFAULT_IF_INSTANCE_LENGTH, 0, visPageUnits)
+ );
+
+ DoDataExchange(false);
+
+ m_use_const_spacing = false;
+ UpdateSpacingControls();
+
+ m_instancesCntEdit.SetSel(0, -1);
+ return 0;
+}
+
+
void CInstancesFieldDlg::SetOptionsVisibility(bool visible)
{
m_optionsSwitchBtn.SetWindowText((visible ? _T("-") : _T("+")));
@@ -73,52 +156,78 @@
CWindow window = m_optionsGroupBox.GetParent();
RECT windowRect;
window.GetWindowRect(&windowRect);
- windowRect.bottom = windowRect.top + (visible ? 250 : 116);
+ windowRect.bottom = windowRect.top + (visible ? 225 : 165);
window.SetWindowPos(0, &windowRect, SWP_SHOWWINDOW | SWP_NOZORDER | SWP_DRAWFRAME);
RECT groupRect;
m_optionsGroupBox.GetWindowRect(&groupRect);
m_optionsGroupBox.ScreenToClient(&groupRect);
- // NOTE: relative to the dialog window
- groupRect.top = 67;
- groupRect.bottom = groupRect.top + (visible ? 150 : 8);
+ // relative to the dialog window
+ groupRect.top = 120;
+ groupRect.bottom = groupRect.top + (visible ? 76 : 8);
groupRect.left = 8;
- groupRect.right = 272;
+ groupRect.right = 292;
m_optionsGroupBox.SetWindowPos(0, &groupRect, SWP_SHOWWINDOW | SWP_NOZORDER | SWP_DRAWFRAME);
- m_spacingSwitchBtn.ShowWindow(visible);
+ m_totalWidthRdo.ShowWindow(visible);
+ m_spacingRdo.ShowWindow(visible);
+ m_totalWidthEdit.ShowWindow(visible);
m_spacingEdit.ShowWindow(visible);
- for (int i=0; i<ARRAY_SIZE(m_optionItems); i++) {
- m_optionItems[i].ShowWindow(visible);
+ m_defaultValuesBtn.ShowWindow(visible);
+
+ for (int i=3; i<ARRAYSIZE(m_unitsLabels); i++) {
+ m_unitsLabels[i].ShowWindow(visible);
}
- m_instancesCntEdit.SetFocus();
+ if (visible) {
+ if (m_use_const_spacing) {
+ m_spacingRdo.SetFocus();
+ } else {
+ m_totalWidthRdo.SetFocus();
+ }
+ } else {
+ m_instancesCntEdit.SetFocus();
+ }
}
int CInstancesFieldDlg::LoadRegistryData()
{
TRACE("CInstancesFieldDlg::LoadRegistryData() loading options from registry");
- m_instances_cnt = GetRegistry<int> (GetRegistryFolder(), NULL, _T("InstancesCnt"), DEFAULT_IF_INSTANCES_CNT);
- m_use_const_spacing = GetRegistry<bool> (GetRegistryFolder(), NULL, _T("SpacingSwitch"), DEFAULT_IF_SPACING_SWITCH);
- m_spacing = GetRegistry<float>(GetRegistryFolder(), NULL, _T("Spacing"), DEFAULT_IF_SPACING);
- m_margin_left = GetRegistry<float>(GetRegistryFolder(), NULL, _T("MarginLeft"), DEFAULT_IF_MARGIN_LEFT);
- m_margin_right = GetRegistry<float>(GetRegistryFolder(), NULL, _T("MarginRight"), DEFAULT_IF_MARGIN_RIGHT);
- m_margin_top = GetRegistry<float>(GetRegistryFolder(), NULL, _T("MarginTop"), DEFAULT_IF_MARGIN_TOP);
- m_optionsVisible = GetRegistry<bool> (GetRegistryFolder(), NULL, _T("OptionsVisible"), DEFAULT_IF_OPTIONS_VISIBLE);
+ Visio::IVPagePtr page = m_vsoApp->ActivePage;
+ // FIXME: precision float <- double warnings
+#define _u(x) CPageUtils::ConvertUnits(page, x, 0, visPageUnits)
+ m_instances_cnt = GetRegistry<int> (GetRegistryFolder(), NULL, _T("InstancesCnt"), DEFAULT_IF_INSTANCES_CNT);
+ m_instance_length = _u(GetRegistry<float>(GetRegistryFolder(), NULL, _T("InstanceLength"), DEFAULT_IF_INSTANCE_LENGTH));
+ m_instance_width = _u(GetRegistry<float>(GetRegistryFolder(), NULL, _T("InstanceWidth"), DEFAULT_IF_INSTANCE_WIDTH));
+ m_start_pos_x = _u(GetRegistry<float>(GetRegistryFolder(), NULL, _T("StartPosX"), DEFAULT_IF_START_POS_X));
+ m_start_pos_y = _u(GetRegistry<float>(GetRegistryFolder(), NULL, _T("StartPosY"), DEFAULT_IF_START_POS_Y));
+ m_use_const_spacing = GetRegistry<bool> (GetRegistryFolder(), NULL, _T("SpacingSwitch"), DEFAULT_IF_SPACING_SWITCH);
+ m_total_width = _u(GetRegistry<float>(GetRegistryFolder(), NULL, _T("TotalWidth"), DEFAULT_IF_TOTAL_WIDTH));
+ m_spacing = _u(GetRegistry<float>(GetRegistryFolder(), NULL, _T("Spacing"), DEFAULT_IF_SPACING));
+ m_optionsVisible = GetRegistry<bool> (GetRegistryFolder(), NULL, _T("OptionsVisible"), DEFAULT_IF_OPTIONS_VISIBLE);
+#undef _u
+
return 0;
}
int CInstancesFieldDlg::SaveRegistryData()
{
TRACE("CInstancesFieldDlg::SaveRegistryData() saving options to registry");
+
+ Visio::IVPagePtr page = m_vsoApp->ActivePage;
+ // FIXME: precision float <- double warnings
+#define _u(x) CPageUtils::ConvertUnits(page, x, visPageUnits, 0)
SetRegistry<int> (HKEY_CURRENT_USER, GetRegistryFolder(), _T("InstancesCnt"), m_instances_cnt);
+ SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("InstanceLength"), _u(m_instance_length));
+ SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("InstanceWidth"), _u(m_instance_width));
+ SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("StartPosX"), _u(m_start_pos_x));
+ SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("StartPosY"), _u(m_start_pos_y));
SetRegistry<bool> (HKEY_CURRENT_USER, GetRegistryFolder(), _T("SpacingSwitch"), m_use_const_spacing);
- SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("Spacing"), m_spacing);
- SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("MarginLeft"), m_margin_left);
- SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("MarginRight"), m_margin_right);
- SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("MarginTop"), m_margin_top);
+ SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("TotalWidth"), _u(m_total_width));
+ SetRegistry<float>(HKEY_CURRENT_USER, GetRegistryFolder(), _T("Spacing"), _u(m_spacing));
SetRegistry<bool> (HKEY_CURRENT_USER, GetRegistryFolder(), _T("OptionsVisible"), m_optionsVisible);
+#undef _u
return 0;
}
Modified: trunk/src/view/visio/addon/instancesfielddlg.h
===================================================================
--- trunk/src/view/visio/addon/instancesfielddlg.h 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/instancesfielddlg.h 2010-03-29 00:40:24 UTC (rev 706)
@@ -11,7 +11,7 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
- * Copyright (c) 2010 Ondrej Bouda <xb...@fi...>
+ * Copyright (c) 2010 Ondrej Bouda <ond...@wh...>
*
* $Id$
*/
@@ -24,6 +24,7 @@
#include <atlctrls.h>
#include <atlddx.h>
#include <atlwinx.h>
+#include <atlmisc.h>
class CInstancesFieldDlg
: public ATL::CDialogImpl<CInstancesFieldDlg>, public CWinDataExchange<CInstancesFieldDlg>
@@ -31,36 +32,50 @@
public:
enum { IDD = IDD_INSTANCES_FIELD_OPTIONS };
int m_instances_cnt;
+ float m_instance_length;
+ float m_instance_width; // NOTE: not in the form, just for the user to be able to change it via the Registry
+ float m_start_pos_x;
+ float m_start_pos_y;
bool m_use_const_spacing;
+ float m_total_width;
float m_spacing;
- float m_margin_left;
- float m_margin_right;
- float m_margin_top;
+ CInstancesFieldDlg(Visio::IVApplicationPtr vsoApp, double mousePosX=0.0, double mousePosY=0.0);
+
const wchar_t* GetRegistryFolder() { return SCSTUDIO_REGISTRY_ROOT _T("\\InstancesField"); }
+private:
+ Visio::IVApplicationPtr m_vsoApp;
+ VisUnitCodes m_pageUnits;
+
+ float m_mousePosX;
+ float m_mousePosY;
+
+ float m_pageWidth;
+ float m_pageHeight;
+
protected:
BEGIN_DDX_MAP(CInstancesFieldDlg)
- DDX_INT_RANGE(IDC_IF_INSTANCES_CNT, m_instances_cnt, 1, 1000)
+ DDX_INT_RANGE(IDC_IF_INSTANCES_CNT, m_instances_cnt, 1, 100)
+ DDX_FLOAT(IDC_IF_INSTANCE_LENGTH, m_instance_length)
+ DDX_FLOAT(IDC_IF_START_POS_X, m_start_pos_x)
+ DDX_FLOAT(IDC_IF_START_POS_Y, m_start_pos_y)
+ DDX_FLOAT(IDC_IF_TOTAL_WIDTH, m_total_width)
DDX_FLOAT(IDC_IF_SPACING, m_spacing)
- DDX_FLOAT(IDC_IF_MARGIN_LEFT, m_margin_left)
- DDX_FLOAT(IDC_IF_MARGIN_RIGHT, m_margin_right)
- DDX_FLOAT(IDC_IF_MARGIN_TOP, m_margin_top)
DDX_CONTROL_HANDLE(IDC_IF_INSTANCES_CNT, m_instancesCntEdit)
+ DDX_CONTROL_HANDLE(IDC_OPTIONS_GROUP_BOX, m_optionsGroupBox)
DDX_CONTROL_HANDLE(IDC_OPTIONS_SWITCH_BTN, m_optionsSwitchBtn)
- DDX_CONTROL_HANDLE(IDC_OPTIONS_GROUP_BOX, m_optionsGroupBox)
- DDX_CONTROL_HANDLE(IDC_IF_SPACING_SWITCH, m_spacingSwitchBtn)
+ DDX_CONTROL_HANDLE(IDC_TOTAL_WIDTH_RDO, m_totalWidthRdo)
+ DDX_CONTROL_HANDLE(IDC_SPACING_RDO, m_spacingRdo)
+ DDX_CONTROL_HANDLE(IDC_DEFAULT_BTN, m_defaultValuesBtn)
+ DDX_CONTROL_HANDLE(IDC_IF_TOTAL_WIDTH, m_totalWidthEdit)
DDX_CONTROL_HANDLE(IDC_IF_SPACING, m_spacingEdit)
- DDX_CONTROL_HANDLE(IDC_IF_MARGIN_RIGHT, m_marginRightEdit)
- DDX_CONTROL_HANDLE(IDC_IF_MARGIN_LEFT, m_optionItems[0])
- DDX_CONTROL_HANDLE(IDC_IF_MARGIN_LEFT, m_optionItems[1])
- DDX_CONTROL_HANDLE(IDC_IF_MARGIN_TOP, m_optionItems[2])
- DDX_CONTROL_HANDLE(IDC_IF_LBL1, m_optionItems[3])
- DDX_CONTROL_HANDLE(IDC_IF_LBL2, m_optionItems[4])
- DDX_CONTROL_HANDLE(IDC_IF_LBL3, m_optionItems[5])
- DDX_CONTROL_HANDLE(IDC_IF_LBL4, m_optionItems[6])
- DDX_CONTROL_HANDLE(IDC_IF_LBL5, m_optionItems[7])
+ DDX_CONTROL_HANDLE(IDC_UNITS_LBL1, m_unitsLabels[0])
+ DDX_CONTROL_HANDLE(IDC_UNITS_LBL2, m_unitsLabels[1])
+ DDX_CONTROL_HANDLE(IDC_UNITS_LBL3, m_unitsLabels[2])
+ DDX_CONTROL_HANDLE(IDC_UNITS_LBL4, m_unitsLabels[3])
+ DDX_CONTROL_HANDLE(IDC_UNITS_LBL5, m_unitsLabels[4])
END_DDX_MAP()
BEGIN_MSG_MAP(CInstancesFieldDlg)
@@ -68,9 +83,11 @@
COMMAND_ID_HANDLER(IDOK, OnCloseCmd)
COMMAND_ID_HANDLER(IDCANCEL, OnCloseCmd)
COMMAND_ID_HANDLER(IDC_OPTIONS_SWITCH_BTN, OnOptionsSwitch)
- COMMAND_ID_HANDLER(IDC_IF_SPACING_SWITCH, OnSpacingSwitch)
// FIXME: would like to make the label switch the options as well, but the following does not work:
//COMMAND_ID_HANDLER(IDC_OPTIONS_SWITCH_LBL, OnOptionsSwitch)
+ COMMAND_ID_HANDLER(IDC_TOTAL_WIDTH_RDO, OnTotalWidthRdo)
+ COMMAND_ID_HANDLER(IDC_SPACING_RDO, OnSpacingRdo)
+ COMMAND_ID_HANDLER(IDC_DEFAULT_BTN, OnDefaultCmd)
END_MSG_MAP()
// Handler prototypes:
@@ -78,34 +95,42 @@
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
+ void OnDataValidateError (UINT nCtrlID, BOOL bSave, _XData& data);
+
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCloseCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnOptionsSwitch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
- LRESULT OnSpacingSwitch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
+ LRESULT OnTotalWidthRdo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
+ LRESULT OnSpacingRdo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
+ LRESULT OnDefaultCmd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
int LoadRegistryData();
int SaveRegistryData();
void SetOptionsVisibility(bool visible);
+ void UpdateSpacingControls();
+ CStatic m_optionsGroupBox;
bool m_optionsVisible;
CButton m_optionsSwitchBtn;
- CButton m_spacingSwitchBtn;
+ CButton m_totalWidthRdo;
+ CButton m_spacingRdo;
+ CButton m_defaultValuesBtn;
CEdit m_instancesCntEdit;
+ CEdit m_totalWidthEdit;
CEdit m_spacingEdit;
- CEdit m_marginRightEdit;
- CStatic m_optionsGroupBox;
-
- ATL::CWindow m_optionItems[8];
+ CStatic m_unitsLabels[5];
};
static const int DEFAULT_IF_INSTANCES_CNT = 2;
+static const float DEFAULT_IF_INSTANCE_LENGTH = 1.5748031496062992f; // 40 mm
+static const float DEFAULT_IF_INSTANCE_WIDTH = 0.3937007874015748f; //10 mm
+static const float DEFAULT_IF_START_POS_X = 0.0f;
+static const float DEFAULT_IF_START_POS_Y = 0.0f;
static const int DEFAULT_IF_SPACING_SWITCH = true;
-static const float DEFAULT_IF_SPACING = 30.0f;
-static const float DEFAULT_IF_MARGIN_LEFT = 20.0f;
-static const float DEFAULT_IF_MARGIN_RIGHT = 20.0f;
-static const float DEFAULT_IF_MARGIN_TOP = 20.0f;
+static const float DEFAULT_IF_TOTAL_WIDTH = 7.8740157480314960f; // 200 mm
+static const float DEFAULT_IF_SPACING = 1.18110236220472f; // 30 mm
static const bool DEFAULT_IF_OPTIONS_VISIBLE = false;
// $Id$
Added: trunk/src/view/visio/addon/pageutils.cpp
===================================================================
--- trunk/src/view/visio/addon/pageutils.cpp (rev 0)
+++ trunk/src/view/visio/addon/pageutils.cpp 2010-03-29 00:40:24 UTC (rev 706)
@@ -0,0 +1,116 @@
+/*
+ * 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) 2010 Ondrej Bouda <ond...@wh...>
+ *
+ * $Id$
+ */
+
+#include "pageutils.h"
+
+double CPageUtils::ConvertUnits(Visio::IVPagePtr vsoPage, double value, int unitsFrom, int unitsTo)
+{
+ // convert the value via a scratch cell
+ Visio::IVShapePtr sheet = vsoPage->PageSheet;
+
+ // initialize a scratch cell
+ short scratchSectionExisted = sheet->SectionExists[visSectionScratch][false];
+ sheet->AddRow(visSectionScratch, visRowScratch, visTagDefault);
+ Visio::IVCellPtr scratch = sheet->Cells["Scratch.X1"];
+
+ // convert the value
+ if (unitsFrom == 0) {
+ scratch->Result[""] = value; // poor Visio API does not have a constant for internal units
+ } else {
+ scratch->Result[unitsFrom] = value;
+ }
+ double convertedValue = scratch->Result[unitsTo];
+
+ // clean up
+ sheet->DeleteRow(visSectionScratch, visRowScratch);
+ if (!scratchSectionExisted) {
+ sheet->DeleteSection(visSectionScratch);
+ }
+
+ return convertedValue;
+}
+
+double CPageUtils::GetPageWidth(Visio::IVPagePtr vsoPage, int units)
+{
+ Visio::IVCellPtr cell = vsoPage->PageSheet->CellsSRC[visSectionObject][visRowPage][visPageWidth];
+ return (units == 0 ? cell->Result[""] : cell->Result[units]);
+}
+
+double CPageUtils::GetPageHeight(Visio::IVPagePtr vsoPage, int units)
+{
+ Visio::IVCellPtr cell = vsoPage->PageSheet->CellsSRC[visSectionObject][visRowPage][visPageHeight];
+ return (units == 0 ? cell->Result[""] : cell->Result[units]);
+}
+
+const LPCTSTR CPageUtils::VisioUnitToString(VisUnitCodes unitCode)
+{
+ switch (unitCode) {
+ case visCentimeters:
+ return _T("cm");
+ case visCiceros:
+ return _T("c");
+ case visDate:
+ return _T("date");
+ case visDegrees:
+ return _T("deg");
+ case visDidots:
+ return _T("d");
+ case visElapsedWeek:
+ return _T("ew");
+ case visElapsedDay:
+ return _T("ed");
+ case visElapsedHour:
+ return _T("eh");
+ case visElapsedMin:
+ return _T("em");
+ case visElapsedSec:
+ return _T("es");
+ case visFeet:
+ return _T("ft");
+ case visInches:
+ return _T("in");
+ case visKilometers:
+ return _T("km");
+ case visMeters:
+ return _T("m");
+ case visMiles:
+ return _T("mi");
+ case visMillimeters:
+ return _T("mm");
+ case visMin:
+ return _T("'");
+ case visNautMiles:
+ return _T("nm");
+ case visPercent:
+ return _T("%");
+ case visPicas:
+ return _T("p");
+ case visPoints:
+ return _T("pt");
+ case visRadians:
+ return _T("rad");
+ case visSec:
+ return _T("\"");
+ case visYards:
+ return _T("yd");
+ default:
+ return _T("???");
+ }
+}
+
+// $Id$
Property changes on: trunk/src/view/visio/addon/pageutils.cpp
___________________________________________________________________
Added: svn:keywords
+ Id
Added: svn:eol-style
+ native
Added: trunk/src/view/visio/addon/pageutils.h
===================================================================
--- trunk/src/view/visio/addon/pageutils.h (rev 0)
+++ trunk/src/view/visio/addon/pageutils.h 2010-03-29 00:40:24 UTC (rev 706)
@@ -0,0 +1,73 @@
+/*
+ * 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) 2010 Ondrej Bouda <ond...@wh...>
+ *
+ * $Id$
+ */
+
+#pragma once
+#include "stdafx.h"
+
+/**
+ * A utility class for functionality on a Visio Page.
+ */
+class CPageUtils
+{
+public:
+
+ /**
+ * Converts a value between specified units.
+ * @param vsoPage the document page in which to convert the units
+ * @param value the value to be converted
+ * @param unitsFrom from which units to convert; use VisUnitCodes constants or 0 for Visio's internal units
+ * @param unitsTo to which units to convert; use VisUnitCodes constants or 0 for Visio's internal units
+ * @return \a value converted from \a unitsFrom to \a unitsTo
+ */
+ static double ConvertUnits(Visio::IVPagePtr vsoPage, double value, int unitsFrom, int unitsTo);
+
+ /**
+ * Converts a value between specified units.
+ * @param vsoApp the application in which to convert the units - it uses its current page
+ * @param value the value to be converted
+ * @param unitsFrom from which units to convert; use VisUnitCodes constants or 0 for Visio's internal units
+ * @param unitsTo to which units to convert; use VisUnitCodes constants or 0 for Visio's internal units
+ * @return \a value converted from \a unitsFrom to \a unitsTo
+ */
+ static double ConvertUnits(Visio::IVApplicationPtr vsoApp, double value, int unitsFrom, int unitsTo) {
+ return ConvertUnits(vsoApp->ActivePage, value, unitsFrom, unitsTo);
+ }
+
+ /**
+ * Retrieves width of a given page.
+ * @param vsoPage the page which to get width of
+ * @param units units in which to retrieve the result; use VisUnitCodes constants or 0 for Visio's internal units;
+ * the default are units of the given page
+ * @return width of the page in units \a units
+ */
+ static double GetPageWidth(Visio::IVPagePtr vsoPage, int units=visPageUnits);
+
+ /**
+ * Retrieves height of a given page.
+ * @param vsoPage the page which to get height of
+ * @param units units in which to retrieve the result; use VisUnitCodes constants or 0 for Visio's internal units;
+ * the default are units of the given page
+ * @return height of the page in units \a units
+ */
+ static double GetPageHeight(Visio::IVPagePtr vsoPage, int units=visPageUnits);
+
+ static const LPCTSTR VisioUnitToString(VisUnitCodes unitCode);
+
+};
+
+// $Id$
Property changes on: trunk/src/view/visio/addon/pageutils.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 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/resource.h 2010-03-29 00:40:24 UTC (rev 706)
@@ -30,8 +30,10 @@
#define IDI_ICON_SELECT_ADD_MESSAGES 219
#define IDC_IF_INSTANCES_CNT 220
#define IDC_IF_MARGIN_SIDE 221
+#define IDC_IF_INSTANCE_LENGTH 221
#define IDC_IF_MARGIN_TOP 222
#define IDC_IF_INSTANCES_HEIGHT 223
+#define IDC_IF_START_POS_X 223
#define IDC_OPTIONS_SWITCH_BTN 226
#define IDC_OPTIONS_SWITCH_LBL 227
#define IDC_OPTIONS_GROUP_BOX 228
@@ -44,6 +46,17 @@
#define IDC_IF_MARGIN_RIGHT 237
#define IDC_IF_LBL4 239
#define IDC_IF_LBL5 240
+#define IDC_IF_START_POS_Y 241
+#define IDC_TOTAL_WIDTH_RDO 242
+#define IDC_RADIO2 243
+#define IDC_SPACING_RDO 243
+#define IDC_IF_TOTAL_WIDTH 244
+#define IDC_DEFAULT_BTN 245
+#define IDC_UNITS_LBL1 246
+#define IDC_UNITS_LBL2 247
+#define IDC_UNITS_LBL3 248
+#define IDC_UNITS_LBL4 249
+#define IDC_UNITS_LBL5 250
// Next default values for new objects
//
@@ -51,7 +64,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 220
#define _APS_NEXT_COMMAND_VALUE 32768
-#define _APS_NEXT_CONTROL_VALUE 241
+#define _APS_NEXT_CONTROL_VALUE 251
#define _APS_NEXT_SYMED_VALUE 105
#endif
#endif
Modified: trunk/src/view/visio/addon/scstudio.vcproj
===================================================================
--- trunk/src/view/visio/addon/scstudio.vcproj 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/scstudio.vcproj 2010-03-29 00:40:24 UTC (rev 706)
@@ -332,6 +332,14 @@
>
</File>
<File
+ RelativePath=".\pageutils.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\pageutils.h"
+ >
+ </File>
+ <File
RelativePath=".\reportmessage.cpp"
>
</File>
Modified: trunk/src/view/visio/addon/stdafx.h
===================================================================
--- trunk/src/view/visio/addon/stdafx.h 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/addon/stdafx.h 2010-03-29 00:40:24 UTC (rev 706)
@@ -65,7 +65,4 @@
#endif // EXCEL_FOUND
-
-#define ARRAY_SIZE(a) (int)(sizeof(a)/sizeof(a[0]))
-
// $Id$
Modified: trunk/src/view/visio/stencils/Sequence Chart Studio/MSC-logo.vtx
===================================================================
--- trunk/src/view/visio/stencils/Sequence Chart Studio/MSC-logo.vtx 2010-03-27 19:15:58 UTC (rev 705)
+++ trunk/src/view/visio/stencils/Sequence Chart Studio/MSC-logo.vtx 2010-03-29 00:40:24 UTC (rev 706)
@@ -1,380 +1,360 @@
<?xml version='1.0' encoding='utf-8' ?>
-<VisioDocument key='032A0C886D9E2C897E26C2A17085FE0209DEDD550EDD4EA778E885FAE310B5A6DA7314A9EBC2FAD9156006DC601B99F410887F621703F5A2A8D0B6321B683C01' start='190' xmlns='http://schemas.microsoft.com/visio/2003/core' metric='0' DocLangID='1033' buildnum='8161' version='11.0' xml:space='preserve'><DocumentProperties><Title>Message Sequence Chart</Title><Creator>Petr Gotthard</Creator><Template>P:\Projects\scstudio\src\view\visio\Sequence Chart Studio\MSC.vtx</Template><Desc>Create interaction diagram standartized in ITU-T Z.120.</Desc><Company>Brno</Company><BuildNumberCreated>738205665</BuildNumberCreated><BuildNumberEdited>738205665</BuildNumberEdited><PreviewPicture Size='21216'>
-AQAAAIwAAAAAAAAAAAAAAFIAAABSAAAAAAAAAAAAAACSCQAAmAkAACBFTUYAAAEA4FIAAAMAAAABA
-AAADwAAAGwAAAAAAAAAAAQAAAADAAAyAQAA5gAAAAAAAAAAAAAAAAAAAFCrBABwggMAVgBJAFMASQ
-BPAAAARAByAGEAdwBpAG4AZwAAAAAAAABMAAAAQFIAAAAAAAAAAAAAUgAAAFIAAAAAAAAAAAAAAFM
-AAABTAAAAIADMAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA////AAAAAABkAAAAKAAA
-AIwAAAC0UQAAKAAAAFMAAABTAAAAAQAYAAAAAAC0UQAAAAAAAAAAAAAAAAAAAAAAAP///////////
+<VisioDocument key='264555E26CC5991E8269602BFB12BB77CE2877E2D0C543BD2ECAFF233A6A566BA663366D067B82C14C3633DA6D2F23EF09DEFD391F4B4837510701DC27DFE157' start='190' metric='0' DocLangID='1033' buildnum='6423' version='12.0' xml:space='preserve' xmlns='http://schemas.microsoft.com/visio/2003/core' xmlns:vx='http://schemas.microsoft.com/visio/2006/extension'><DocumentProperties><Title>Message Sequence Chart</Title><Creator>Petr Gotthard</Creator><Template>P:\Projects\scstudio\src\view\visio\Sequence Chart Studio\MSC.vtx</Template><Desc>Create interaction diagram standartized in ITU-T Z.120.</Desc><Company>Brno</Company><BuildNumberCreated>738205665</BuildNumberCreated><BuildNumberEdited>805312791</BuildNumberEdited><PreviewPicture Size='20064'>
+AQAAAIwAAAAAAAAAAAAAAFAAAABQAAAAAAAAAAAAAAAJCwAABAsAACBFTUYAAAEAYE4AAAMAAAABA
+AAADwAAAGwAAAAAAAAAAAUAACADAADEAQAAGgEAAAAAAAAAAAAAAAAAAOPjBgBuTgQAVgBJAFMASQ
+BPAAAARAByAGEAdwBpAG4AZwAAAAAAAABMAAAAwE0AAAAAAAAAAAAAUAAAAFAAAAAAAAAAAAAAAFE
+AAABRAAAAIADMAAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAA////AAAAAABkAAAAKAAA
+AIwAAAA0TQAAKAAAAFEAAABRAAAAAQAYAAAAAAA0TQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAD///////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+/////////////////////8A//////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-////////////wAAAP////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////AP////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////wAAAP////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////wD///////////////////
/////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////wAAAP////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////8A//
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-///////////////////wAAAP/////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+//////////////AP/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////wAAAP/////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+///////////////////////////////wD////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////wA
-AAP//////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////8A///////////////////////////
/////////////////////////////////////////////////////////////////////////////
-//////////////////////////wAAAP//////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////AP/////////
/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////wAAAP//////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+//////wD/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-/////wAAAP///////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+///////////////////////8A////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////wAAAP///////////////////////////////////////
+///////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+//////////////////////////AP/////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////wAAAP///////////
-///////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////wD////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-//////////////////////////////////////////////////////////////////////////wAA
-AP///////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////8A///////////////
+/////////////////////////////39/ff39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/
+f39/f39/n5+f////////////////////////////z8/Pf39/f39/f39/f39/f39/f39/f39/f39/f
+39/f39/f39/f39/f39/v7+/////////////////////////////r6+vf39/f39/f39/f39/f39/f3
+9/f39/f39/f39/f39/f39/f39/f39/z8/P///////////////////////////////////////////
+/AP///////////////////////////////////////////5+fnwYGBgAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAABQUFP///////////////////////////1RUVAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMP///////////////////////////zAwMAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/f//////////////////////////
+//////////////////wD///////////////////////////////////////////+fn58JCQkAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBT///////////////////////////9UV
+FQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDD///////////////////
+////////8wMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/f3/////////
+///////////////////////////////////8A////////////////////////////////////////
+////19fXMjIyMDAwMDAwMDAwMDAwMDAwDAwMJSUlMDAwMDAwMDAwMDAwMDAwbW1t/////////////
+///////////////sbGxMDAwMDAwMDAwMDAwMDAwMDAwAgICMDAwMDAwMDAwMDAwMDAwMDAwlZWV//
+//////////////////////////hoaGMDAwMDAwMDAwMDAwMDAwKysrBgYGMDAwMDAwMDAwMDAwMDA
+wMDAwv7+/////////////////////////////////////////////AP//////////////////////
+/////////////////////////////////////////////////0BAQL+/v////////////////////
+////////////////////////////////////////////////////////////wAAAP////////////
+///////////////////////////////////////////////////////////////////9/f3yAgIP/
+//////////////////////////////////////////////////////////////////////wD/////
+//////////////////////////////////////////////////////////////////9AQEC/v7///
/////////////////////////////////////////////////////////////////////////////
-/////////////////////////wAAAP///////////////////////////////////////////8/Pz
-39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4eHh/f39/////////////////
-///////////6+vr39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f5+fn//////
-//////////////////////////4+Pj39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/
-f39/f7+/v////////////////////////////////////////////wAAAP///////////////////
-////////////////////////1RUVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAgICL+/v////////////////////////////xQUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAP///////////////////////////9/f3wYGBgAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMP///////////////////////////////////////
-////wAAAP///////////////////////////////////////////1RUVAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDL+/v////////////////////////////xQUFAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////
-/9/f3wkJCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMP///////////
-////////////////////////////////wAAAP////////////////////////////////////////
-///5KSkjAwMDAwMDAwMDAwMDAwMDAwMA8PDyUlJTAwMDAwMDAwMDAwMDAwMDo6Oufn5//////////
-//////////////////15eXjAwMDAwMDAwMDAwMDAwMDAwMAUFBTAwMDAwMDAwMDAwMDAwMDAwMEZG
-Rv////////////////////////////f390NDQzAwMDAwMDAwMDAwMDAwMCsrKwkJCTAwMDAwMDAwM
-DAwMDAwMDAwMHd3d////////////////////////////////////////////wAAAP////////////
-///////////////////////////////////////////////////////////0BAQL+/v//////////
-//////////////////////////////////////////////////////////////////////////wAA
-AP///////////////////////////////////////////////////////////////////////////
-////////9/f3yAgIP////////////////////////////////////////////////////////////
-///////////wAAAP/////////////////////////////////////////////////////////////
-//////////0BAQL+/v///////////////////////////////////////////////////////////
-/////////////////////////wAAAP///////////////////////////////////////////////
-////////////////////////////////////9/f3yAgIP////////////////////////////////
-///////////////////////////////////////wAAAP/////////////////////////////////
-//////////////////////////////////////0BAQL+/v///////////////////////////////
-/////////////////////////////////////////////////////wAAAP///////////////////
-////////////////////////////////////////////////////////////////9/f3yAgIP////
-///////////////////////////////////////////////////////////////////wAAAP/////
-//////////////////////////////////////////////////////////////////0BAQL+/v///
-/////////////////////////////////////////////////////////////////////////////
-////wAAAP////////////////////////////////////////////////////////////////////
-///////////////9/f3yAgIP/////////////////////////////////////////////////////
-//////////////////wAAAP//////////////////////////////////////////////////////
-/////////////////0BAQL+/v////////////////////////////////////////////////////
-////////////////////////////////wAAAP////////////////////////////////////////
-///////////////////////////////////////////9/f3yAgIP/////////////////////////
-//////////////////////////////////////////////wAAAP//////////////////////////
-/////////////////////////////////////////////0BAQL+/v////////////////////////
-////////////////////////////////7+/v7+/v7+/v7+/v7+/v7+/v7+/vwAAAL+/v7+/v7+/v7
-+/v7+/v7+/v7+/v/f39////////////////////////////////////////////////////9/f3yA
-gIP///////////////////////////////////////////////////////////////////////wAA
-AP///////////////////////////////////////////////////////////////////////0BAQ
-L+/v///////////
-/////////////////////////////////////////7+/vxAQEEBAQEBAQEBAQEBAQEBAQEBAQDAwM
-EBAQEBAQEBAQEBAQEBAQEBAQBgYGJ+fn/////////////////////////////////////////////
-///////9/f3yAgIP/////////////////////////////////////////////////////////////
-//////////wAAAP//////////////////////////////////////////////////////////////
-/////////0BAQL+/v////////////////////////////////////////////////////7+/v0BAQ
-P///////////////////////////////////////////////////2BgYJ+fn/////////////////
-///////////////////////////////////9/f3yAgIP/////////////////////////////////
-//////////////////////////////////////wAAAP//////////////////////////////////
-/////////////////////////////////////0BAQL+/v////////////////////////////////
-////////////////////7+/v0BAQP////////////////////////////////////////////////
-///2BgYJ+fn////////////////+/37+/37////////////9fr14fDh6fTp////9/f3yAgIP/////
-//////////////////////////////////////////////////////////////////wAAAP//////
-/////////////////////////////////////////////////////////////////0BAQL+/v////
-////////////////////////////////////////////////7+/v0BAQP////////////////////
-///////////////////6/Xr3+/f+/372BgYJ+fn////////////////7/fvxCIEH+/f+/379/v3wy
-GDASCBAuGC222bd/f3yAgIP//////////////////////////////////////////////////////
-/////////////////wAAAP///////////////////////////////////////////////////////
-////////////////0BAQL+/v////////////////////////////////////////////////////7
-+/v0BAQP///////////////////////////////7fbt4fDh5/PnwCAABCIEDlrOShkKECgQECgQEC
-gQECgQDCYMACAAACAABCIEE2mTQSCBACAAACAAASCBN/f3yAgIP///+fn50BAQP///+fn50BAQPf3
-9+fn50BAQP///+fn50BAQOfn5////////////////////wAAAP///////////////////////////
-////////////////////////////////////////////0BAQL+/v/////////////////////////
-///////////////////////////7+/v0BAQP///////////////////////////////+fz59fr15/
-PnyCQIJ/Pn19gX3eLd7/fv7/fv7/fv7/fv4/HjwCAACCQIJ/Pn7fbtwyGDACAAACAADicON/f3yAg
-IP////f397+/v/////f397m5uXh4ePf397+/v/////f397+/v/f39////////////////////wAAA
-P///////////////////////////////////////////////////////////////////////0BAQL...
[truncated message content] |