From e689dc2ba0696ff0977da70f5b58b86ac95e2b83 Mon Sep 17 00:00:00 2001 From: Kathy Date: Mon, 17 Oct 2016 14:25:30 +0000 Subject: [PATCH] Embedded images --- .../SORTCUTS_INSERT.RTF | 299 +----- .../VEPROMS User Interface/dlgExportImport.cs | 91 +- PROMS/VEPROMS User Interface/frmVEPROMS.cs | 5 + .../Config/ImageConfig.cs | 149 +++ .../VEPROMS.CSLA.Library/Config/StepConfig.cs | 54 + .../Extension/AuditExt.cs | 22 + .../VEPROMS.CSLA.Library/Extension/ItemExt.cs | 5 + PROMS/VEPROMS.CSLA.Library/Generated/Item.cs | 6 +- .../Volian.Controls.Library/DisplayHistory.cs | 55 + .../DisplayHistory.designer.cs | Bin 33430 -> 33744 bytes .../DisplayTags.Designer.cs | 252 ++++- PROMS/Volian.Controls.Library/DisplayTags.cs | 111 +- PROMS/Volian.Controls.Library/EditItem.cs | 54 +- PROMS/Volian.Controls.Library/ImageItem.cs | 995 ++++++++++++++++++ .../ImageItem.designer.cs | 149 +++ PROMS/Volian.Controls.Library/StepRTB.cs | 18 +- .../Volian.Controls.Library/StepTabRibbon.cs | 255 ++++- .../StepTabRibbon.designer.cs | Bin 526672 -> 527798 bytes .../PDFChronologyReport.cs | 12 +- PROMS/Volian.Print.Library/vlnParagraph.cs | 229 ++-- 20 files changed, 2298 insertions(+), 463 deletions(-) create mode 100644 PROMS/VEPROMS.CSLA.Library/Config/ImageConfig.cs create mode 100644 PROMS/Volian.Controls.Library/ImageItem.cs create mode 100644 PROMS/Volian.Controls.Library/ImageItem.designer.cs diff --git a/PROMS/VEPROMS User Interface/SORTCUTS_INSERT.RTF b/PROMS/VEPROMS User Interface/SORTCUTS_INSERT.RTF index 55fed267..359f4410 100644 --- a/PROMS/VEPROMS User Interface/SORTCUTS_INSERT.RTF +++ b/PROMS/VEPROMS User Interface/SORTCUTS_INSERT.RTF @@ -1,279 +1,20 @@ -{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} -{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f39\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;} -{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f60\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} -{\f61\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f63\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f64\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f65\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} -{\f66\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f67\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f68\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f60\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} -{\f61\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f63\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f64\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f65\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} -{\f66\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f67\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f68\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f410\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} -{\f411\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f413\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f414\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f417\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} -{\f418\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f430\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f431\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\f433\fbidi \froman\fcharset161\fprq2 Cambria Greek;} -{\f434\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f437\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f438\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;} -{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);} -{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} -{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; -\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\red23\green54\blue93;}{\*\defchp -\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;} -{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused -Normal Table;}}{\*\rsidtbl \rsid3236999\rsid9258266}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Kathy B. Ruffing}{\creatim\yr2015\mo8\dy19\hr11\min26} -{\revtim\yr2015\mo8\dy19\hr11\min27}{\version2}{\edmins1}{\nofpages1}{\nofwords86}{\nofchars496}{\nofcharsws581}{\vern57439}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}} -\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect -\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 -\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot9258266 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2 -\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6 -\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\qc \li0\ri0\sa300\nowidctlpar\brdrb\brdrs\brdrw20\brsp80 \wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 -\fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af39\afs52 \ltrch\fcs0 \f39\fs52\expnd1\expndtw5\cf17\kerning28\insrsid3236999 \hich\af39\dbch\af31505\loch\f39 Shortcuts for Inserting}{ -\rtlch\fcs1 \af0\afs52 \ltrch\fcs0 \f0\fs52\expnd1\expndtw5\cf17\kerning28\insrsid3236999 -\par \ltrrow}\trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brsp80\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290 -\pard \ltrpar\qc \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 KEY STROKE\cell \hich\af37\dbch\af31505\loch\f37 COMMAND\cell }\pard \ltrpar -\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid3236999 \trowd \irow0\irowband0\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl -\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brsp80\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb -\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row \ltrrow}\trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290 -\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [SPACE]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 -\hich\af37\dbch\af31505\loch\f37 Insert Hard Space\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 -\trowd \irow1\irowband1\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 -\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl -\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row \ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 -\ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [B]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert Current Type Before (at same level)\cell }\pard \ltrpar -\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \trowd \irow2\irowband2\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 -\trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb -\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row \ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [C] -\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert a Caution\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 { -\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \trowd \irow3\irowband3\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [F]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert a Referenced Objects Figure\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \trowd \irow4\irowband4\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [H]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert a High Level Step\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \trowd \irow5\irowband5\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [I]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert Current Type After (at same level)\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 -\ltrch\fcs0 \f37\fs20\insrsid3236999 \trowd \irow6\irowband6\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [CTRL] [J]}{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \cell -\hich\af37\dbch\af31505\loch\f37 Insert Referenced Object\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 -\trowd \irow7\irowband7\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 -\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl -\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row \ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 -\ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [N]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert Note\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \trowd \irow8\irowband8\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 -\trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr -\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row \ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [R] -\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert RNO\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 -\af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \trowd \irow9\irowband9\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [S]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert Sub Step\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 -\f37\fs20\insrsid3236999 \trowd \irow10\irowband10\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 \hich\af2\dbch\af31505\loch\f2 [CTRL] [T]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 -\hich\af37\dbch\af31505\loch\f37 Insert Transition\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 -\trowd \irow11\irowband11\ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 -\trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row -\ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9258266 \hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [D}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9258266 -\hich\af2\dbch\af31505\loch\f2 ]}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9258266 \cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid9258266 \hich\af37\dbch\af31505\loch\f37 Insert Indent\cell }\pard \ltrpar -\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid9258266 \trowd \irow12\irowband12\ltrrow\ts11\trgaph108\trleft-108\trbrdrt -\brdrs\brdrw10\brdrcf1 \trbrdrl\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl -\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr -\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row \ltrrow}\pard \ltrpar\ql \li0\ri0\nowidctlpar\intbl\wrapdefault\faauto\rin0\lin0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3236999 -\hich\af2\dbch\af31505\loch\f2 [SHIFT] [CTRL] [T]\cell }{\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \hich\af37\dbch\af31505\loch\f37 Insert Table\cell }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1 -\widctlpar\intbl\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0 {\rtlch\fcs1 \af37\afs20 \ltrch\fcs0 \f37\fs20\insrsid3236999 \trowd \irow13\irowband13\lastrow \ltrrow\ts11\trgaph108\trleft-108\trbrdrt\brdrs\brdrw10\brdrcf1 \trbrdrl -\brdrs\brdrw10\brdrcf1 \trbrdrb\brdrs\brdrw10\brdrcf1 \trbrdrr\brdrs\brdrw10\brdrcf1 \trftsWidth1\trpaddl108\trpaddr108\trpaddfl3\trpaddfr3\tblind0\tblindtype3 \clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb -\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 \cltxlrtb\clftsWidth3\clwWidth2898\clshdrawnil \cellx2790\clvertalc\clbrdrt\brdrs\brdrw10\brdrcf1 \clbrdrl\brdrs\brdrw10\brdrcf1 \clbrdrb\brdrs\brdrw10\brdrcf1 \clbrdrr\brdrs\brdrw10\brdrcf1 -\cltxlrtb\clftsWidth3\clwWidth4500\clshdrawnil \cellx7290\row }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af37 \ltrch\fcs0 \f37\insrsid3236999 -\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a -9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad -5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 -b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 -0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 -a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f -c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 -0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 -a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 -6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b -4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b -4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100aa5225dfc60600008b1a0000160000007468656d652f7468656d652f -7468656d65312e786d6cec595d8bdb46147d2ff43f08bd3bfe92fcb1c41b6cd9ceb6d94d42eca4e4716c8fadc98e344633de8d0981923c160aa569e943037deb -43691b48a02fe9afd936a54d217fa17746b63c638fbb9b2585a5640d8b343af7ce997bafce1d4997afdc8fa87384134e58dc708b970aae83e3211b9178d2706f -f7bbb99aeb7081e211a22cc60d778eb97b65f7c30f2ea31d11e2083b601ff31dd4704321a63bf93c1fc230e297d814c7706dcc920809384d26f951828ec16f44 -f3a542a1928f10895d274611b8bd311e932176fad2a5bbbb74dea1701a0b2e078634e949d7d8b050d8d1615122f89c0734718e106db830cf881df7f17de13a14 -7101171a6e41fdb9f9ddcb79b4b330a2628bad66d7557f0bbb85c1e8b0a4e64c26836c52cff3bd4a33f3af00546ce23ad54ea553c9fc29001a0e61a52917dda7 -dfaab7dafe02ab81d2438bef76b55d2e1a78cd7f798373d3973f03af40a97f6f03dfed06104503af4029dedfc07b5eb51478065e81527c65035f2d34db5ed5c0 -2b5048497cb8812ef89572b05c6d061933ba6785d77daf5b2d2d9caf50500d5975c929c62c16db6a2d42f758d2058004522448ec88f9148fd110aa3840940c12 -e2ec93490885374531e3305c2815ba8532fc973f4f1da988a01d8c346bc90b98f08d21c9c7e1c3844c45c3fd18bcba1ae4cdcb1fdfbc7cee9c3c7a71f2e89793 -c78f4f1efd9c3a32acf6503cd1ad5e7fffc5df4f3f75fe7afeddeb275fd9f15cc7fffed367bffdfaa51d082b5d85e0d5d7cffe78f1ecd5379ffff9c3130bbc99 -a0810eef930873e73a3e766eb10816a6426032c783e4ed2cfa2122ba45339e701423398bc57f478406fafa1c5164c1b5b019c13b09488c0d787576cf20dc0b93 -9920168fd7c2c8001e30465b2cb146e19a9c4b0b737f164fec9327331d770ba123dbdc018a8dfc766653d05662731984d8a07993a258a0098eb170e4357688b1 -6575770931e27a408609e36c2c9cbbc46921620d499f0c8c6a5a19ed9108f232b711847c1bb139b8e3b418b5adba8d8f4c24dc15885ac8f73135c27815cd048a -6c2efb28a27ac0f791086d247bf364a8e33a5c40a6279832a733c29cdb6c6e24b05e2de9d7405eec693fa0f3c84426821cda7cee23c674649b1d06218aa6366c -8fc4a18efd881f428922e7261336f80133ef10790e7940f1d674df21d848f7e96a701b9455a7b42a107965965872791533a37e7b733a4658490d08bfa1e71189 -4f15f73559f7ff5b5907217df5ed53cbaa2eaaa0371362bda3f6d6647c1b6e5dbc03968cc8c5d7ee369ac53731dc2e9b0decbd74bf976ef77f2fdddbeee7772f -d82b8d06f9965bc574abae36eed1d67dfb9850da13738af7b9daba73e84ca32e0c4a3bf5cc8ab3e7b8690887f24e86090cdc2441cac64998f88488b017a229ec -ef8bae7432e10bd713ee4c19876dbf1ab6fa96783a8b0ed8287d5c2d16e5a3692a1e1c89d578c1cfc6e15143a4e84a75f50896b9576c27ea51794940dabe0d09 -6d329344d942a2ba1c9441520fe610340b09b5b277c2a26e615193ee97a9da6001d4b2acc0d6c9810d57c3f53d30012378a242148f649ed2542fb3ab92f92e33 -bd2d984605c03e625901ab4cd725d7adcb93ab4b4bed0c99364868e566925091513d8c87688417d52947cf42e36d735d5fa5d4a02743a1e683d25ad1a8d6fe8d -c579730d76ebda40635d2968ec1c37dc4ad9879219a269c31dc3633f1c4653a81d2eb7bc884ee0ddd95024e90d7f1e6599265cb4110fd3802bd149d520220227 -0e2551c395cbcfd24063a5218a5bb104827061c9d541562e1a3948ba99643c1ee3a1d0d3ae8dc848a7a7a0f0a95658af2af3f383a5259b41ba7be1e8d819d059 -720b4189f9d5a20ce0887078fb534ca33922f03a3313b255fdad35a685eceaef13550da5e3884e43b4e828ba98a77025e5191d7596c5403b5bac1902aa8564d1 -080713d960f5a01add34eb1a2987ad5df7742319394d34573dd35015d935ed2a66ccb06c036bb13c5f93d7582d430c9aa677f854bad725b7bed4bab57d42d625 -20e059fc2c5df70c0d41a3b69acca026196fcab0d4ecc5a8d93b960b3c85da599a84a6fa95a5dbb5b8653dc23a1d0c9eabf383dd7ad5c2d078b9af549156df3d -f44f136c700fc4a30d2f81675470954af8f09020d810f5d49e24950db845ee8bc5ad0147ce2c210df741c16f7a41c90f72859adfc97965af90abf9cd72aee9fb -e562c72f16daadd243682c228c8a7efacda50bafa2e87cf1e5458d6f7c7d89966fdb2e0d599467eaeb4a5e11575f5f8aa5ed5f5f1c02a2f3a052ead6cbf55625 -572f37bb39afddaae5ea41a5956b57826abbdb0efc5abdfbd0758e14d86b9603afd2a9e52ac520c8799582a45fabe7aa5ea9d4f4aacd5ac76b3e5c6c6360e5a9 -7c2c6201e155bc76ff010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f -7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be -9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980 -ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5b -babac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e -745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f -2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f74 -68656d654d616e616765722e786d6c504b01022d0014000600080000002100aa5225dfc60600008b1a00001600000000000000000000000000d6020000746865 -6d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000d00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cb0a00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6; -\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong; -\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2; -\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text; -\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2; -\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List; -\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1; -\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision; -\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1; -\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1; -\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; -\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2; -\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2; -\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; -\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3; -\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4; -\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; -\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4; -\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5; -\lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; -\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; -\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; -\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; -\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; -\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; -\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; -\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; -\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; -\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; -\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; -\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; -\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; -\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; -\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; -\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; -\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; -\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; -\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; -\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; -\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; -\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; -\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; -\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; -\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; -\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; -\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; -\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; -\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; -\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 -4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000a08c -a88f93dad001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file +{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fprq2\fcharset0 Cambria;}{\f1\froman\fprq2\fcharset0 Times New Roman;}{\f2\fswiss\fprq2\fcharset0 Calibri;}{\f3\fmodern\fprq1\fcharset0 Courier New;}} +{\colortbl ;\red23\green54\blue93;\red0\green0\blue0;} +{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\brdrb\brdrs\brdrw20\brsp80 \nowidctlpar\sa300\qc\cf1\expndtw5\kerning28\f0\fs52 Shortcuts for Inserting\f1\par +\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2\brsp80 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\qc\cf0\expndtw0\kerning0\f2\fs22 KEY STROKE\cell COMMAND\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2\brsp80 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3\fs20 [SHIFT] [CTRL] [SPACE]\cell\f2 Insert Hard Space\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [B]\cell\f2 Insert Current Type Before (at same level)\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [C]\cell\f2 Insert a Caution\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [F]\cell\f2 Insert a Figure\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [H]\cell\f2 Insert a High Level Step\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [I]\cell\f2 Insert Current Type After (at same level)\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [CTRL] [J]\f2\cell Insert Referenced Object\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [N]\cell\f2 Insert Note\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [R]\cell\f2 Insert RNO\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [S]\cell\f2 Insert Sub Step\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [CTRL] [T]\cell\f2 Insert Transition\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [D]\cell\f2 Insert Indent\cell\row\trowd\trgaph108\trleft-108\trbrdrl\brdrs\brdrw10\brdrcf2 \trbrdrt\brdrs\brdrw10\brdrcf2 \trbrdrr\brdrs\brdrw10\brdrcf2 \trbrdrb\brdrs\brdrw10\brdrcf2 \trpaddl108\trpaddr108\trpaddfl3\trpaddfr3 +\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx2790\clvertalc\clbrdrl\brdrw10\brdrs\brdrcf2\clbrdrt\brdrw10\brdrs\brdrcf2\clbrdrr\brdrw10\brdrs\brdrcf2\clbrdrb\brdrw10\brdrs\brdrcf2 \cellx7290\pard\intbl\nowidctlpar\f3 [SHIFT] [CTRL] [T]\cell\f2 Insert Table\cell\row\pard\nowidctlpar\sa200\sl276\slmult1\fs22\par +} + \ No newline at end of file diff --git a/PROMS/VEPROMS User Interface/dlgExportImport.cs b/PROMS/VEPROMS User Interface/dlgExportImport.cs index 5cb9d39b..61c08be3 100644 --- a/PROMS/VEPROMS User Interface/dlgExportImport.cs +++ b/PROMS/VEPROMS User Interface/dlgExportImport.cs @@ -1841,6 +1841,8 @@ namespace VEPROMS ExportEntry(xe, ci.MyEntry, "entry"); if (ci.ContentGridCount > 0) ExportGrid(xe, ci.MyGrid, "grid"); + if (ci.ContentImageCount > 0) + ExportImage(xe, ci.MyImage, "image"); if (ci.ContentPartCount > 0) foreach (PartInfo pi in ci.ContentParts) ExportPart(xe, pi, ((E_FromTypes)pi.FromType).ToString().ToLower()); @@ -1910,6 +1912,8 @@ namespace VEPROMS ExportEntry(ci.MyEntry, "entry"); if (ci.ContentGridCount > 0) ExportGrid(ci.MyGrid, "grid"); + if (ci.ContentImageCount > 0) + ExportImage(ci.MyImage, "image"); if (ci.ContentPartCount > 0) foreach (PartInfo pi in ci.ContentParts) ExportPart(pi, ((E_FromTypes)pi.FromType).ToString().ToLower()); @@ -2050,6 +2054,78 @@ namespace VEPROMS ExportDocument(ei.MyDocument, "document"); MyWriter.WriteEndElement(); } + private void ExportImage(XmlElement xn, ImageInfo ii, string nodename) + { + /* + ContentID + ImageType + FileName + Data + Config + DTS + UserID + */ + XmlElement xe = xn.OwnerDocument.CreateElement(nodename); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "contentid", ii.ContentID.ToString())); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "imagetype", ii.ImageType.ToString())); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "filename", ii.FileName)); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "data", Convert.ToBase64String(ii.Data))); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "config", ii.Config)); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "dts", ii.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); + xe.Attributes.SetNamedItem(AddAttribute(xe.OwnerDocument, "userid", ii.UserID.ToString())); + //image audits + ExportImageAudits(xe, ii); + xn.AppendChild(xe); + } + private void ExportImageAudits(XmlElement xn, ImageInfo ii) + { + if (cbxExportAudits.Checked) + { + ImageAuditInfoList audits = ImageAuditInfoList.Get(ii.ContentID); + if (audits.Count > 0) + { + XmlElement xe = xn.OwnerDocument.CreateElement("audits"); + foreach (ImageAuditInfo audit in audits) + { + if (audit.DeleteStatus == 0) + { + XmlElement xee = xn.OwnerDocument.CreateElement("audit"); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "auditid", audit.AuditID.ToString())); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "contentid", audit.ContentID.ToString())); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "imagetype", audit.ImageType.ToString())); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "filename", audit.FileName)); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "data", Convert.ToBase64String(audit.Data))); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "config", audit.Config)); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "dts", audit.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff"))); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "userid", audit.UserID)); + xee.Attributes.SetNamedItem(AddAttribute(xee.OwnerDocument, "deletestatus", audit.DeleteStatus.ToString())); + xe.AppendChild(xee); + } + } + } + } + } + private void ExportImage(ImageInfo ii, string nodename) + { + /* + ContentID + ImageType + FileName + Data + Config + DTS + UserID + */ + MyWriter.WriteStartElement(nodename); + MyWriter.WriteAttributeString("contentid", ii.ContentID.ToString()); + MyWriter.WriteAttributeString("imagetype", ii.ImageType.ToString()); + MyWriter.WriteAttributeString("filename", ii.FileName); + MyWriter.WriteAttributeString("data", Convert.ToBase64String(ii.Data)); + MyWriter.WriteAttributeString("config", ii.Config); + MyWriter.WriteAttributeString("dts", ii.DTS.ToString("MM/dd/yyyy HH:mm:ss.fff")); + MyWriter.WriteAttributeString("userid", ii.UserID.ToString()); + MyWriter.WriteEndElement(); + } private void ExportDocument(XmlElement xn, DocumentInfo di, string nodename) { /* @@ -3144,7 +3220,18 @@ namespace VEPROMS // DateTime dts = DateTime.Parse(xr.GetAttribute("dts")); // Annotation ann = Annotation.MakeAnnotation(itm, AnnotationType.Get(typeid), rtftext, searchtext, config, dts, userid); //} - + private void AddImage(Content content, XmlNode xc) + { + XmlNode xn = xc.SelectSingleNode("image"); + int imagetype = int.Parse(xn.Attributes.GetNamedItem("imagetype").InnerText); + string filename = xn.Attributes.GetNamedItem("filename").InnerText; + byte[] data = Convert.FromBase64String(xn.Attributes.GetNamedItem("data").InnerText); + string config = xn.Attributes.GetNamedItem("config").InnerText; + string userid = xn.Attributes.GetNamedItem("userid").InnerText; + DateTime dts = DateTime.Parse(xn.Attributes.GetNamedItem("dts").InnerText); + VEPROMS.CSLA.Library.Image img = VEPROMS.CSLA.Library.Image.MakeImage(content, imagetype, filename, data, config, dts, userid); + img.Save(); + } private void AddAnnotations(int itemID, XmlNode xn) { Item itm = Item.Get(itemID); @@ -3272,6 +3359,8 @@ namespace VEPROMS Old2NewContent.Add(int.Parse(xc.Attributes.GetNamedItem("contentid").InnerText), step.MyContent.ContentID); if (xc.SelectNodes("grid").Count > 0) AddGrid(step.MyContent, xc); + if (xc.SelectNodes("image").Count > 0) + AddImage(step.MyContent, xc); if (xn.SelectNodes("annotation").Count > 0) AddAnnotations(step.ItemID, xn); if (xc.SelectNodes("rousage").Count > 0) diff --git a/PROMS/VEPROMS User Interface/frmVEPROMS.cs b/PROMS/VEPROMS User Interface/frmVEPROMS.cs index 6506739d..1edda1dc 100644 --- a/PROMS/VEPROMS User Interface/frmVEPROMS.cs +++ b/PROMS/VEPROMS User Interface/frmVEPROMS.cs @@ -3100,6 +3100,9 @@ namespace VEPROMS { infotabRO.Visible = _LastStepRTB.MyItemInfo.MyDocVersion.DocVersionAssociationCount > 0; infotabTransition.Visible = !_CurrentItem.IsFigure; + // don't allow ro insert for a non-ro figure. First check that it is visible (from above line of code), + // and allow for non-figures or ro figures (for replace of existing ro figures) + infotabRO.Visible = infotabRO.Visible && (!_CurrentItem.IsFigure || (_CurrentItem.IsFigure && _CurrentItem.MyContent.MyImage == null)); displayRO.Enabled = _LastStepRTB.EditMode || _LastStepRTB.IsRoTable; displayTransition.Enabled = _LastStepRTB.EditMode; } @@ -3155,6 +3158,8 @@ namespace VEPROMS E_ROValueType.Table : (SelectedStepTabPanel.MyStepPanel.SelectedEditItem.MyItemInfo.IsFigure) ? E_ROValueType.Image : E_ROValueType.Text; if (_LastStepRTB.IsRoTable && _LastStepRTB.MyItemInfo.MyContent.ContentRoUsageCount > 0) displayRO.CurROLink = _LastStepRTB.MyItemInfo.MyContent.ContentRoUsages[0]; + if (_LastStepRTB.IsRoFigure && _LastStepRTB.MyItemInfo.MyContent.ContentRoUsageCount > 0) + displayRO.CurROLink = _LastStepRTB.MyItemInfo.MyContent.ContentRoUsages[0]; // if this is an enhanced step (linked from a source document), don't bring up the ro or transition panel, // and don't allow replace on the find/replace dialog. if (args.MyItemInfo.IsEnhancedStep) diff --git a/PROMS/VEPROMS.CSLA.Library/Config/ImageConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/ImageConfig.cs new file mode 100644 index 00000000..ae9eb0cd --- /dev/null +++ b/PROMS/VEPROMS.CSLA.Library/Config/ImageConfig.cs @@ -0,0 +1,149 @@ +using System; +using System.ComponentModel; + +namespace VEPROMS.CSLA.Library +{ + [Serializable] + [TypeConverter(typeof(ExpandableObjectConverter))] + public class ImageConfig : ConfigDynamicTypeDescriptor, INotifyPropertyChanged + { + #region DynamicTypeDescriptor + internal override bool IsReadOnly + { + get { return _ImageInfo == null; } + } + #endregion + #region XML + private XMLProperties _Xp; + private XMLProperties Xp + { + get { return _Xp; } + } + #endregion + #region Constructors + private ImageInfo _ImageInfo; + public ImageConfig(ImageInfo imageInfo) + { + if (imageInfo == null) + { + string xmlx = ""; + _Xp = new XMLProperties(xmlx); + return; + } + _ImageInfo = imageInfo; + string xml = imageInfo.Config; + if (xml == string.Empty) xml = ""; + _Xp = new XMLProperties(xml); + } + public ImageConfig() + { + string xml = ""; + _Xp = new XMLProperties(xml); + } + internal string GetValue(string group, string item) + { + return _Xp[group, item]; + } + #endregion + #region Local Properties + [Category("Image")] + [Browsable(false)] + [DisplayName("DataSize")] + [RefreshProperties(RefreshProperties.All)] + [Description("DataSize")] + public int Image_DataSize // original size of image data, if it is compressed + { + get + { + string s = _Xp["Image", "DataSize"]; + if (s == string.Empty) return 0; + int tst = 0; + try + { + tst = int.Parse(s); + } + catch (Exception ex) + { + return 0; + } + return int.Parse(s); + } + set + { + string s = _Xp["Image", "DataSize"]; + if (value.ToString() == s) return; + _Xp["Image", "DataSize"] = value.ToString(); + OnPropertyChanged("Image_DataSize"); + } + } + [Category("Image")] + [Browsable(false)] + [DisplayName("Width")] + [RefreshProperties(RefreshProperties.All)] + [Description("Width")] + public int Image_Width // resized image's resized width + { + get + { + string s = _Xp["Image", "Width"]; + if (s == string.Empty) return 0; + int tst = 0; + try + { + tst = int.Parse(s); + } + catch (Exception ex) + { + return 0; + } + return int.Parse(s); + } + set + { + string s = _Xp["Image", "Width"]; + if (value.ToString() == s) return; + _Xp["Image", "Width"] = value.ToString(); + OnPropertyChanged("Image_Width"); + } + } + [Category("Image")] + [Browsable(false)] + [DisplayName("Height")] + [RefreshProperties(RefreshProperties.All)] + [Description("Height")] + public int Image_Height // resized image's resized height + { + get + { + string s = _Xp["Image", "Height"]; + if (s == string.Empty) return 0; + int tst = 0; + try + { + tst = int.Parse(s); + } + catch (Exception ex) + { + return 0; + } + return int.Parse(s); + } + set + { + string s = _Xp["Image", "Height"]; + if (value.ToString() == s) return; + _Xp["Image", "Height"] = value.ToString(); + OnPropertyChanged("Image_Height"); + } + } + #endregion + #region ToString + public override string ToString() + { + string s = _Xp.ToString(); + if (s == "" || s == "") return string.Empty; + return s; + } + #endregion + } +} diff --git a/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs index 2d7ecb71..61728587 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs @@ -358,6 +358,60 @@ namespace VEPROMS.CSLA.Library OnPropertyChanged("Step_Responsibility"); } } + #region RO image sizing + // if the RO image (figure) is resized, save it in the step config, not in the ROImageConfig. If stored in ROImageConfig + // the size is set for ALL uses. + public int Step_ImageWidth + { + get + { + string s = _Xp["Step", "ImageWidth"]; + if (s == string.Empty) return 0; + int tst = 0; + try + { + tst = int.Parse(s); + } + catch (Exception ex) + { + return 0; + } + return int.Parse(s); + } + set + { + string s = _Xp["Step", "ImageWidth"]; + if (value.ToString() == s) return; + _Xp["Step", "ImageWidth"] = value.ToString(); + OnPropertyChanged("Step_ImageWidth"); + } + } + public int Step_ImageHeight + { + get + { + string s = _Xp["Step", "ImageHeight"]; + if (s == string.Empty) return 0; + int tst = 0; + try + { + tst = int.Parse(s); + } + catch (Exception ex) + { + return 0; + } + return int.Parse(s); + } + set + { + string s = _Xp["Step", "ImageHeight"]; + if (value.ToString() == s) return; + _Xp["Step", "ImageHeight"] = value.ToString(); + OnPropertyChanged("Step_ImageHeight"); + } + } + #endregion // Enhanced Documents private EnhancedDocuments _MyEnhancedDocuments = null; public EnhancedDocuments MyEnhancedDocuments diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs index 10d3807f..6fe5d679 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/AuditExt.cs @@ -1771,6 +1771,28 @@ namespace VEPROMS.CSLA.Library public partial class ContentInfo { + public static ContentInfo RestoreImage(ImageAuditInfo iai) + { + try + { + using (Content ctmp = Content.Get(iai.ContentID)) + { + ctmp.MyImage.FileName = iai.FileName; + ctmp.MyImage.Data = iai.Data; + ctmp.MyImage.Config = iai.Config; + ctmp.MyImage.DTS = DateTime.Now; + ctmp.MyImage.UserID = Volian.Base.Library.VlnSettings.UserID; + ctmp.DTS = DateTime.Now; + ImageInfo.Refresh(ctmp.MyImage); + ctmp.Save(); + return ContentInfo.Get(iai.ContentID); + } + } + catch (Exception ex) + { + throw new DbCslaException("Error on ContentInfo.RestoreImage", ex); + } + } public static ContentInfo RestoreContent(ContentAuditInfo cai,ROFstInfo myRoFst) { try diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs index 6815bda8..ba7d4d35 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ItemExt.cs @@ -2219,6 +2219,11 @@ namespace VEPROMS.CSLA.Library //string number = cont.Number; string number = DisplayNumber; //if (cont.Type >= 20000) number = Ordinal.ToString() + "."; + if ((cont.Type == 20036 || cont.Type == 20037 || cont.Type == 20038 || cont.Type == 20039))// && !RO + { + if (MyContent.ContentRoUsages == null || MyContent.ContentRoUsages.Count == 0) + return "Embedded Image"; + } if (cont.Type >= 20000) number = MyTab == null ? "" : MyTab.CleanText; return string.Format("{0} {1}", number, DisplayText).Trim(); // Need TrimEnd(); for IP3 //return string.Format("{0} {1}", number, cont.Text).Trim(); diff --git a/PROMS/VEPROMS.CSLA.Library/Generated/Item.cs b/PROMS/VEPROMS.CSLA.Library/Generated/Item.cs index 8d11330d..6d49dcb7 100644 --- a/PROMS/VEPROMS.CSLA.Library/Generated/Item.cs +++ b/PROMS/VEPROMS.CSLA.Library/Generated/Item.cs @@ -102,7 +102,11 @@ namespace VEPROMS.CSLA.Library { foreach (Item tmp in _RefreshItems) { - if (tmp._MyContent != null) ContentInfo.Refresh(tmp._MyContent); + if (tmp._MyContent != null) + { + ContentInfo.Refresh(tmp._MyContent); + if (tmp._MyContent.MyImage != null) ImageInfo.Refresh(tmp._MyContent.MyImage); + } ItemInfo.Refresh(tmp); } foreach (ItemAnnotation tmp in _RefreshItemAnnotations) diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.cs b/PROMS/Volian.Controls.Library/DisplayHistory.cs index 7c7eb75d..81d19e96 100644 --- a/PROMS/Volian.Controls.Library/DisplayHistory.cs +++ b/PROMS/Volian.Controls.Library/DisplayHistory.cs @@ -231,6 +231,7 @@ namespace Volian.Controls.Library myRTB.Clear(); //myRTB.LastRtf = string.Empty; myVFG.Clear(); + myPicBox.Image = null; tvAudits.Nodes.Clear(); if (MyItemInfo == null) { @@ -316,6 +317,22 @@ namespace Volian.Controls.Library } break; } + // handle figures (images): + else if (cai.Type == 20036 || cai.Type == 20037 || cai.Type == 20038 || cai.Type == 20039) + { + ImageAuditInfoList imail = ImageAuditInfoList.Get(cai.ContentID); + foreach (ImageAuditInfo imai in imail) + { + if (imai.DeleteStatus == 0) + { + if (contentHistory == null) + contentHistory = tvAudits.Nodes.Add("Content Changes"); + TreeNode tn = contentHistory.Nodes.Add(imai.ToString()); + tn.Tag = imai; + } + } + break; + } else if (cai.DTS != ci.DTS) { if (contentHistory == null) @@ -761,6 +778,19 @@ namespace Volian.Controls.Library myVFG.Clear(); } } + if (tn.Tag is ImageAuditInfo) + { + ImageAuditInfo iai = tn.Tag as ImageAuditInfo; + if (MessageBox.Show(this, "Do you want to restore this image?", "Confirm Image Restore", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) + { + ContentInfo ci = ContentInfo.RestoreImage(iai); + RefreshRequired = true; + UpdateHistory(); + myRTB.Clear(); + myVFG.Clear(); + myPicBox.Image = null; // myPicBox is the PictureBox that shows the selected figure + } + } } List myRoFst_ROTableUpdate(object sender, ROFstInfoROTableUpdateEventArgs args) @@ -784,6 +814,7 @@ namespace Volian.Controls.Library { btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);//CanRestore(); GridAuditInfo gai = tn.Tag as GridAuditInfo; + myPicBox.Visible = false; myVFG.Visible = true; myVFG.BringToFront(); panel1.Invalidate(new Rectangle(0, 0, myVFG.Width + 4, 4)); @@ -798,6 +829,30 @@ namespace Volian.Controls.Library panel1.Visible = true; return; } + if (tn.Tag is ImageAuditInfo) + { + btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion); + ImageAuditInfo iai = tn.Tag as ImageAuditInfo; + myVFG.Visible = false; + myRTB.Visible = false; + myPicBox.Visible = true; + myPicBox.BringToFront(); + panel1.Invalidate(new Rectangle(0, 0, myPicBox.Width + 4, 4)); + panel1.Invalidate(new Rectangle(0, 0, 4, myPicBox.Height + 4)); + panel1.Visible = false; + ImageInfo imgin = ImageInfo.Get(iai.ContentID); + + // check if image data was compressed, i.e. config stores original size: + ImageConfig imgCfg = new ImageConfig(imgin); + byte[] imgData = iai.Data; + if (imgCfg.Image_DataSize > 0) imgData = ROImageInfo.Decompress(imgData, imgCfg.Image_DataSize); + MemoryStream ms = new MemoryStream(imgData); + myPicBox.Image = System.Drawing.Image.FromStream(ms); + myPicBox.Width = Math.Max(myPicBox.Image.Width, panel1.Width); + myPicBox.Height = Math.Max(myPicBox.Image.Height, 200); + panel1.Visible = true; + return; + } if (tn.Tag is ContentAuditInfo) { btnRestore.Enabled = UserInfo.CanEdit(MyUserInfo, MyProcedureInfo.MyDocVersion);//CanRestore(); diff --git a/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs b/PROMS/Volian.Controls.Library/DisplayHistory.designer.cs index 4a812bbbc2365a54b5ff23ac12800af59a3067e9..87fcb3cef4237d7ca3471a59b28b94458be79767 100644 GIT binary patch delta 155 zcmbQ%%5", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.cbPageBreak.TabIndex = 0; @@ -124,10 +134,10 @@ namespace Volian.Controls.Library // // this.cbCAS.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.cbCAS.Location = new System.Drawing.Point(3, 9); - this.cbCAS.Margin = new System.Windows.Forms.Padding(2); + this.cbCAS.Location = new System.Drawing.Point(4, 11); + this.cbCAS.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.cbCAS.Name = "cbCAS"; - this.cbCAS.Size = new System.Drawing.Size(162, 15); + this.cbCAS.Size = new System.Drawing.Size(187, 17); this.superTooltipTags.SetSuperTooltip(this.cbCAS, new DevComponents.DotNetBar.SuperTooltipInfo("Continuous Action Summary", "", "Include this in the Continuous Action Summary section\r\n\r\nkeyboard command: ", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.cbCAS.TabIndex = 1; @@ -143,10 +153,10 @@ namespace Volian.Controls.Library this.cmbCheckoff.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.cmbCheckoff.FormattingEnabled = true; this.cmbCheckoff.ItemHeight = 17; - this.cmbCheckoff.Location = new System.Drawing.Point(3, 17); - this.cmbCheckoff.Margin = new System.Windows.Forms.Padding(2); + this.cmbCheckoff.Location = new System.Drawing.Point(4, 21); + this.cmbCheckoff.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.cmbCheckoff.Name = "cmbCheckoff"; - this.cmbCheckoff.Size = new System.Drawing.Size(194, 23); + this.cmbCheckoff.Size = new System.Drawing.Size(257, 23); this.cmbCheckoff.TabIndex = 0; this.cmbCheckoff.WatermarkFont = new System.Drawing.Font("Microsoft Sans Serif", 7.8F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.cmbCheckoff.WatermarkText = "select signoff / checkoff"; @@ -159,10 +169,10 @@ namespace Volian.Controls.Library this.groupPanelCheckoff.Controls.Add(this.cmbCheckoff); this.groupPanelCheckoff.DisabledBackColor = System.Drawing.Color.Empty; this.groupPanelCheckoff.Dock = System.Windows.Forms.DockStyle.Top; - this.groupPanelCheckoff.Location = new System.Drawing.Point(0, 145); - this.groupPanelCheckoff.Margin = new System.Windows.Forms.Padding(2); + this.groupPanelCheckoff.Location = new System.Drawing.Point(0, 178); + this.groupPanelCheckoff.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.groupPanelCheckoff.Name = "groupPanelCheckoff"; - this.groupPanelCheckoff.Size = new System.Drawing.Size(202, 77); + this.groupPanelCheckoff.Size = new System.Drawing.Size(269, 95); // // // @@ -206,10 +216,10 @@ namespace Volian.Controls.Library this.groupPanelChgBar.Controls.Add(this.rbChgBarOn); this.groupPanelChgBar.DisabledBackColor = System.Drawing.Color.Empty; this.groupPanelChgBar.Dock = System.Windows.Forms.DockStyle.Top; - this.groupPanelChgBar.Location = new System.Drawing.Point(0, 222); - this.groupPanelChgBar.Margin = new System.Windows.Forms.Padding(2); + this.groupPanelChgBar.Location = new System.Drawing.Point(0, 273); + this.groupPanelChgBar.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.groupPanelChgBar.Name = "groupPanelChgBar"; - this.groupPanelChgBar.Size = new System.Drawing.Size(202, 108); + this.groupPanelChgBar.Size = new System.Drawing.Size(269, 133); // // // @@ -244,30 +254,29 @@ namespace Volian.Controls.Library // // tbChgID // - this.tbChgID.Location = new System.Drawing.Point(0, 67); - this.tbChgID.Margin = new System.Windows.Forms.Padding(2); + this.tbChgID.Location = new System.Drawing.Point(0, 82); + this.tbChgID.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.tbChgID.Name = "tbChgID"; - this.tbChgID.Size = new System.Drawing.Size(81, 20); + this.tbChgID.Size = new System.Drawing.Size(107, 22); this.tbChgID.TabIndex = 4; this.tbChgID.TextChanged += new System.EventHandler(this.tbChgID_TextChanged); // // lblChgId // this.lblChgId.AutoSize = true; - this.lblChgId.Location = new System.Drawing.Point(0, 52); - this.lblChgId.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.lblChgId.Location = new System.Drawing.Point(0, 64); this.lblChgId.Name = "lblChgId"; - this.lblChgId.Size = new System.Drawing.Size(58, 13); + this.lblChgId.Size = new System.Drawing.Size(74, 17); this.lblChgId.TabIndex = 3; this.lblChgId.Text = "Change ID"; // // rbChgBarOff // this.rbChgBarOff.AutoSize = true; - this.rbChgBarOff.Location = new System.Drawing.Point(0, 26); - this.rbChgBarOff.Margin = new System.Windows.Forms.Padding(2); + this.rbChgBarOff.Location = new System.Drawing.Point(0, 32); + this.rbChgBarOff.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.rbChgBarOff.Name = "rbChgBarOff"; - this.rbChgBarOff.Size = new System.Drawing.Size(45, 17); + this.rbChgBarOff.Size = new System.Drawing.Size(56, 21); this.superTooltipTags.SetSuperTooltip(this.rbChgBarOff, new DevComponents.DotNetBar.SuperTooltipInfo("Change Bar OFF", "", "Turn change bar off. Note that \'OVERRIDE\' will turn off a change bar even though" + " text is changed.\r\n\r\nkeyboard command: ", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.rbChgBarOff.TabIndex = 2; @@ -279,10 +288,10 @@ namespace Volian.Controls.Library // rbChgBarOn // this.rbChgBarOn.AutoSize = true; - this.rbChgBarOn.Location = new System.Drawing.Point(0, 4); - this.rbChgBarOn.Margin = new System.Windows.Forms.Padding(2); + this.rbChgBarOn.Location = new System.Drawing.Point(0, 5); + this.rbChgBarOn.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.rbChgBarOn.Name = "rbChgBarOn"; - this.rbChgBarOn.Size = new System.Drawing.Size(41, 17); + this.rbChgBarOn.Size = new System.Drawing.Size(50, 21); this.superTooltipTags.SetSuperTooltip(this.rbChgBarOn, new DevComponents.DotNetBar.SuperTooltipInfo("Change Bar ON", "", "Add a change bar on this step\r\n\r\nkeyboard command: ", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.rbChgBarOn.TabIndex = 1; this.rbChgBarOn.TabStop = true; @@ -301,9 +310,9 @@ namespace Volian.Controls.Library this.groupPanelChgStepType.DisabledBackColor = System.Drawing.Color.Empty; this.groupPanelChgStepType.Dock = System.Windows.Forms.DockStyle.Top; this.groupPanelChgStepType.Location = new System.Drawing.Point(0, 0); - this.groupPanelChgStepType.Margin = new System.Windows.Forms.Padding(2); + this.groupPanelChgStepType.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.groupPanelChgStepType.Name = "groupPanelChgStepType"; - this.groupPanelChgStepType.Size = new System.Drawing.Size(202, 145); + this.groupPanelChgStepType.Size = new System.Drawing.Size(269, 178); // // // @@ -345,20 +354,20 @@ namespace Volian.Controls.Library // this.lblNoTypeChgReason.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; this.lblNoTypeChgReason.ForeColor = System.Drawing.Color.Red; - this.lblNoTypeChgReason.Location = new System.Drawing.Point(2, 28); - this.lblNoTypeChgReason.Margin = new System.Windows.Forms.Padding(2); + this.lblNoTypeChgReason.Location = new System.Drawing.Point(3, 34); + this.lblNoTypeChgReason.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.lblNoTypeChgReason.Name = "lblNoTypeChgReason"; - this.lblNoTypeChgReason.Size = new System.Drawing.Size(194, 96); + this.lblNoTypeChgReason.Size = new System.Drawing.Size(259, 118); this.lblNoTypeChgReason.TabIndex = 5; // // cbChgAll // this.cbChgAll.AutoSize = true; this.cbChgAll.BackColor = System.Drawing.Color.Transparent; - this.cbChgAll.Location = new System.Drawing.Point(2, 6); - this.cbChgAll.Margin = new System.Windows.Forms.Padding(2); + this.cbChgAll.Location = new System.Drawing.Point(3, 7); + this.cbChgAll.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.cbChgAll.Name = "cbChgAll"; - this.cbChgAll.Size = new System.Drawing.Size(119, 17); + this.cbChgAll.Size = new System.Drawing.Size(153, 21); this.superTooltipTags.SetSuperTooltip(this.cbChgAll, new DevComponents.DotNetBar.SuperTooltipInfo("Change Step Type - All At Level", "", "When checked, all steps at the level of current step will have their step type ch" + "anged to the selected type in list below...", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.cbChgAll.TabIndex = 4; @@ -370,10 +379,11 @@ namespace Volian.Controls.Library this.listBoxStepTypes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.listBoxStepTypes.FormattingEnabled = true; - this.listBoxStepTypes.Location = new System.Drawing.Point(2, 28); - this.listBoxStepTypes.Margin = new System.Windows.Forms.Padding(2); + this.listBoxStepTypes.ItemHeight = 16; + this.listBoxStepTypes.Location = new System.Drawing.Point(3, 34); + this.listBoxStepTypes.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.listBoxStepTypes.Name = "listBoxStepTypes"; - this.listBoxStepTypes.Size = new System.Drawing.Size(194, 95); + this.listBoxStepTypes.Size = new System.Drawing.Size(257, 116); this.superTooltipTags.SetSuperTooltip(this.listBoxStepTypes, new DevComponents.DotNetBar.SuperTooltipInfo("Possible Step Types", "", "This list allows change of type showing all selections of any possible step type " + "for the current step.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.listBoxStepTypes.TabIndex = 3; @@ -392,10 +402,10 @@ namespace Volian.Controls.Library // // this.cbPlaceKeeperCont.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.cbPlaceKeeperCont.Location = new System.Drawing.Point(3, 47); - this.cbPlaceKeeperCont.Margin = new System.Windows.Forms.Padding(2); + this.cbPlaceKeeperCont.Location = new System.Drawing.Point(4, 58); + this.cbPlaceKeeperCont.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.cbPlaceKeeperCont.Name = "cbPlaceKeeperCont"; - this.cbPlaceKeeperCont.Size = new System.Drawing.Size(158, 15); + this.cbPlaceKeeperCont.Size = new System.Drawing.Size(183, 17); this.superTooltipTags.SetSuperTooltip(this.cbPlaceKeeperCont, new DevComponents.DotNetBar.SuperTooltipInfo("Placekeeper Continuous Action", "", "Include this on the Placekeeper marked as a Continuous Action\r\n\r\nkeyboard command" + ": ", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.cbPlaceKeeperCont.TabIndex = 1; @@ -410,10 +420,10 @@ namespace Volian.Controls.Library // // this.cbPlaceKeeper.BackgroundStyle.CornerType = DevComponents.DotNetBar.eCornerType.Square; - this.cbPlaceKeeper.Location = new System.Drawing.Point(3, 28); - this.cbPlaceKeeper.Margin = new System.Windows.Forms.Padding(2); + this.cbPlaceKeeper.Location = new System.Drawing.Point(4, 34); + this.cbPlaceKeeper.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.cbPlaceKeeper.Name = "cbPlaceKeeper"; - this.cbPlaceKeeper.Size = new System.Drawing.Size(84, 15); + this.cbPlaceKeeper.Size = new System.Drawing.Size(95, 17); this.superTooltipTags.SetSuperTooltip(this.cbPlaceKeeper, new DevComponents.DotNetBar.SuperTooltipInfo("Placekeeper", "", "Include this on the Placekeeper\r\n\r\nkeyboard command: ", null, null, DevComponents.DotNetBar.eTooltipColor.Gray)); this.cbPlaceKeeper.TabIndex = 1; this.cbPlaceKeeper.Text = "Placekeeper"; @@ -429,10 +439,10 @@ namespace Volian.Controls.Library this.groupPanelIncludeOn.Controls.Add(this.cbCAS); this.groupPanelIncludeOn.DisabledBackColor = System.Drawing.Color.Empty; this.groupPanelIncludeOn.Dock = System.Windows.Forms.DockStyle.Top; - this.groupPanelIncludeOn.Location = new System.Drawing.Point(0, 388); - this.groupPanelIncludeOn.Margin = new System.Windows.Forms.Padding(2); + this.groupPanelIncludeOn.Location = new System.Drawing.Point(0, 477); + this.groupPanelIncludeOn.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.groupPanelIncludeOn.Name = "groupPanelIncludeOn"; - this.groupPanelIncludeOn.Size = new System.Drawing.Size(202, 94); + this.groupPanelIncludeOn.Size = new System.Drawing.Size(269, 116); // // // @@ -472,10 +482,10 @@ namespace Volian.Controls.Library this.groupPanelWcnTrnResp.Controls.Add(this.tbRespons); this.groupPanelWcnTrnResp.DisabledBackColor = System.Drawing.Color.Empty; this.groupPanelWcnTrnResp.Dock = System.Windows.Forms.DockStyle.Top; - this.groupPanelWcnTrnResp.Location = new System.Drawing.Point(0, 482); - this.groupPanelWcnTrnResp.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); + this.groupPanelWcnTrnResp.Location = new System.Drawing.Point(0, 593); + this.groupPanelWcnTrnResp.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); this.groupPanelWcnTrnResp.Name = "groupPanelWcnTrnResp"; - this.groupPanelWcnTrnResp.Size = new System.Drawing.Size(202, 138); + this.groupPanelWcnTrnResp.Size = new System.Drawing.Size(269, 170); // // // @@ -509,27 +519,142 @@ namespace Volian.Controls.Library // // tbRespons // - this.tbRespons.Location = new System.Drawing.Point(27, 16); + this.tbRespons.Location = new System.Drawing.Point(36, 20); + this.tbRespons.Margin = new System.Windows.Forms.Padding(4); this.tbRespons.Multiline = true; this.tbRespons.Name = "tbRespons"; this.tbRespons.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; - this.tbRespons.Size = new System.Drawing.Size(164, 81); + this.tbRespons.Size = new System.Drawing.Size(217, 99); this.tbRespons.TabIndex = 0; this.tbRespons.Leave += new System.EventHandler(this.tbRespons_Leave); // + // groupPanelFigSize + // + this.groupPanelFigSize.BackColor = System.Drawing.Color.Transparent; + this.groupPanelFigSize.CanvasColor = System.Drawing.SystemColors.Control; + this.groupPanelFigSize.ColorSchemeStyle = DevComponents.DotNetBar.eDotNetBarStyle.Office2007; + this.groupPanelFigSize.Controls.Add(this.btnFSrestore); + this.groupPanelFigSize.Controls.Add(this.trBarFS); + this.groupPanelFigSize.Controls.Add(this.btnFsSav); + this.groupPanelFigSize.Controls.Add(this.tbFSHt); + this.groupPanelFigSize.Controls.Add(this.tbFSWd); + this.groupPanelFigSize.Controls.Add(this.lblFSHt); + this.groupPanelFigSize.Controls.Add(this.lblFSWidth); + this.groupPanelFigSize.DisabledBackColor = System.Drawing.Color.Empty; + this.groupPanelFigSize.Dock = System.Windows.Forms.DockStyle.Top; + this.groupPanelFigSize.Location = new System.Drawing.Point(0, 763); + this.groupPanelFigSize.Name = "groupPanelFigSize"; + this.groupPanelFigSize.Size = new System.Drawing.Size(269, 166); + // + // + // + this.groupPanelFigSize.Style.BackColor2SchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground2; + this.groupPanelFigSize.Style.BackColorGradientAngle = 90; + this.groupPanelFigSize.Style.BackColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBackground; + this.groupPanelFigSize.Style.BorderBottom = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.groupPanelFigSize.Style.BorderBottomWidth = 1; + this.groupPanelFigSize.Style.BorderColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelBorder; + this.groupPanelFigSize.Style.BorderLeft = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.groupPanelFigSize.Style.BorderLeftWidth = 1; + this.groupPanelFigSize.Style.BorderRight = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.groupPanelFigSize.Style.BorderRightWidth = 1; + this.groupPanelFigSize.Style.BorderTop = DevComponents.DotNetBar.eStyleBorderType.Solid; + this.groupPanelFigSize.Style.BorderTopWidth = 1; + this.groupPanelFigSize.Style.CornerDiameter = 4; + this.groupPanelFigSize.Style.CornerType = DevComponents.DotNetBar.eCornerType.Rounded; + this.groupPanelFigSize.Style.TextAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Center; + this.groupPanelFigSize.Style.TextColorSchemePart = DevComponents.DotNetBar.eColorSchemePart.PanelText; + this.groupPanelFigSize.Style.TextLineAlignment = DevComponents.DotNetBar.eStyleTextAlignment.Near; + // + // + // + this.groupPanelFigSize.StyleMouseDown.CornerType = DevComponents.DotNetBar.eCornerType.Square; + // + // + // + this.groupPanelFigSize.StyleMouseOver.CornerType = DevComponents.DotNetBar.eCornerType.Square; + this.groupPanelFigSize.TabIndex = 21; + this.groupPanelFigSize.Text = "Image Size"; + // + // trBarFS + // + this.trBarFS.Location = new System.Drawing.Point(15, 71); + this.trBarFS.Maximum = 700; + this.trBarFS.Minimum = 50; + this.trBarFS.Name = "trBarFS"; + this.trBarFS.Size = new System.Drawing.Size(172, 56); + this.trBarFS.TabIndex = 5; + this.trBarFS.Value = 50; + this.trBarFS.Scroll += new System.EventHandler(this.trBarFS_Scroll); + // + // btnFsSav + // + this.btnFsSav.Location = new System.Drawing.Point(150, 3); + this.btnFsSav.Name = "btnFsSav"; + this.btnFsSav.Size = new System.Drawing.Size(62, 24); + this.btnFsSav.TabIndex = 4; + this.btnFsSav.Text = "Set"; + this.btnFsSav.UseVisualStyleBackColor = true; + this.btnFsSav.Click += new System.EventHandler(this.btnFsSav_Click); + // + // tbFSHt + // + this.tbFSHt.Enabled = false; + this.tbFSHt.Location = new System.Drawing.Point(56, 33); + this.tbFSHt.Name = "tbFSHt"; + this.tbFSHt.Size = new System.Drawing.Size(78, 22); + this.tbFSHt.TabIndex = 3; + // + // tbFSWd + // + this.tbFSWd.Location = new System.Drawing.Point(56, 5); + this.tbFSWd.Name = "tbFSWd"; + this.tbFSWd.Size = new System.Drawing.Size(78, 22); + this.tbFSWd.TabIndex = 2; + this.tbFSWd.Leave += new System.EventHandler(this.tbFSWd_Leave); + // + // lblFSHt + // + this.lblFSHt.AutoSize = true; + this.lblFSHt.Location = new System.Drawing.Point(5, 34); + this.lblFSHt.Name = "lblFSHt"; + this.lblFSHt.Size = new System.Drawing.Size(49, 17); + this.lblFSHt.TabIndex = 1; + this.lblFSHt.Text = "Height"; + // + // lblFSWidth + // + this.lblFSWidth.AutoSize = true; + this.lblFSWidth.Location = new System.Drawing.Point(6, 7); + this.lblFSWidth.Name = "lblFSWidth"; + this.lblFSWidth.Size = new System.Drawing.Size(44, 17); + this.lblFSWidth.TabIndex = 0; + this.lblFSWidth.Text = "Width"; + // + // btnFSrestore + // + this.btnFSrestore.Location = new System.Drawing.Point(150, 33); + this.btnFSrestore.Name = "btnFSrestore"; + this.btnFSrestore.Size = new System.Drawing.Size(72, 32); + this.btnFSrestore.TabIndex = 6; + this.btnFSrestore.Text = "Restore"; + this.btnFSrestore.UseVisualStyleBackColor = true; + this.btnFSrestore.Click += new System.EventHandler(this.btnFSrestore_Click); + // // DisplayTags // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.groupPanelFigSize); this.Controls.Add(this.groupPanelWcnTrnResp); this.Controls.Add(this.groupPanelIncludeOn); this.Controls.Add(this.groupPanelPaginate); this.Controls.Add(this.groupPanelChgBar); this.Controls.Add(this.groupPanelCheckoff); this.Controls.Add(this.groupPanelChgStepType); - this.Margin = new System.Windows.Forms.Padding(2); + this.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2); this.Name = "DisplayTags"; - this.Size = new System.Drawing.Size(202, 802); + this.Size = new System.Drawing.Size(269, 987); this.groupPanelPaginate.ResumeLayout(false); this.groupPanelPaginate.PerformLayout(); this.groupPanelCheckoff.ResumeLayout(false); @@ -541,6 +666,9 @@ namespace Volian.Controls.Library this.groupPanelIncludeOn.PerformLayout(); this.groupPanelWcnTrnResp.ResumeLayout(false); this.groupPanelWcnTrnResp.PerformLayout(); + this.groupPanelFigSize.ResumeLayout(false); + this.groupPanelFigSize.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trBarFS)).EndInit(); this.ResumeLayout(false); } @@ -567,5 +695,13 @@ namespace Volian.Controls.Library private System.Windows.Forms.Label lblChgId; private DevComponents.DotNetBar.Controls.GroupPanel groupPanelWcnTrnResp; private System.Windows.Forms.TextBox tbRespons; + private DevComponents.DotNetBar.Controls.GroupPanel groupPanelFigSize; + private System.Windows.Forms.TextBox tbFSHt; + private System.Windows.Forms.TextBox tbFSWd; + private System.Windows.Forms.Label lblFSHt; + private System.Windows.Forms.Label lblFSWidth; + private System.Windows.Forms.Button btnFsSav; + private System.Windows.Forms.TrackBar trBarFS; + private System.Windows.Forms.Button btnFSrestore; } } diff --git a/PROMS/Volian.Controls.Library/DisplayTags.cs b/PROMS/Volian.Controls.Library/DisplayTags.cs index b984e05a..3ab4c7e5 100644 --- a/PROMS/Volian.Controls.Library/DisplayTags.cs +++ b/PROMS/Volian.Controls.Library/DisplayTags.cs @@ -190,12 +190,20 @@ namespace Volian.Controls.Library groupPanelCheckoff.Style.BackColor = Color.Cornsilk; groupPanelIncludeOn.Style.BackColor = Color.Cornsilk; groupPanelWcnTrnResp.Style.BackColor = Color.Cornsilk; + groupPanelFigSize.Style.BackColor = Color.Cornsilk; cbPageBreak.Checked = false; // will be set below if HLS & config has it on cbPlaceKeeper.Checked = false; // will be set below if HLS & config has this set cbPlaceKeeperCont.Checked = false; // will be set below if substep & config has this set cbPageBreak.Enabled = CurItemInfo.IsHigh; - cbPlaceKeeper.Enabled = (((SectionConfig)CurItemInfo.ActiveSection.MyConfig).Section_Placekeeper == "Y"); - cbPlaceKeeperCont.Enabled = (cbPlaceKeeper.Enabled && !CurItemInfo.IsInRNO && !CurItemInfo.IsHigh); + if (!CurItemInfo.IsFigure) + { + cbPlaceKeeper.Enabled = (((SectionConfig)CurItemInfo.ActiveSection.MyConfig).Section_Placekeeper == "Y"); + cbPlaceKeeperCont.Enabled = (cbPlaceKeeper.Enabled && !CurItemInfo.IsInRNO && !CurItemInfo.IsHigh); + } + else + { + cbPlaceKeeper.Enabled = cbPlaceKeeperCont.Enabled = false; + } //cbCAS.Enabled = true; rbChgBarOff.Enabled = true; rbChgBarOn.Enabled = true; @@ -217,7 +225,7 @@ namespace Volian.Controls.Library //if ((fmtdata.ProcData.CheckOffData.CheckOffList == null || fmtdata.ProcData.CheckOffData.CheckOffList.Count == 0) || // fmtdata.ProcData.CheckOffData.Menu=="Signoff") // cmbCheckoff.Enabled = false; - cbCAS.Enabled = true; + cbCAS.Enabled = !CurItemInfo.IsFigure; if (((CurItemInfo.ActiveFormat.PlantFormat.FormatData.PurchaseOptions.Value & E_PurchaseOptions.EnhancedBackgrounds) == E_PurchaseOptions.EnhancedBackgrounds) || ((CurItemInfo.ActiveFormat.PlantFormat.FormatData.PurchaseOptions.Value & E_PurchaseOptions.EnhancedDeviations) == E_PurchaseOptions.EnhancedDeviations)) { @@ -276,6 +284,30 @@ namespace Volian.Controls.Library cmbCheckoff.Enabled = false; } + // show the part of panel for resizing a figure (if figure already exists: MyImage is set for non-RO existing images & content.text has a link in it) + if (MyEditItem.MyItemInfo.IsFigure && (MyEditItem.MyItemInfo.MyContent.MyImage != null || MyEditItem.MyItemInfo.MyContent.Text.ToUpper().Contains("#LINK"))) + { + groupPanelFigSize.Visible = true; + int ht = (MyEditItem as ImageItem).MyPictureBox.Height; + int wd = (MyEditItem as ImageItem).MyPictureBox.Width; + _origFigureSizeRatio = (float)ht / (float)wd; // use this to keep width/height ratio while changing size. + float wd1 = (float)MyEditItem.MyItemInfo.MyDocStyle.Layout.PageWidth - (float)MyEditItem.MyItemInfo.MyDocStyle.Layout.LeftMargin; + float ht1 = (float)MyEditItem.MyItemInfo.MyDocStyle.Layout.PageLength - (float)MyEditItem.MyItemInfo.MyDocStyle.Layout.TopMargin - 36; // 36 is to allow for end message + float wd2 = Math.Min(wd1, ht1 / _origFigureSizeRatio); // keep original ratio + trBarFS.Maximum = Math.Max((int)wd2, trBarFS.Maximum); + if (wd > trBarFS.Maximum) trBarFS.Maximum = wd + 1; + trBarFS.Minimum = Math.Min(wd, 72); + trBarFS.Value = (int)wd; + ImageItem ii = MyEditItem as ImageItem; + _origFigureSizeWidth = ii.MyPictureBox.Width; + tbFSWd.Text = ii.MyPictureBox.Width.ToString(); + tbFSHt.Text = ii.MyPictureBox.Height.ToString(); + } + else + { + groupPanelFigSize.Visible = false; + } + // change bar setting depends on whether step has changed (dts) as compared to date/time off the // procedure that it's in. // There is also an override flag in the config for the step, used to override the change bar to 'off' @@ -376,7 +408,9 @@ namespace Volian.Controls.Library _MyStepTypeInd.Clear(); foreach (StepDataRetval sdr in sdl) { - listBoxStepTypes.Items.Add(sdr.Name); + // Figure menu titles have been changed from using the 'AER' in titles to 'Left' + string menutext = CurItemInfo.IsFigure && sdr.Name.Contains("AER")?sdr.Name.Replace("AER", "Left"):sdr.Name; + listBoxStepTypes.Items.Add(menutext); _MyStepTypeInd.Add(sdr.Index); } } @@ -597,6 +631,75 @@ namespace Volian.Controls.Library } #endregion + // The following supports the portion of displaytags that handles sizing of figures. there are 2 text + // boxes with width & height that are tied to the slider value: + + // save data back to the ImageItem. If user enters data in text boxes, this is used. Slider automatically + // saves data to ImageItem. + private void btnFsSav_Click(object sender, EventArgs e) + { + if (MyEditItem is ImageItem) + { + int wd = 0; + int ht = 0; + try + { + wd = int.Parse(tbFSWd.Text); + ht = int.Parse(tbFSHt.Text); + } + catch (Exception ex) + { + wd = 0; + ht = 0; + } + if (wd != 0 && ht != 0) (MyEditItem as ImageItem).SizeImage(wd, ht); + } + } + private float _origFigureSizeRatio = 0; // keep original ratio & width in case of 'restore' + private int _origFigureSizeWidth = 0; + // support user changing size using slider. This saves change back to ImageItem and sets + // width/height text boxes to slider values. + private void trBarFS_Scroll(object sender, EventArgs e) + { + int wd = trBarFS.Value; + int ht = (int)(_origFigureSizeRatio * wd); + (MyEditItem as ImageItem).SizeImage(wd, ht); + tbFSWd.Text = wd.ToString(); + tbFSHt.Text = ht.ToString(); + } + // restore the orignal image size + private void btnFSrestore_Click(object sender, EventArgs e) + { + tbFSWd.Text = _origFigureSizeWidth.ToString(); + int ht = (int)(_origFigureSizeRatio * _origFigureSizeWidth); + tbFSHt.Text = ht.ToString(); + (MyEditItem as ImageItem).SizeImage(_origFigureSizeWidth, ht); + trBarFS.Value = _origFigureSizeWidth; + } + // user entered width in text box, this event gets called on leave of text box. + private void tbFSWd_Leave(object sender, EventArgs e) + { + // check that value input is between the slider values: + bool invaliddata = false; + int newHt = 0; + try + { + newHt = int.Parse(tbFSWd.Text); + } + catch (Exception ex) + { + invaliddata = true; + } + if (invaliddata || newHt < trBarFS.Minimum || newHt > trBarFS.Maximum) + { + string errormsg = string.Format("Invalid width, must be integer and greater than 72 (inch) and less than {0}", trBarFS.Maximum); + MessageBox.Show(errormsg, "Invalid Width data"); + return; + } + tbFSHt.Text = ((int)(int.Parse(tbFSWd.Text) * _origFigureSizeRatio)).ToString(); + trBarFS.Value = int.Parse(tbFSWd.Text); + } + //private void txbxAltConActSumText_Leave(object sender, EventArgs e) //{ // // User left Atlernate Continuous Action Text field. If text changed, then prompt diff --git a/PROMS/Volian.Controls.Library/EditItem.cs b/PROMS/Volian.Controls.Library/EditItem.cs index 21ac43a1..3ea57672 100644 --- a/PROMS/Volian.Controls.Library/EditItem.cs +++ b/PROMS/Volian.Controls.Library/EditItem.cs @@ -995,8 +995,9 @@ namespace Volian.Controls.Library public EditItem AddChildAfter(ItemInfo MyItemInfo, bool expand, bool addFirstChld) { EditItem child = null; - //if (MyItemInfo.MyContent.ContentGridCount != 0) - if (MyItemInfo.MyContent.MyGrid != null) + if (MyItemInfo.IsFigure) + child = new ImageItem(MyItemInfo, MyStepPanel, this, ChildRelation.After, expand); + else if (MyItemInfo.MyContent.MyGrid != null) child = new GridItem(MyItemInfo, MyStepPanel, this, ChildRelation.After, expand); else child = new RTBItem(MyItemInfo, MyStepPanel, this, ChildRelation.After, expand, addFirstChld); @@ -1005,8 +1006,11 @@ namespace Volian.Controls.Library public EditItem AddChildAfter(ItemInfo MyItemInfo, EditItem nextEditItem) { EditItem child = null; - //if (MyItemInfo.MyContent.ContentGridCount != 0) - if (MyItemInfo.MyContent.MyGrid != null) + if (MyItemInfo.IsFigure) + { + child = new ImageItem(MyItemInfo, MyStepPanel, this, ChildRelation.After, true, nextEditItem, FigInsType); + } + else if (MyItemInfo.MyContent.MyGrid != null) child = new GridItem(MyItemInfo, MyStepPanel, this, ChildRelation.After, true, nextEditItem); else child = new RTBItem(MyItemInfo, MyStepPanel, this, ChildRelation.After, true, nextEditItem); @@ -1015,7 +1019,8 @@ namespace Volian.Controls.Library public EditItem AddChildBefore(ItemInfo MyItemInfo, EditItem nextEditItem) { EditItem child = null; - //if (MyItemInfo.MyContent.ContentGridCount != 0) + if (MyItemInfo.IsFigure) + child = new ImageItem(MyItemInfo, MyStepPanel, this, ChildRelation.Before, true, nextEditItem, FigInsType); if(MyItemInfo.MyContent.MyGrid != null) child = new GridItem(MyItemInfo, MyStepPanel, this, ChildRelation.Before, true, nextEditItem); else @@ -1045,6 +1050,7 @@ namespace Volian.Controls.Library SaveContents(); ItemInfo newItemInfo = MyItemInfo.InsertSiblingAfter(text); AddGridIfNeeded(newItemInfo); + AddImageIfNeeded(newItemInfo); DoAddSiblingAfter(newItemInfo, updateStatus); if (MyStepPanel.SelectedEditItem is RTBItem) { @@ -1079,11 +1085,21 @@ namespace Volian.Controls.Library } } } + // This logic allows us to do an Insert Before and Insert After while on a Figure + // if allowed by the format. Note that Before/After for figures is only Clipboard (if + // image data exists in clipboard), or file. Doing RO images will be added later if needed - + // this decision was made because of scope. + private void AddImageIfNeeded(ItemInfo newItemInfo) + { + if (this is ImageItem) ImageItem.AddImageIfNeeded(newItemInfo); + } + public void AddSiblingAfter(int? type, bool updateStatus) { SaveContents(); ItemInfo newItemInfo = MyItemInfo.InsertSiblingAfter("", "", type); AddGridIfNeeded(newItemInfo); + AddImageIfNeeded(newItemInfo); DoAddSiblingAfter(newItemInfo, updateStatus); if (MyStepPanel.SelectedEditItem is RTBItem) { @@ -1129,6 +1145,7 @@ namespace Volian.Controls.Library SaveContents(); ItemInfo newItemInfo = MyItemInfo.InsertSiblingBefore("", "",type); AddGridIfNeeded(newItemInfo); + AddImageIfNeeded(newItemInfo); DoAddSiblingBefore(newItemInfo, updateStatus); } public void AddSiblingBefore(string text, bool updateSelection) @@ -1142,6 +1159,7 @@ namespace Volian.Controls.Library SaveContents(); ItemInfo newItemInfo = MyItemInfo.InsertSiblingBefore(text); AddGridIfNeeded(newItemInfo); + AddImageIfNeeded(newItemInfo); DoAddSiblingBefore(newItemInfo, updateSelection); if (MyStepPanel.SelectedEditItem is RTBItem) { @@ -1207,6 +1225,13 @@ namespace Volian.Controls.Library MyStepPanel.SelectedEditItem = newEditItem;//Update Screen specialAdd = false; } + private ImageItem.E_ImageSource FigInsType = ImageItem.E_ImageSource.None; + public void AddChild(E_FromType fromType, int type, ImageItem.E_ImageSource newSource) + { + FigInsType = newSource; + AddChild("", fromType, type, null); + FigInsType = ImageItem.E_ImageSource.None; + } public void AddChild(E_FromType fromType, int type) { AddChild("", fromType, type, null); @@ -2511,6 +2536,10 @@ namespace Volian.Controls.Library { AdjustTableWidthAndLocation(); } + else if (MyStepData.Type.Contains("Figure")) + { + AdjustTableWidthAndLocation(); + } else { if (MyItemInfo.FormatStepData.StepLayoutData.AlignWithParentTab) @@ -2696,7 +2725,9 @@ namespace Volian.Controls.Library if (_MyPreviousEditItem != null) { _IgnoreResize = true; - if (MyStepData != null && (MyStepData.Type.ToLower().Contains("table") || MyStepData.ParentType.ToLower().Contains("table"))) + // the table code goes through the following, rather than 'istablepart' + if (MyStepData != null && ((MyStepData.Type.ToLower().Contains("table") || MyStepData.ParentType.ToLower().Contains("table"))|| + (MyStepData.Type.ToLower().Contains("figure") || MyStepData.ParentType.ToLower().Contains("figure")))) { ItemWidth = TableWidth; Location = new Point(_MyPreviousEditItem.Left, FindTop(_MyPreviousEditItem.BottomMostEditItem.Bottom)); @@ -2868,6 +2899,11 @@ namespace Volian.Controls.Library if (itemInfo.IsStep && itemInfo.FormatStepData.Type == "TitleWithTextBelow" && ((itemInfo.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_PageListSpBckgrnd) == E_DocStructStyle.DSS_PageListSpBckgrnd)) ContentWidth = myParentEditItem.ContentWidth; + if (itemInfo.IsStep && itemInfo.MyParent.IsFigure) + { + ContentWidth = myParentEditItem.MyParentEditItem.ContentWidth; + Left = MyParentEditItem.MyParentEditItem.Left + MyParentEditItem.MyParentEditItem.TabLeft; + } if (myChildRelation == ChildRelation.None) { @@ -3013,6 +3049,12 @@ namespace Volian.Controls.Library X = gi.MyFlexGrid.Right+2; H = gi.MyFlexGrid.Height; } + else if (this is ImageItem) + { + ImageItem ii = this as ImageItem; + X = ii.MyPictureBox.Right + 4; + H = ii.MyPictureBox.Height; + } else { RTBItem ri = this as RTBItem; diff --git a/PROMS/Volian.Controls.Library/ImageItem.cs b/PROMS/Volian.Controls.Library/ImageItem.cs new file mode 100644 index 00000000..83a7de88 --- /dev/null +++ b/PROMS/Volian.Controls.Library/ImageItem.cs @@ -0,0 +1,995 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Text; +using System.Windows.Forms; +using System.IO; +using System.Text.RegularExpressions; +using VEPROMS.CSLA.Library; + +namespace Volian.Controls.Library +{ + + public partial class ImageItem : EditItem + { + #region IEditItem + // set this for the imageitem so that other code (menuing/ribbons/treeview, etc) will continue to work. Include the MyItemInfo + public override StepRTB MyStepRTB + { + get { return _MyStepRTB; } + } + public override int TableWidth + { + get + { + return (int)_MyPictureBox.Width + ImageMargin; + } + } + /// + /// The left edge of the Tab + /// + public override int ItemLeft + { + get { return Left + lblTab.Left; } + set { Left = value - lblTab.Left; } + } + /// + /// The Location of the Tab + /// + public override Point ItemLocation + { + get { return new Point(Location.X + lblTab.Left, Location.Y); } + set { Location = new Point(value.X - lblTab.Left, value.Y); } + } + /// + /// Width of the Tab and Image + /// + public override int ItemWidth + { + get { return Width - lblTab.Left; } + set + { + Width = ImageMargin + value + lblTab.Left; + } + } + /// + /// Width of the PictureBox + /// + public override int ContentWidth + { + get { return _MyPictureBox.Width; } + set + { + Width = value + lblTab.Left + lblTab.Width; + } + } + public override int BorderWidth { get { return (_MyPictureBox.Width - _MyPictureBox.ClientRectangle.Width); } } + /// + /// Location of the PictureBox + /// + public override Point ContentLocation + { + get { return new Point(Location.X + _MyPictureBox.Left, Location.Y); } + set { Location = new Point(value.X - _MyPictureBox.Left, value.Y); } + } + /// + /// Left edge of the PictureBox + /// + public override int ContentLeft + { + get { return Left + _MyPictureBox.Left; } + } + + override public void AdjustTableWidthAndLocation() + { + Width = Width; + Height = Height; + ItemLocation = TableLocation(MyStepSectionLayoutData, ItemWidth); + } + override public void SetToolTip(string tip) + { + DevComponents.DotNetBar.SuperTooltipInfo tpi = new DevComponents.DotNetBar.SuperTooltipInfo("", "", tip, null, null, DevComponents.DotNetBar.eTooltipColor.Lemon); + _MyToolTip.MinimumTooltipSize = new Size(0, 24); + _MyToolTip.TooltipDuration = 3; + _MyToolTip.SetSuperTooltip(MyPictureBox, tpi); + } + public override void RefreshContent() + { + IdentifyMe(false); + Volian.Base.Library.vlnStackTrace.ShowStackLocal("refreshcontents", 2); + RefreshDisplay(false); + SetExpandAndExpander(MyItemInfo); + } + public override void RefreshOrdinal() + { + TabFormat = null; + } + public override void HandleResize() {} + public override void MatchExpanded() {} + /// + /// Sets the focus to this ImageItem + /// + public override void ItemSelect() + { + if (!_MyPictureBox.Disposing) + { + _MyPictureBox.Focus(); + } + else + { + _MyLog.WarnFormat("Attempt to give Focus to Disposed Object {0}", MyID); + } + ScrollToCenter(); + } + /// + /// Sets the focus to this ImageItem + /// + public override void ItemShow() + { + _MyPictureBox.Focus(); + ScrollToCenter(); + } + public override void SetActive() + { + this.BackColor = MyStepPanel.ActiveColor; + } + public override void SetText() + { + LastMethodsPush("SetText"); + if (MyItemInfo != null) + { + IdentifyMe(false); + } + LastMethodsPop(); + } + public override void SetExpandAndExpander(ItemInfo itemInfo) + { + CanExpand = false; + } + public override void SaveCurrentAndContents() + { + SaveContents(); + } + public override void RefreshDisplay(bool activeMode) + { + if (MyItemInfo.MyContent.MyImage == null) return; // new figure + FileName = MyItemInfo.MyContent.MyImage.FileName; + InsType = FileName.ToUpper() == "PASTE.JPG" ? E_ImageSource.Clipboard : E_ImageSource.File; + System.Drawing.Image img = byteArrayToImage(MyItemInfo.MyContent.MyImage.Data); + MyPictureBox.Image = img; + MyPictureBox.Visible = true; + ImageConfig ic = new ImageConfig(MyItemInfo.MyContent.MyImage); + if (ic != null && ic.Image_Height != 0) + { + _origCfgWd = ic.Image_Width * MyStepPanel.DPI / 72; + _origCfgHt = ic.Image_Height * MyStepPanel.DPI / 72; + } + SetWidthsAndHeights(img); + //need this to trigger update of steptabribbonbuttons: + MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetButtonAndMenuEnabling(true); + } + public override void ToggleEditView(E_ViewMode vwMode) {} + public override string TabFormat + { + get { return null; } + set { ;} + } + public override bool Expanded + { + get { return true; } + set { ; } + } + public override bool CanExpand + { + get { return false; } + set { ; } + } + public override int TabLeft { get { return lblTab.Left; } set { lblTab.Left = value; } } //taken from griditem + public override Font TabFont { get { return MyStepRTB.Font; } set { ; } } + public override string TabText { get { return lblTab.Text; } } + public override Point TabLocation { get { return lblTab.Location; } } + public override Font ContentFont { get { return MyStepRTB.Font; } set { /*MyStepRTB.Font = value*/; } } + public override float ContentTop { get { return MyPictureBox.Top; } } + public override DialogResult ReplaceText(string rpltxt, string fndstr, bool caseSensitive, bool matchWholeWord, bool reverse, bool prompt, IWin32Window fndrpldlg) + { + return DialogResult.OK; + } + public override bool FindText(string str, bool caseSensitive, bool matchWholeWord, bool reverse) + { + return false; + } + public override void PositionToEnd() + { + return; + } + public override void PositionToStart() + { + return; + } + public override string SelectedTextForFind + { + get { return null; } + } + public override bool SpellCheckNext() + { + return true; + } + public override bool Empty + { + get + { + return _MyPictureBox.Image == null; + } + set { _MyPictureBox.Image = null; } + } + public override void RefreshTab() + { + TabFormat = null; + } + public override void SetupHeader(ItemInfo itemInfo) { } + public override void ShowExpanded() { } + #endregion + #region Properties + public enum E_ImageSource : int + { + None = 0, Clipboard = 1, File = 2, RoFigure = 3 + } + public System.Windows.Forms.PictureBox MyPictureBox + { + get { return _MyPictureBox; } + } + private string FileName = null; + private static int _ImageMargin = 18; + /// + /// Margin between the EditItem and the ImageItem. Appears on the Right. + /// Will allow space to draw a Change Bar on the right side of the EditItem. + /// + public static int ImageMargin + { + get { return _ImageMargin; } + set { _ImageMargin = value; } + } + private bool _IsDirty = false; + private int _origCfgHt = 0; // keep track if original size was stored in cfg + private int _origCfgWd = 0; + private bool _pastedNew = false; // need this for flagging newly pasted image (may need to clear cfg) + #endregion + #region Constructors + public ImageItem() + { + InitializeComponent(); + } + // the following displays for existing images + public ImageItem(ItemInfo itemInfo, StepPanel myStepPanel, EditItem myParentEditItem, ChildRelation myChildRelation, bool expand) + { + InitializeComponent(); + MyItemInfo = itemInfo; + SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, null, false); + if (MyItemInfo.MyContent.MyImage != null && MyItemInfo.MyContent.MyImage.Data != null) // this is figure/image (not RO) + { + FileName = MyItemInfo.MyContent.MyImage.FileName; + InsType = FileName.ToUpper() == "PASTE.JPG" ? E_ImageSource.Clipboard : E_ImageSource.File; + System.Drawing.Image img = byteArrayToImage(MyItemInfo.MyContent.MyImage.Data); + MyPictureBox.Image = img; + MyPictureBox.Visible = true; + ImageConfig ic = new ImageConfig(MyItemInfo.MyContent.MyImage); + if (ic != null && ic.Image_Height != 0) // embedded image (not RO) + { + _origCfgWd = ic.Image_Width * MyStepPanel.DPI / 72; + _origCfgHt = ic.Image_Height * MyStepPanel.DPI / 72; + } + SetWidthsAndHeights(img); + } + else + { + // get ro image data from link within the steprtb: + HandleRoImage(); + DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, E_ViewMode.View, false, E_FieldToEdit.Text, true, null, null, false); + MyStepRTB.OrigDisplayText = vlntxt; + InsType = E_ImageSource.RoFigure; + } + AdjustTableWidthAndLocation(); + AddEventHandlers(); + MyStepRTB.RemoveEventHandlers(); + MyStepRTB.Visible = false; + } + private int _newSizeWd = 0; + private int _newSizeHt = 0; + public void SizeImage(int wd, int ht) + { + MyPictureBox.Width = wd; + MyPictureBox.Height = ht; + MyPictureBox.SizeMode = PictureBoxSizeMode.Zoom; + this.Width = MyPictureBox.Width + ImageMargin; + this.Height = MyPictureBox.Height + 10; + _newSizeWd = wd / (MyStepPanel.DPI / 72); + _newSizeHt = ht / (MyStepPanel.DPI / 72); + if (!MyItemInfo.FormatStepData.StepEditData.TypeMenu.MenuItem.ToUpper().Contains("AER")) ItemLocation = TableLocation(MyStepSectionLayoutData, ItemWidth); + _IsDirty = true; + } + private void SetWidthsAndHeights(System.Drawing.Image img) + { + int wd = img.Width * MyStepPanel.DPI / 72; // converts from screen resolution's DPI to image's points (72/inch) + int ht = img.Height * MyStepPanel.DPI / 72; + if (MyItemInfo.MyContent.MyImage != null) // image is null if creating new. + { + ImageConfig ic = new ImageConfig(MyItemInfo.MyContent.MyImage); + if (!_pastedNew && ic != null && ic.Image_Height != 0) + { + wd = ic.Image_Width * MyStepPanel.DPI / 72; + ht = ic.Image_Height * MyStepPanel.DPI / 72; + } + } + + MyPictureBox.Visible = true; + MyPictureBox.Width = wd; + MyPictureBox.Height = ht; + MyPictureBox.SizeMode = PictureBoxSizeMode.Zoom; // as resize matches width/height. + this.Width = MyPictureBox.Width + ImageMargin; + this.Height = MyPictureBox.Height + 10; + } + // the following gets called for 'NEW' images + private E_ImageSource InsType = E_ImageSource.None; + public ImageItem(ItemInfo itemInfo, StepPanel myStepPanel, EditItem myParentEditItem, ChildRelation myChildRelation, bool expand, EditItem nextEditItem, ImageItem.E_ImageSource insType) + { + InitializeComponent(); + MyItemInfo = itemInfo; + if (MyItemInfo.MyContent.MyImage != null && MyItemInfo.MyContent.MyImage.Data != null) // this is figure/image (not RO) + { + SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, nextEditItem, false); + FileName = MyItemInfo.MyContent.MyImage.FileName; + InsType = FileName.ToUpper() == "PASTE.JPG" ? E_ImageSource.Clipboard : E_ImageSource.File; + System.Drawing.Image img = byteArrayToImage(MyItemInfo.MyContent.MyImage.Data); + MyPictureBox.Image = img; + MyPictureBox.Visible = true; + ImageConfig ic = new ImageConfig(MyItemInfo.MyContent.MyImage); + if (ic != null && ic.Image_Height != 0) // embedded image (not RO) + { + _origCfgWd = ic.Image_Width * MyStepPanel.DPI / 72; + _origCfgHt = ic.Image_Height * MyStepPanel.DPI / 72; + } + SetWidthsAndHeights(img); + } + else if (MyItemInfo.MyContent.Text != null && MyItemInfo.MyContent.Text.ToUpper().Contains("RO")) + { + SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, nextEditItem, false); + // get ro image data from link within the steprtb: + HandleRoImage(); + DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, E_ViewMode.View, false, E_FieldToEdit.Text, true, null, null, false); + MyStepRTB.OrigDisplayText = vlntxt; + InsType = E_ImageSource.RoFigure; + } + else + { + InsType = insType; + FileName = null; + //InitializeComponent(); + SetupEditItem(itemInfo, myStepPanel, myParentEditItem, myChildRelation, expand, nextEditItem, false); + MyPictureBox.Width = 100; + MyPictureBox.Height = 100; + this.Width = 100 + ImageMargin; + this.Height = 100; + if (insType == ImageItem.E_ImageSource.File) + { + ImageFileDialog(); + } + else if (insType == ImageItem.E_ImageSource.Clipboard) + { + // see if there is an image in clipboard and if so, insert it: + System.Drawing.Image img = Clipboard.GetImage(); + if (img != null) + { + MyPictureBox.Image = img; + SetWidthsAndHeights(img); + string ext = GetImageFormatExtension(img); + FileName = "paste." + ext; + _IsDirty = true; + } + } + else // this is an Ro image - use displaytext and steprtb to get image data + { + DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, E_ViewMode.View, false, E_FieldToEdit.Text, true, null, null, false); + MyStepRTB.OrigDisplayText = vlntxt; + } + } + AdjustTableWidthAndLocation(); + this.Controls.Add(this._MyPictureBox); + AddEventHandlers(); + MyStepRTB.RemoveEventHandlers(); + MyStepRTB.Visible = false; + } + private void ImageFileDialog() + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + + openFileDialog1.InitialDirectory = "c:\\"; + openFileDialog1.Filter = "Image files (*.jpg;*.tif;*.bmp;*.png)|*.jpg;*.tif;*.bmp;*.png|All files (*.*)|*.*"; + openFileDialog1.FilterIndex = 0; + openFileDialog1.RestoreDirectory = true; + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + try + { + // check that it is an image + System.Drawing.Image img = System.Drawing.Image.FromFile(openFileDialog1.FileName); + if (img != null) + { + FileName = openFileDialog1.FileName; + MyPictureBox.Image = img; + SetWidthsAndHeights(img); + _IsDirty = true; + } + } + catch (Exception ex) + { + MessageBox.Show("Could not create image, check file type.", "Error on Image File Selection"); + return; + } + } + } + //public static System.Drawing.Imaging.ImageFormat GetImageFormat(this System.Drawing.Image img) + //{ + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)) + // return System.Drawing.Imaging.ImageFormat.Jpeg; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp)) + // return System.Drawing.Imaging.ImageFormat.Bmp; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png)) + // return System.Drawing.Imaging.ImageFormat.Png; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf)) + // return System.Drawing.Imaging.ImageFormat.Emf; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Exif)) + // return System.Drawing.Imaging.ImageFormat.Exif; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif)) + // return System.Drawing.Imaging.ImageFormat.Gif; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon)) + // return System.Drawing.Imaging.ImageFormat.Icon; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.MemoryBmp)) + // return System.Drawing.Imaging.ImageFormat.MemoryBmp; + // if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff)) + // return System.Drawing.Imaging.ImageFormat.Tiff; + // else + // return System.Drawing.Imaging.ImageFormat.Wmf; + //} + private static string GetImageFormatExtension(System.Drawing.Image img) + { + return ("jpg"); // seems that this is the only one that works. + /* + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)) + return "jpg"; + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp)) + return "bmp"; + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png)) + return "png"; + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Emf)) + return "emf"; + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif)) + return "gif"; + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon)) + return "ico"; + if (img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff)) + return "tif"; + else + return "wmf"; + */ + } + #endregion + #region RO_Images + public void HandleRoImage() + { + string imageText = null; + ProcedureInfo proc = MyItemInfo.MyProcedure; + DocVersionInfo dvi = proc.MyDocVersion; + ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; + ROFSTLookup lookup = rofst.GetROFSTLookup(dvi); + string linkInfoText = MyItemInfo.MyContent.Text.Replace(@"\u8209?", "-"); + int ind = linkInfoText.IndexOf("[END>"); // found cases where the ro figure had 2 links stored within content->text (BGE data) + if (ind > 0) + { + int indx = linkInfoText.IndexOf("[END>", ind + 3); + if (indx > -1) + { + // link is duplicated (bad data), but handle it: + linkInfoText = linkInfoText.Substring(0, linkInfoText.IndexOf(@"\v ", ind + 3)); + } + } + linkInfoText = linkInfoText.Replace(@"\v ", ""); + Match m = Regex.Match(linkInfoText, @"(.*)[#]Link:([A-Za-z]*):(.*)"); + string val = null; + if (m.Length > 0) // if m.lengh is zero, then no match was found - no RO was entered in the figure substep + { + if (m.Groups.Count < 4) + { + val = string.Format("{0}\n{1}\n{2}n{3}", + linkInfoText.Substring(0, linkInfoText.Length - 16), + linkInfoText.Substring(linkInfoText.Length - 16, 8), + linkInfoText.Substring(linkInfoText.Length - 8, 4), + linkInfoText.Substring(linkInfoText.Length - 4, 4)); + val = val.Replace(@"\u8209?", "-").Replace(@"\u9586?", @"\"); // replace dash and backslash symbols with dash and backslash characters + } + else + { + string[] subs = m.Groups[3].Value.Split(" ".ToCharArray()); + val = lookup.GetRoValue(subs[1]); + if (val == null || val == "?") val = lookup.GetRoValue(subs[1].Substring(0, 12)); + if (val == "?") + { + // Do 'empty' image box. + //_MyLog.WarnFormat("\r\nMissing Referenced Object {0} in {1}", subs[1], itemInfo.ShortPath); + } + } + } + GC.Collect(); // memory garbage collection (Regex memory bug) + if (val != null && val != "?") + { + string imgname = null; + int W = 0; + int H = 0; + string[] vals = val.Split("\n".ToCharArray()); + W = (int)(Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) * MyItemInfo.FormatStepData.Font.CharsToTwips); + int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier); + H = lines * 12; + try + { + imgname = vals[0]; + ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); + if (roImage != null) + imageText = val; + else + { + roImage = rofst.GetROImageByFilename(vals[0], MyItemInfo);// need code to go and get an ROImaage if it exists + if (roImage != null) + imageText = val; + } + AddROImageToScreen(W, H, imageText); + } + catch (Exception ex) + { + string msg = string.Format("Could not display image {0}.", imgname); + MessageBox.Show(msg); + } + } + } + + + public bool ThumbnailCallback() + { + return false; + } + public void AddROImageToScreen(int w, int h, string imageText) + { + string[] vals = imageText.Split("\n".ToCharArray()); + ProcedureInfo proc = MyItemInfo.MyProcedure; + DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo; + ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; + ROImageInfo roImageInfo = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); + if (roImageInfo == null) roImageInfo = rofst.GetROImageByFilename(vals[0], MyItemInfo); + if (roImageInfo != null) + { + System.Drawing.Image.GetThumbnailImageAbort myCallback = + new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback); + ROImageConfig rc = new ROImageConfig(roImageInfo); + int size = Convert.ToInt32(rc.Image_Size); + byte[] cnt = roImageInfo.Content; + byte[] dcnt = ROImageInfo.Decompress(cnt, size); + MemoryStream ms = new MemoryStream(dcnt); + System.Drawing.Image img2 = System.Drawing.Image.FromStream(ms); + // if there is config data that saves the resize of the image, use it, otherwise use what was passed in: + StepConfig sc = new StepConfig(MyItemInfo as StepInfo); + SizeF sizef = new Size(1, 1); + if (sc.Step_ImageHeight == null || sc.Step_ImageHeight == 0) + { + sizef = new SizeF((img2.Width / img2.HorizontalResolution), + (img2.Height / img2.VerticalResolution)); + float fscale = Math.Min(w / sizef.Width, h / sizef.Height); + sizef.Width *= fscale; + sizef.Height *= fscale; + } + else + { + sizef = new Size(sc.Step_ImageWidth, sc.Step_ImageHeight); + } + System.Drawing.Image img = img2.GetThumbnailImage((int)sizef.Width, (int)sizef.Height, myCallback, IntPtr.Zero); + MyPictureBox.Image = img; + SetWidthsAndHeights(img); + } + } + #endregion + #region EventHandlers + private void ImageItem_Enter(object sender, EventArgs e) + { + if (MyStepPanel.DisplayItemChanging) return; + SetMenu("OpenContextMenu"); + MyStepPanel.SelectedEditItem = this; + } + private void AddEventHandlers() + { + // Always be sure to add the same event handlers to RemoveEventHandlers + MyItemInfo.MyContent.Changed += new VEPROMS.CSLA.Library.ContentInfoEvent(MyContent_Changed); + this.Enter += new System.EventHandler(ImageItem_Enter); + this.MyPictureBox.Enter += new System.EventHandler(ImageItem_Enter); + this.Click += new EventHandler(ImageItem_Click); + this.MyPictureBox.Click += new EventHandler(ImageItem_Click); + this.MyPictureBox.PreviewKeyDown += new PreviewKeyDownEventHandler(ImageItem_PreviewKeyDown); //note that PictureBox does not have cursorkey events + this.MyPictureBox.KeyDown += new KeyEventHandler(ImageItem_KeyDown); + this.MyStepRTB.RoInsert += new StepRTBRoEvent(MyStepRTB_RoInsert); + this.MyStepRTB.DoSaveContents += new StepRTBEvent(MyStepRTB_DoSaveContents); // for storing RO data + this.MyPictureBox.Resize += MyPictureBox_Resize; + this.MyPictureBox.MouseDown += MyPictureBox_MouseDown; + } + + void MyPictureBox_MouseDown(object sender, MouseEventArgs e) + { + SetMenu("OpenContextMenu"); + } + + void MyPictureBox_Resize(object sender, EventArgs e) + { + if (this.Height != _MyPictureBox.Height + _MyPictureBox.Top + 7) // add in 7 to make it look good // + 10) + { + LastMethodsPush(string.Format("MyPictureBox_Resize {0}", _MyPictureBox.Height)); + this.Height = _MyPictureBox.Height + _MyPictureBox.Top + 7; + LastMethodsPop(); + } + } + private void RemoveEventHandlers() + { + // Always be sure to add the same event handlers to RemoveEventHandlers + MyItemInfo.MyContent.Changed -= new VEPROMS.CSLA.Library.ContentInfoEvent(MyContent_Changed); + this.Enter -= new System.EventHandler(ImageItem_Enter); + this.MyPictureBox.Enter -= new System.EventHandler(ImageItem_Enter); + this.Click -= new EventHandler(ImageItem_Click); + this.MyPictureBox.Click -= new EventHandler(ImageItem_Click); + this.MyPictureBox.PreviewKeyDown -= new PreviewKeyDownEventHandler(ImageItem_PreviewKeyDown); + this.MyPictureBox.KeyDown -= new KeyEventHandler(ImageItem_KeyDown); + this.MyStepRTB.RoInsert -= new StepRTBRoEvent(MyStepRTB_RoInsert); + this.MyStepRTB.DoSaveContents -= new StepRTBEvent(MyStepRTB_DoSaveContents); + this.MyPictureBox.Resize -= MyPictureBox_Resize; + this.MyPictureBox.MouseDown -= MyPictureBox_MouseDown; + } + void ImageItem_Click(object sender, EventArgs e) + { + if (MyStepPanel.DisplayItemChanging) return; + MyStepPanel.SelectedEditItem = this; + } + // the PictureBox does not have cursor key event support - did this by previewing keydowns and + // if the key is arrow up/down, do associated cursormovement through the StepPanel + void ImageItem_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) + { + switch (e.KeyCode) + { + case Keys.Up: + MyStepPanel.CursorMovement(this, new Point(0, 0), E_ArrowKeys.Up); + break; + case Keys.Down: + MyStepPanel.CursorMovement(this, new Point(0, 0), E_ArrowKeys.Down); + break; + } + } + + void ImageItem_KeyDown(object sender, KeyEventArgs e) + { + if (e.Control) + { + switch (e.KeyCode) + { + case Keys.V: // handle paste of an image + if (MyStepPanel.VwMode == E_ViewMode.View) + { + e.Handled = true; + return; + } + if (InsType == E_ImageSource.RoFigure && MyItemInfo.MyContent.MyImage == null) // on an RO image + { + MessageBox.Show("Cannot replace an existing RO figure/image. Use the Step Properties panel/RO tab.", "Warning, no paste/replace for RO images."); + e.Handled = true; + return; + } + PasteImage(); + e.Handled = true; + return; + } + } + } + public void PasteImage() + { + bool setdata = false; + System.Drawing.Image img = Clipboard.GetImage(); + if (img == null) // let user know there is no valid data in clipboard: + { + MessageBox.Show(this, "The clipboard does not contain image data.", "Cannot paste.", MessageBoxButtons.OK); + return; + } + if (MyItemInfo.MyContent.MyImage != null && img != null) // see if there already is an image and if so - ask if user wants to replace. + { + if (MessageBox.Show(this, "Do you want to replace the existing image?", "Confirm Image Replace", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) == DialogResult.Yes) + { + setdata = true; + } + } + else if (img != null) // no existing image, be sure there is valid data in clipboard + setdata = true; + if (setdata) + { + _IsDirty = true; + _pastedNew = true; + MyPictureBox.Image = img; + SetWidthsAndHeights(img); + string ext = GetImageFormatExtension(img); + FileName = "paste." + ext; + } + } + void MyStepRTB_RoInsert(object sender, StepRTBRoEventArgs args) + { + int sel = MyStepRTB.SelectionStart + args.ValText.Length; + _IsDirty = true; + InsType = E_ImageSource.RoFigure; + MyStepRTB.UpdateStepRtb(args.LinkText, args.ValText); + HandleRoImage(); + } + void MyStepRTB_DoSaveContents(object sender, EventArgs args) + { + _IsDirty = true; + InsType = E_ImageSource.RoFigure; + SaveCurrentAndContents(); + HandleRoImage(); + } + #endregion + #region ContextMenu + void SetMenu(string contentMenu) + { + if (contentMenu == null) + MyStepPanel.MyStepTabPanel.MyStepTabRibbon.ClearContextMenu(); + else if (contentMenu == "OpenContextMenu") + MyStepPanel.MyStepTabPanel.MyStepTabRibbon.SetContextMenuImage(this); + } + #endregion + #region Methods + public override void SetFocus() + { + MyPictureBox.Focus(); + } + public override void SaveContents() + { + MyStepRTB.Visible = false; + if (!_IsDirty) return; + if (InsType != E_ImageSource.None && InsType != E_ImageSource.RoFigure) + { + SaveImage(); + } + else if (InsType == E_ImageSource.RoFigure) + { + if (MyStepRTB.OrigDisplayText == null) + { + DisplayText vlntxt = new DisplayText(MyItemInfo, E_EditPrintMode.Edit, E_ViewMode.View, false, E_FieldToEdit.Text, true, null, null, false); + MyStepRTB.OrigDisplayText = vlntxt; + } + bool success = MyStepRTB.OrigDisplayText.Save((RichTextBox)MyStepRTB); + if (success && _newSizeHt != 0) + { + StepConfig sc = new StepConfig(MyItemInfo as StepInfo); + sc.Step_ImageWidth = (int)(_newSizeWd / (MyStepPanel.DPI / 72f)); + sc.Step_ImageHeight = (int)(_newSizeHt / (MyStepPanel.DPI / 72f)); + using (Item item = MyItemInfo.Get()) + { + item.MyContent.Config = sc.ToString(); + item.Save(); + } + } + } + _IsDirty = false; + } + public void SaveImage() + { + try + { + using (Item _MyItem = MyItemInfo.Get()) + { + byte[] imgToByte = imageToByteArray(MyPictureBox.Image, FileName); + int origLen = imgToByte.Length; + bool compressed = false; + // if file is a tif or bmp see if compressing it saves space and if so, save the + // compressed data with a flag in config, the size needed to decompress, to show it is compressed. + if (FileName.ToUpper().EndsWith(".TIF") || FileName.ToUpper().EndsWith(".BMP")) + { + byte[] cmp = ROImageInfo.Compress(imgToByte); + if (origLen > cmp.Length) + { + imgToByte = cmp; + compressed = true; + } + } + ImageConfig imgCfg = null; + if (_pastedNew && compressed) + { + imgCfg = new ImageConfig(); + imgCfg.Image_DataSize = origLen; + _MyItem.MyContent.MyImage.Config = imgCfg.ToString(); + } + else if (_newSizeHt != 0) + { + if (MyItemInfo.MyContent.MyImage == null && imgCfg == null) + imgCfg = new ImageConfig(); + else if (imgCfg == null) + imgCfg = new ImageConfig(MyItemInfo.MyContent.MyImage); + imgCfg.Image_Width = (int)(_newSizeWd / (MyStepPanel.DPI / 72f)); + imgCfg.Image_Height = (int)(_newSizeHt / (MyStepPanel.DPI / 72f)); + if (compressed) imgCfg.Image_DataSize = origLen; + _MyItem.MyContent.MyImage.Config = imgCfg.ToString(); + } + else if (compressed) + { + if (MyItemInfo.MyContent.MyImage == null && imgCfg == null) + imgCfg = new ImageConfig(); + else if (imgCfg == null) + imgCfg = new ImageConfig(MyItemInfo.MyContent.MyImage); + imgCfg.Image_DataSize = origLen; + _MyItem.MyContent.MyImage.Config = imgCfg.ToString(); + } + _MyItem.MyContent.MyImage.Data = imgToByte; + _MyItem.MyContent.MyImage.FileName = FileName; + _MyItem.MyContent.MyImage.ImageType = 1; + _MyItem.MyContent.MyImage.DTS = DateTime.Now; + _MyItem.MyContent.MyImage.UserID = Volian.Base.Library.VlnSettings.UserID; + _MyItem.MyContent.DTS = DateTime.Now; + _MyItem.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; + _MyItem.Save(); + } + StepConfig sc = MyItemInfo.MyConfig as StepConfig; + // if the plant has the change id option, the change id was entered when the program started. + // this should be saved for every piece of edited data. Note that the set of config + // item Step_MultipleChangeID has the save built in to it. + if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.ProcData.ChangeBarData.ChangeIds + && !this.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.EditorialChange) + { + if (sc == null) sc = new StepConfig(); + sc.Step_ChangeID = this.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.ChgId; + } + // We saved changes. Reset the change bar override. + // IF there is a step config remove the change bar override by setting the CBOverride value to null + // This fixes a problem reported by Farly where if the change bar or overridden to be off, the next + // time a change was made, the change bar remained turned off. + if (sc != null) + sc.Step_CBOverride = null; // clear the change bar override + MyStepRTB.ClearUndo(); + } + catch (Exception ex) + { + MessageBox.Show("The image could not be saved.", "Image Save", MessageBoxButtons.OK, MessageBoxIcon.Information); + return; + } + _newSizeHt = 0; + _newSizeWd = 0; + } + public static byte[] imageToByteArray(System.Drawing.Image imageIn, string fname) + { + // get filename's extension to map to imageformat: + string ext = fname.Substring(fname.IndexOf(".")+1).ToUpper(); + System.Drawing.Imaging.ImageFormat ifmt = System.Drawing.Imaging.ImageFormat.Gif; + switch (ext) + { + case ("JPG"): + ifmt = System.Drawing.Imaging.ImageFormat.Jpeg; + break; + case ("TIF"): + ifmt = System.Drawing.Imaging.ImageFormat.Tiff; + break; + case ("WMF"): + ifmt = System.Drawing.Imaging.ImageFormat.Wmf; + break; + case ("BMP"): + ifmt = System.Drawing.Imaging.ImageFormat.Bmp; + break; + case ("EMF"): + ifmt = System.Drawing.Imaging.ImageFormat.Emf; + break; + case ("GIF"): + ifmt = System.Drawing.Imaging.ImageFormat.Gif; + break; + case ("ICO"): + ifmt = System.Drawing.Imaging.ImageFormat.Icon; + break; + case ("PNG"): + ifmt = System.Drawing.Imaging.ImageFormat.Png; + break; + default: + MessageBox.Show("Invalid File Type"); + return null; + } + MemoryStream ms = new MemoryStream(); + imageIn.Save(ms, ifmt); + return ms.ToArray(); + } + + public System.Drawing.Image byteArrayToImage(byte[] byteArrayIn) + { + // if there is config data, DataSize, then decompress the data: + ImageConfig imgCfg = new ImageConfig(MyItemInfo.MyContent.MyImage); + if (imgCfg.Image_DataSize > 0) byteArrayIn = ROImageInfo.Decompress(byteArrayIn, imgCfg.Image_DataSize); + MemoryStream ms = new MemoryStream(byteArrayIn); + System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms); + return returnImage; + } + // the following is used if an image is being inserted using Before/after from steptabribbon: + public static void AddImageIfNeeded(ItemInfo newItemInfo) + { + string filename = null; + System.Drawing.Image img = Clipboard.GetImage(); + if (img != null) + { + // Ask user if they want to use the clipboard image. + DialogResult dr = MessageBox.Show("Clipboard has an image, use this (select Yes) or select a file (select No)?", "Insert Image Before/After", MessageBoxButtons.YesNo); + if (dr == DialogResult.Yes) + { + + string ext = ImageItem.GetImageFormatExtension(img); + filename = "paste." + ext; + } + else + img = null; + } + if (img==null) + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.InitialDirectory = "c:\\"; + openFileDialog1.Filter = "Image files (*.jpg;*.tif;*.bmp;*.png)|*.jpg;*.tif;*.bmp;*.png|All files (*.*)|*.*"; + openFileDialog1.FilterIndex = 0; + openFileDialog1.RestoreDirectory = true; + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + // check that it is an image + img = System.Drawing.Image.FromFile(openFileDialog1.FileName); + if (img != null) filename = openFileDialog1.FileName; + } + if (filename == null) return; // user must have existed out. How to handle?? + } + byte[] imgToByte = imageToByteArray(img, filename); + int origLen = imgToByte.Length; + bool compressed = false; + // if file is a tif or bmp see if compressing it saves space and if so, save the + // compressed data with a flag in config, the size needed to decompress, to show it is compressed. + if (filename.ToUpper().EndsWith(".TIF") || filename.ToUpper().EndsWith(".BMP")) + { + byte[] cmp = ROImageInfo.Compress(imgToByte); + if (origLen > cmp.Length) + { + imgToByte = cmp; + compressed = true; + } + } + using (Item _MyItem = newItemInfo.Get()) + { + ImageConfig imgCfg = null; + if (compressed) + { + imgCfg = new ImageConfig(); + imgCfg.Image_DataSize = origLen; + _MyItem.MyContent.MyImage.Config = imgCfg.ToString(); + } + _MyItem.MyContent.MyImage.Data = imgToByte; + _MyItem.MyContent.MyImage.FileName = filename; + _MyItem.MyContent.MyImage.ImageType = 1; + _MyItem.MyContent.MyImage.DTS = DateTime.Now; + _MyItem.MyContent.MyImage.UserID = Volian.Base.Library.VlnSettings.UserID; + _MyItem.MyContent.DTS = DateTime.Now; + _MyItem.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; + _MyItem.Save(); + } + } + public override void IdentifyMe(bool highlight) + { + if (highlight) + this.BackColor = Color.Gray; + else + { + if (MyPictureBox.Focused || this.Focused) // If active Set BackColor to the active color + this.BackColor = MyStepPanel.ActiveColor; + else // note that the 'inactive' color is actually MyStepPanel.PanelColor + this.BackColor = MyItemInfo.ItemAnnotationCount == 0 ? MyStepPanel.PanelColor : MyStepPanel.AnnotationColor; + } + } + #endregion + } +} diff --git a/PROMS/Volian.Controls.Library/ImageItem.designer.cs b/PROMS/Volian.Controls.Library/ImageItem.designer.cs new file mode 100644 index 00000000..42a8fd00 --- /dev/null +++ b/PROMS/Volian.Controls.Library/ImageItem.designer.cs @@ -0,0 +1,149 @@ +namespace Volian.Controls.Library +{ + partial class ImageItem + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + this._MyPictureBox = new System.Windows.Forms.PictureBox(); + this._MyStepRTB = new Volian.Controls.Library.StepRTB(this.components); + this._MyStepRTB.Location = new System.Drawing.Point(0, -20); // position richtextbox outside visible range + this.lblTab = new System.Windows.Forms.Label(); + this._MyToolTip = new DevComponents.DotNetBar.SuperTooltip(); + //this._MyvlnExpander = new Volian.Controls.Library.vlnExpander(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.SuspendLayout(); + // + // _MyPictureBox + // + this._MyToolTip.SetSuperTooltip(this._MyPictureBox, new DevComponents.DotNetBar.SuperTooltipInfo("Figure", "", "The input image will be displayed here as a figure.", null, null, DevComponents.DotNetBar.eTooltipColor.Gray, true, true, new System.Drawing.Size(150, 80))); + this._MyPictureBox.Location = new System.Drawing.Point(7, 5); + this._MyPictureBox.Name = "_MyPictureBox"; + // + // lblTab + // + this.lblTab.BackColor = System.Drawing.Color.Transparent; + this.lblTab.Location = new System.Drawing.Point(0, 0); + this.lblTab.Name = "lblTab"; + this.lblTab.Size = new System.Drawing.Size(61, 23); + this.lblTab.TabIndex = 3; + this.lblTab.Visible = false; + //this.lblTab.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lblTab_MouseDown); + // + // _MyStepRTB + // + this._MyStepRTB.Visible = false; + //this._MyStepRTB.AdjustSize = new System.Drawing.Size(0, 0); + //this._MyStepRTB.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // | System.Windows.Forms.AnchorStyles.Right))); + //this._MyStepRTB.BackColor = System.Drawing.Color.Linen; + //this._MyStepRTB.BorderStyle = System.Windows.Forms.BorderStyle.None; + ////KBR this._MyStepRTB.CheckAbove = "|│└┬┼├┌┴┐┤"; + ////KBR this._MyStepRTB.CheckBelow = "|│"; + ////KBR this._MyStepRTB.CheckLeft = "-─┤┬├┼┌┐└‑"; + ////KBR this._MyStepRTB.CheckRight = "-─‑"; + this._MyStepRTB.FieldToEdit = VEPROMS.CSLA.Library.E_FieldToEdit.Text; // was text, but would not process steptabribbon button enabling. .Text; + //this._MyStepRTB.Font = new System.Drawing.Font("Prestige Elite Tall", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(2))); + //this._MyStepRTB.Location = new System.Drawing.Point(107, 0); + //this._MyStepRTB.Margin = new System.Windows.Forms.Padding(4); + //this._MyStepRTB.MyClassName = "RichEdit20W"; + //this._MyStepRTB.MyItemInfo = null; + //this._MyStepRTB.MyLinkText = null; + //this._MyStepRTB.Name = "_MyStepRTB"; + //this._MyStepRTB.ProcessKeystrokes = true; + //this._MyStepRTB.RTBRangeStatus = Volian.Controls.Library.StepRTB.RangeStatus.NoContainedLinks; + //this._MyStepRTB.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; + //this._MyStepRTB.ShowDebug = false; + //this._MyStepRTB.Size = new System.Drawing.Size(312, 25); + //this._MyStepRTB.TabIndex = 2; + //this._MyStepRTB.Text = ""; + //this._MyStepRTB.VwMode = VEPROMS.CSLA.Library.E_ViewMode.Edit; + //KBR this._MyStepRTB.LinkGoTo += new Volian.Controls.Library.StepRTBLinkEvent(this._MyStepRTB_LinkGoTo); + //this._MyStepRTB.Enter += new System.EventHandler(this._StepRTB_Enter); + //this._MyStepRTB.HeightChanged += new Volian.Controls.Library.StepRTBEvent(this._MyStepRTB_HeightChanged); + //this._MyStepRTB.ModeChange += new Volian.Controls.Library.StepRTBModeChangeEvent(this._MyStepRTB_ModeChange); + //KBR this._MyStepRTB.LinkModifyTran += new Volian.Controls.Library.StepRTBLinkEvent(this._MyStepRTB_LinkModifyTran); + //this._MyPictureBox..CursorKeyPress += new Volian.Controls.Library.StepRTBCursorKeysEvent(this._MyStepRTB_CursorKeyPress); + //this._MyPictureBox.CursorMovement += new Volian.Controls.Library.StepRTBCursorMovementEvent(this._MyStepRTB_CursorMovement); + //KBR this._MyStepRTB.LinkModifyRO += new Volian.Controls.Library.StepRTBLinkEvent(this._MyStepRTB_LinkModifyRO); + //KBR this._MyStepRTB.SetMenu += new StepRTBMenuEvent(_MyStepRTB_SetMenu); + //this._MyStepRTB.AdjustTableWidth += new StepRTBTableWidthEvent(_MyStepRTB_AdjustTableWidth); + //KBR this._MyStepRTB.IsNotCurrentSelection += new StepRTBBooleanEvent(_MyStepRTB_IsNotCurrentSelection); + //KBR this._MyStepRTB.OpenAnnotations += new StepRTBEvent(_MyStepRTB_OpenAnnotations); + //KBR this._MyStepRTB.InsertPgBrk += new StepRTBEvent(_MyStepRTB_InsertPgBrk); + //KBR this._MyStepRTB.EnterKeyPressed += new StepRTBCursorKeysEvent(_MyStepRTB_EnterKeyPressed); + //KBR this._MyStepRTB.CheckClipboard += new StepRTBBooleanEvent(_MyStepRTB_CheckClipboard); + //KBR this._MyStepRTB.CopyStep += new StepRTBEvent(_MyStepRTB_CopyStep); + //KBR this._MyStepRTB.OpenContextMenu += new StepRTBLocationEvent(_MyStepRTB_OpenContextMenu); + //KBR this._MyStepRTB.DoMouseWheel += new StepRTBMouseEvent(_MyStepRTB_DoMouseWheel); + //this._MyStepRTB.DoSaveContents += new StepRTBEvent(_MyStepRTB_DoSaveContents); + //KBR this._MyStepRTB.RoInsert += new StepRTBRoEvent(_MyStepRTB_RoInsert); + //this._MyStepRTB.Resize += new System.EventHandler(_MyStepRTB_Resize); + + //this._MyvlnExpander.Attachment = false; + //this._MyvlnExpander.BackColor = System.Drawing.Color.Transparent; + //this._MyvlnExpander.BorderColor = System.Drawing.Color.Silver; + //this._MyvlnExpander.Color1 = System.Drawing.Color.Aquamarine; + //this._MyvlnExpander.Color2 = System.Drawing.Color.Violet; + //this._MyvlnExpander.Expanded = false; + //this._MyvlnExpander.ForeColor = System.Drawing.SystemColors.ButtonHighlight; + //this._MyvlnExpander.GradientAngle = 45; + //this._MyvlnExpander.Location = new System.Drawing.Point(4, 4); + //this._MyvlnExpander.Margin = new System.Windows.Forms.Padding(5); + //this._MyvlnExpander.MyExpanderStyle = Volian.Controls.Library.ExpanderStyle.Round; + //this._MyvlnExpander.Name = "_MyvlnExpander"; + //this._MyvlnExpander.PenWidth = 0; + //this._MyvlnExpander.Size = new System.Drawing.Size(17, 17); + //this._MyvlnExpander.TabIndex = 0; + //this._MyvlnExpander.Trans1 = 128; + //this._MyvlnExpander.Trans2 = 128; + //this._MyvlnExpander.WidthFactor = 7; + //this._MyvlnExpander.BeforeColapse += new Volian.Controls.Library.vlnExpanderEvent(this.vlnExp_BeforeColapse); + //this._MyvlnExpander.BeforeExpand += new Volian.Controls.Library.vlnExpanderEvent(this.vlnExp_BeforeExpand); + // + // ImageItem + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.SystemColors.ButtonFace; + this.Controls.Add(this._MyStepRTB); + //this.Controls.Add(this._MyvlnExpander); + this.Controls.Add(this._MyPictureBox); + this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); + + this.Name = "ImageItem"; + this.Size = new System.Drawing.Size(419, 25); + //this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.lblTab_MouseDown); + this.ResumeLayout(false); + } + private StepRTB _MyStepRTB; + private System.Windows.Forms.PictureBox _MyPictureBox; + private System.Windows.Forms.Label lblTab; + private DevComponents.DotNetBar.SuperTooltip _MyToolTip; + #endregion + } +} diff --git a/PROMS/Volian.Controls.Library/StepRTB.cs b/PROMS/Volian.Controls.Library/StepRTB.cs index 59e9a4dc..2923576b 100644 --- a/PROMS/Volian.Controls.Library/StepRTB.cs +++ b/PROMS/Volian.Controls.Library/StepRTB.cs @@ -198,7 +198,10 @@ namespace Volian.Controls.Library } #endregion #region Properties and Variables - + public bool IsRoFigure + { + get { return (MyItemInfo.IsFigure && MyItemInfo.MyContent.MyImage == null); } + } public bool IsRoTable { get { return (Parent is VlnFlexGrid && (Parent as VlnFlexGrid).IsRoTable); } @@ -701,7 +704,7 @@ namespace Volian.Controls.Library // When a border style is changed, the richtextbox's handle is 'destroyed', so that the handleDestroyed // event is done. This was causing the event handlers to be removed (RemoveEventHandler) so that the // keypress event handler was not run. - private void RemoveEventHandlers() + public void RemoveEventHandlers() { if (_EventHandlersForKeyPress==0) return; ContentsResized -= new ContentsResizedEventHandler(StepRTB_ContentsResized); @@ -2040,6 +2043,17 @@ namespace Volian.Controls.Library ImageWidth = img.Width; Width = ImageWidth + 2; Paste(); + e.Handled = true; + return; + } + else if (iData.GetDataPresent(DataFormats.Dib)) + { + System.Drawing.Image img = Clipboard.GetImage(); + ImageWidth = img.Width; + Width = ImageWidth + 2; + Paste(); + e.Handled = true; + return; } else { diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.cs index 5d8190d8..affecfc3 100644 --- a/PROMS/Volian.Controls.Library/StepTabRibbon.cs +++ b/PROMS/Volian.Controls.Library/StepTabRibbon.cs @@ -126,7 +126,28 @@ namespace Volian.Controls.Library AddWROContext(btnCMRtfEdit); _ContextMenuBar.SetContextMenuEx(_MyStepRTB, btnCMRtfEdit); } - + public void SetContextMenuImage(ImageItem imgItem) + { + btnCMCut.Enabled = false; + btnCMCopy.Enabled = false; + btnCMPaste.Enabled = false; + btnCMPasteText.Enabled = false; + btnCMRO.Enabled = false; + bool isInBuff = false; + try // image in clipboard - for 'paste' + { + System.Drawing.Image img = Clipboard.GetImage(); + isInBuff = img != null; + } + catch (Exception ex) + { + isInBuff = false; + } + btnCMPasteImage.Enabled = isInBuff; + btnCMEditMode1.Enabled = false; //View mode (irrelevant for images) + btnCMGoTo.Enabled = MyItemInfo!=null && MyItemInfo.MyContent != null && MyItemInfo.MyContent.ContentRoUsageCount > 0; + _ContextMenuBar.SetContextMenuEx(imgItem, btnCMRtfEdit); + } private void AddEnhancedDocumentMenu(DevComponents.DotNetBar.ButtonItem myButtonItem, object sender) { DVEnhancedDocuments dveds = MyItemInfo.MyDocVersion.DocVersionConfig.MyEnhancedDocuments; @@ -626,7 +647,7 @@ namespace Volian.Controls.Library } SetButtonAndMenuEnabling(true); SetStepButtonAndMenuEnabling(true); - + SetMenuEnablingForFigures(); _MyLastFormatID = MyItemInfo.ActiveFormat.FormatID; } } @@ -935,7 +956,7 @@ namespace Volian.Controls.Library if (insdata.Length < 2) return; int fromtype = Convert.ToInt32(insdata[0]); int contenttype = Convert.ToInt32(insdata[1]) + 20000; - string tabletype = (insdata.Length == 3)? insdata[2]:null; + string tabOrFigType = (insdata.Length == 3)? insdata[2]:null; // if CautionNoteOrder format variable is set then use it to determine the placement of the // Caution, Note, Warning, or Message (calvert format) if (cautNoteOrder != null && (","+cautNoteOrder+",").Contains(","+(contenttype % 10000).ToString() + ",") && (_MyEditItem.MyItemInfo.Cautions != null || _MyEditItem.MyItemInfo.Notes != null)) @@ -962,7 +983,7 @@ namespace Volian.Controls.Library } else if (InsertingTable(contenttype)) { - if (tabletype.Contains("RO")) + if (tabOrFigType.Contains("RO")) { VlnFlexGrid grd = new VlnFlexGrid(); grd.Rows.Count = 1; @@ -978,11 +999,30 @@ namespace Volian.Controls.Library if (grd != null) _MyEditItem.AddChild((E_FromType)fromtype, contenttype, grd); } } + else if (InsertingFigure(contenttype)) + { + if (tabOrFigType.Contains("RO")) + { + _MyEditItem.AddChild((E_FromType)fromtype, contenttype, ImageItem.E_ImageSource.RoFigure); + StepTabPanel tmp = Parent as StepTabPanel; + tmp.MyDisplayTabControl.OnLinkModifyRO(this, new StepPanelLinkEventArgs(null)); + } + else + { + System.Drawing.Image img = Clipboard.GetImage(); + if (img == null && tabOrFigType.Contains("CL")) + { + MessageBox.Show("Clipboard does not contain image data. Cannot create figure.", "Clipboard Error"); + return; + } + _MyEditItem.AddChild((E_FromType)fromtype, contenttype, tabOrFigType.Contains("CL")?ImageItem.E_ImageSource.Clipboard:ImageItem.E_ImageSource.File); + } + if (_MyEditItem.MyItemInfo.IsFigure && tabOrFigType.Contains("RO")) + btnInsRO_Click(sender, e); + } else { _MyEditItem.AddChild((E_FromType)fromtype, contenttype); - if (_MyEditItem.MyItemInfo.IsFigure) - btnInsRO_Click(sender, e); // open the step properties RO tab when a figure substep is added } } @@ -1061,18 +1101,29 @@ namespace Volian.Controls.Library } return rtnval; } + // Figure (embedded images) + private bool InsertingFigure(int contenttype) + { + bool rtnval = false; + switch (contenttype) + { + case 20036: // Centered + case 20037: // AER (left) + case 20038: // AER (left) without boarder + case 20039: // Centered without boarder + rtnval = true; + break; + } + return rtnval; + } private void btnInsBefore_Click(object sender, EventArgs e) { _MyEditItem.AddSiblingBefore(); - if (_MyEditItem.MyItemInfo.IsFigure) - btnInsRO_Click(sender, e); // open the step properties RO tab when a figure substep is added } private void btnInsAfter_Click(object sender, EventArgs e) { _MyEditItem.AddSiblingAfter(); - if (_MyEditItem.MyItemInfo.IsFigure) - btnInsRO_Click(sender, e); // open the step properties RO tab when a figure substep is added } /// /// Using style for step type, enable/disable formatting buttons @@ -1105,6 +1156,7 @@ namespace Volian.Controls.Library btnCMCopy.Enabled = btnCopy.Enabled = setting; btnPasteAfter.Enabled = btnPasteBefore.Enabled = btnStepPaste.Enabled = btnPasteReplace.Enabled = setting; btnCMGrid.Enabled = setting; + btnCMPasteImage.Enabled = setting; } private void SetButtonMenuEnabledDisabledOnStepType(bool setting) { @@ -1128,13 +1180,6 @@ namespace Volian.Controls.Library btnInsNote.Enabled = true; btnInsCaut.Enabled = true; } - if (MyItemInfo.IsFigure) - { - btnInsTrans.Enabled = btnCMTransition.Enabled = false; - btnCMSymbol.Enabled = btnSymbols.Enabled = false; - btnCMHardSpace.Enabled = btnInsHrdSpc.Enabled = false; - btnIndent.Enabled = false; - } // if in Calvert Alarms Condition/Response, disable insert of Cautions and Notes if (MyItemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvertAlarm) btnInsCaut.Enabled = btnInsNote.Enabled = btnCMInsCaution.Enabled = btnCMInsNote.Enabled = setting && !MyItemInfo.IsInCalvertConditionResponse; @@ -1142,7 +1187,7 @@ namespace Volian.Controls.Library public void SetButtonAndMenuEnabling(bool docontextmenus) { if (_MyStepRTB == null) return; - if (_MyStepRTB.FieldToEdit != E_FieldToEdit.StepText) + if (_MyStepRTB.FieldToEdit != E_FieldToEdit.StepText && !MyItemInfo.IsFigure) // want menu enabling for figures return; // No need to change menu that does not get used DocVersionInfo dvi = MyEditItem.MyItemInfo.MyProcedure.ActiveParent as DocVersionInfo; if (dvi == null) return; @@ -1179,6 +1224,7 @@ namespace Volian.Controls.Library btnCMRedo.Enabled = btnRedo.Enabled = _MyStepRTB.CanRedo; // for paste, see if there is clipboard data, & if so, of a type we can use. + btnCMPasteImage.Enabled = false; try // RHM20150506 Multiline ItemID TextBox { IDataObject iData = Clipboard.GetDataObject(); @@ -1216,6 +1262,31 @@ namespace Volian.Controls.Library btnCMEditRO.Enabled = false; } // OLD: SetStepButtonAndMenuEnabling(docontextmenus); + SetMenuEnablingForFigures(); + } + + private void SetMenuEnablingForFigures() + { + if (MyItemInfo.IsFigure) + { + btnInsTrans.Enabled = btnCMTransition.Enabled = false; + btnInsRO.Enabled = btnCMRO.Enabled = false; + btnCMSymbol.Enabled = btnSymbols.Enabled = false; + btnCMHardSpace.Enabled = btnInsHrdSpc.Enabled = false; + btnIndent.Enabled = false; + btnCMBold.Enabled = btnBold.Enabled = false; + btnCMItalics.Enabled = btnItalics.Enabled = false; + btnCMUnderline.Enabled = btnUnderline.Enabled = false; + btnCMSubscript.Enabled = btnSubscript.Enabled = false; + btnCMSuperscript.Enabled = btnSuperscript.Enabled = false; + btnCMCut.Enabled = btnCut.Enabled = false; + btnCMUndo.Enabled = btnUndo.Enabled = false; + btnCMRedo.Enabled = btnRedo.Enabled = false; + btnChgCase.Enabled = false; + btnPaste.Enabled = false; + btnCMPaste.Enabled = false; + btnCMPasteText.Enabled = false; + } } private void SetButtonEnablingForEnhanced(bool setting) @@ -1510,7 +1581,6 @@ namespace Volian.Controls.Library actable = sd.StepEditData.AcTable; if (actable == null) actable = 0; btnInsHLS.Enabled = MyItemInfo.MyHLS != null; - btnInsCaut.Enabled = ((actable & E_AccStep.AddingCaution) > 0) && !MyItemInfo.IsEnhancedStep; btnInsNote.Enabled = ((actable & E_AccStep.AddingNote) > 0) && !MyItemInfo.IsEnhancedStep; btnInsRNO.Enabled = (actable & E_AccStep.AddingRNO) > 0; @@ -1663,6 +1733,9 @@ namespace Volian.Controls.Library btn.SubItems.Add(bi); } } + //handle various cases for figures: + if (btn.Name == "btnInsFig" && docontextmenus) DoFigureMenuing(btn, cmbtn, sdl); + // if this is a table, then need to add RO/Text table options if (btn.Name == "btnInsTable" && docontextmenus) { @@ -1735,7 +1808,135 @@ namespace Volian.Controls.Library } rbnStepParts.Refresh(); } - + // From Figure menuing, need to map those strings to the index in the StepdataList for setting item's content type: + // + // + // + // + private int Centered = 36; // will always be top level. + private void DoFigureMenuing(ButtonItem btn, ButtonItem cmbtn, List sdl) + { + // Figure menuing: + // Figure (from ribbon) + // If in AER Column: + // Centered + // Left + // From both Centered & Left: + // With Border + // Without Border + // From both w/wo Border: + // RO Figure + // Figure from Clipboard + // Figure From File + // If in RNO column or single column mode (see comment below for this menu): + // With Border + // Without Border + // From both w/wo Border: + // RO Figure + // Figure from Clipboard + // Figure From File + + // This is done for single column mode, or if in the calvertconditionresponse table (dual column) and in the rno column. Note + // the '&&' in if check because when in the calvertconditionresponse table, the section is in 'single column' mode even though + // the condition response table is dual column. + SectionConfig sc = (SectionConfig)MyItemInfo.ActiveSection.MyConfig; + // One Column Mode or Two Column Mode in the RNO Column or Caution or Note + if ((sc.Section_ColumnMode == SectionConfig.SectionColumnMode.One && (!MyItemInfo.IsInCalvertConditionResponse || MyItemInfo.IsInRNO)) + || (sc.Section_ColumnMode == SectionConfig.SectionColumnMode.Two && MyItemInfo.IsInRNO) + || (MyItemInfo.IsCautionOrNotePart)) // single column step editor + { + // setup the sub menus for the insert table ribbon button + btn.Tag = btn.SubItems[0].Tag; + btn.SubItems.Clear(); + DoFigureW_WOborderSubMenu(btn); + // setup the sub menus for the context menu used with the keyborad shortcut + cmbtn.Tag = cmbtn.SubItems[0].Tag; + cmbtn.SubItems.Clear(); + DoFigureW_WOborderSubMenu(cmbtn); + } + else + { + // this is AER column in dual column-need to add 'Centered' & 'Left' + char[] sp = { ' ' }; + btn.Tag = btn.SubItems[0].Tag; + btn.SubItems.Clear(); + string[] insdata = btn.Tag.ToString().Split(sp); + int ftype = Convert.ToInt32(insdata[0]); + int sdtype = Convert.ToInt32(insdata[1]); + DevComponents.DotNetBar.ButtonItem cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + sdtype + "CENT", "Centered"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "Centered"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, 36, "CENT"); + cmbt.Click += new System.EventHandler(btnInsStep_Click); + btn.SubItems.Add(cmbt); + cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + sdtype + "LT", "Left"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "Left"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, 37, "LT"); // Text table + cmbt.Click += new System.EventHandler(btnInsStep_Click); + btn.SubItems.Add(cmbt); + btn.Tag = null; + btn.Click -= new System.EventHandler(btnInsStep_Click); + // setup the sub menus for the insert figure ribbon button + foreach (DevComponents.DotNetBar.ButtonItem tabbtn in btn.SubItems) + DoFigureW_WOborderSubMenu(tabbtn); + // setup the sub menus for the context menu used with the keyborad shortcut + foreach (DevComponents.DotNetBar.ButtonItem cmtabbtn in cmbtn.SubItems) + DoFigureW_WOborderSubMenu(cmtabbtn); + } + } + private void DoFigureW_WOborderSubMenu(DevComponents.DotNetBar.ButtonItem tabbtn) + { + char[] sp = { ' ' }; + string[] insdata = tabbtn.Tag.ToString().Split(sp); + int ftype = Convert.ToInt32(insdata[0]); + int sdtype = Convert.ToInt32(insdata[1]); + int with = sdtype == Centered ? 36 : 37; + DevComponents.DotNetBar.ButtonItem cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + sdtype + "BD", "With Border"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "With Border"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, sdtype, "BD"); + cmbt.Click += new System.EventHandler(btnInsStep_Click); + tabbtn.SubItems.Add(cmbt); + DoFigureFromSubMenu(cmbt); + int wo = sdtype == Centered ? 38 : 39; + cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + wo + "NB", "Without Border"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "Without Border"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, wo, "NB"); + cmbt.Click += new System.EventHandler(btnInsStep_Click); + tabbtn.SubItems.Add(cmbt); + DoFigureFromSubMenu(cmbt); + tabbtn.Tag = null; + tabbtn.Click -= new System.EventHandler(btnInsStep_Click); + } + private void DoFigureFromSubMenu(DevComponents.DotNetBar.ButtonItem tabbtn) + { + char[] sp = { ' ' }; + string[] insdata = tabbtn.Tag.ToString().Split(sp); + int ftype = Convert.ToInt32(insdata[0]); + int sdtype = Convert.ToInt32(insdata[1]); + DevComponents.DotNetBar.ButtonItem cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + sdtype + "RO", "RO Figure"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "RO Figure"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, sdtype, "RO"); + cmbt.Click += new System.EventHandler(btnInsStep_Click); + tabbtn.SubItems.Add(cmbt); + cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + sdtype + "CL", "From Clipboard"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "From Clipboard"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, sdtype, "CL"); + cmbt.Click += new System.EventHandler(btnInsStep_Click); + tabbtn.SubItems.Add(cmbt); + cmbt = new DevComponents.DotNetBar.ButtonItem("cmbtnt" + sdtype + "FL", "From File"); + cmbt.ButtonStyle = DevComponents.DotNetBar.eButtonStyle.TextOnlyAlways; + cmbt.Text = "From File"; + cmbt.Tag = string.Format("{0} {1} {2}", ftype, sdtype, "FL"); // Text table + cmbt.Click += new System.EventHandler(btnInsStep_Click); + tabbtn.SubItems.Add(cmbt); + tabbtn.Tag = null; + tabbtn.Click -= new System.EventHandler(btnInsStep_Click); + } private void DoTableSubMenu(DevComponents.DotNetBar.ButtonItem tabbtn) { char[] sp = { ' ' }; @@ -2146,12 +2347,18 @@ namespace Volian.Controls.Library myROID = MyFlexGrid.ROID.ToLower(); myRODB = RODbInfo.Get(MyFlexGrid.RODbId); } + else if (MyItemInfo.IsFigure && MyItemInfo.MyContent.ContentRoUsages != null && MyItemInfo.MyContent.ContentRoUsages.Count > 0) + { + myROID = MyItemInfo.MyContent.ContentRoUsages[0].ROID; + myRODB = MyItemInfo.MyContent.ContentRoUsages[0].MyRODb; + } else { - LinkText lt = new LinkText(_MyStepRTB.MyLinkText); + LinkText lt = new LinkText(_MyStepRTB.MyLinkText); myROID = lt.MyRoUsageInfo.ROID.ToLower(); myRODB = lt.MyRoUsageInfo.MyRODb; } + if (myROID == null) return; if (myROID.StartsWith("ffff")) { MessageBox.Show("Unit Information RO's cannot be edited", "Unit Information RO", MessageBoxButtons.OK, MessageBoxIcon.Information); @@ -2262,6 +2469,7 @@ namespace Volian.Controls.Library MyEditItem.ToggleEditView(MyEditItem.MyStepPanel.VwMode); SetButtonAndMenuEnabling(true); SetStepButtonAndMenuEnabling(true); + SetMenuEnablingForFigures(); MyEditItem.MyStepPanel.MyStepTabPanel.MyDisplayTabControl.OnModeChange(this, new StepRTBModeChangeEventArgs(MyEditItem.MyStepPanel.VwMode)); btnEditMode.Checked = btnCMEditMode1.Checked = MyEditItem.MyStepPanel.VwMode == E_ViewMode.View; MyEditItem.MyStepRTB.SpellCheckContextMenuOn(MyEditItem.MyStepPanel.VwMode != E_ViewMode.View); @@ -3437,7 +3645,10 @@ namespace Volian.Controls.Library _PastePlainTextOvrRide = true; btnPaste_Click(sender, e); } - + private void btnPasteImage_Click(object sender, EventArgs e) + { + if (MyEditItem is ImageItem) (MyEditItem as ImageItem).PasteImage(); + } private void btnPasteStepText_Click(object sender, EventArgs e) { StartGridEditing(SelectionOption.End); diff --git a/PROMS/Volian.Controls.Library/StepTabRibbon.designer.cs b/PROMS/Volian.Controls.Library/StepTabRibbon.designer.cs index 4f2f423c204e4c0c2d7aafa91434bb2337c790d3..97842456567306d2919e49962b34af210d9fbcb1 100644 GIT binary patch delta 485 zcmcaGNnzV;g$+#{(;KcaaxCVP5ubeE4bSF2jtb#v_n3G#OBp8xOgEU#%Ej!-kUM#y zMe*c>;{uzTnjiU07r4vFGkMnqE1(9xX`9(tCYN2X0P5kJ>~Ya%S{^gkW{-lA zFm7+T!j!8iSd!+ z^ivO+c-lYQW&&d7?H_KlIBjD#V=$fk@uU27g(<8G+e;>~Ug2QnWB|hHiK|&v*@13j zNMuN#{&51U=`?wEw(V83S>;5hU$A21g3B#j#cB=bOuWycI9=cuD?++)FRLopqi{8j zTI}-EYgS`Z!wR-=`g<=H@#%hRSlQruFiq)S!zw+!OP`5Lu$Vys=*T=E33D!{YQdkZ ziEzUV4VWya3(RC?nOxJ%(Y{~<>-Gg3*yhXy#T3`{8Gh_8ppc*L1!RDNefujv_MY|A Z1LE2FraLh*icJ5vkUedC!$0;5TmWhYrzZda delta 245 zcmdlsTj9bag$+#{(>MHLGAe91>w_UOVD&m>^>w?wvgeOb_oBJ+uNKNjN=b4^j%&Ip1!B<9!?GB$A7cAM{ zFoS6k6KfEIKZC+{#o0{H9h;}U-ahR$V*>m1uKP?p)7{K~>Ob6Nl9;ZQ!@OkrfqP6Q z)Ae353ANkYV*+C4?KbyVq_#2}GZ;;-|0F*>pqEu)`;5t~S2(7h>0#5_eqj!)nrM5& s7S` 1) { System.Xml.XmlNode nd; @@ -1509,7 +1513,11 @@ namespace Volian.Print.Library h.Add(oldTypeName + " to " + cai.TypeName); else { - string txt = ItemInfo.ConvertToDisplayText(cai.Text); + string txt = null; + if ((cai.Text==null || cai.Text=="") && (cai.Type == 20036 || cai.Type == 20037 || cai.Type == 20038 || cai.Type == 20039)) + txt = "Embedded Image"; + else + txt = ItemInfo.ConvertToDisplayText(cai.Text); // Add Parent/Child information if applicable // We were doing this for the Chronology report so I added the same logic here for the Summary report if (MyProc.MyDocVersion.MultiUnitCount > 1) diff --git a/PROMS/Volian.Print.Library/vlnParagraph.cs b/PROMS/Volian.Print.Library/vlnParagraph.cs index 3ed48c74..fa5141fa 100644 --- a/PROMS/Volian.Print.Library/vlnParagraph.cs +++ b/PROMS/Volian.Print.Library/vlnParagraph.cs @@ -1210,55 +1210,82 @@ namespace Volian.Print.Library float retval = yLocation; if (ImageText != null) { - string[] vals = ImageText.Split("\n".ToCharArray()); - ProcedureInfo proc = MyItemInfo.MyProcedure; - DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo; - ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; - ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); - if (roImage == null) roImage = rofst.GetROImageByFilename(vals[0],MyItemInfo);// need code to go and get an ROImaage if it exists - if (roImage != null) + if (ImageText == "figure") { - ROImageConfig rc = new ROImageConfig(roImage); - int size = Convert.ToInt32(rc.Image_Size); - byte[] cnt = roImage.Content; - byte[] dcnt = ROImageInfo.Decompress(cnt, size); - iTextSharp.text.Image it_image=null; - try + ImageConfig ic = new ImageConfig(MyItemInfo.MyContent.MyImage); + byte[] idata = (ic != null && ic.Image_DataSize > 0) ? ROImageInfo.Decompress(MyItemInfo.MyContent.MyImage.Data, ic.Image_DataSize) : MyItemInfo.MyContent.MyImage.Data; + MemoryStream ms = new MemoryStream(idata); + System.Drawing.Image img = System.Drawing.Image.FromStream(ms); + Width = img.Width; + Height = img.Height; + if (ic != null && ic.Image_Height != 0) { - it_image = iTextSharp.text.Image.GetInstance(dcnt); - //iTextSharp.text.Image it_image = iTextSharp.text.Image.GetInstance(ROImageInfo.Decompress(roImage.Content, size)); + Width = ic.Image_Width; + Height = ic.Image_Height; } - catch + iTextSharp.text.Image it_image = iTextSharp.text.Image.GetInstance(idata); + retval = Rtf2Pdf.FigureAt(cb, it_image, XOffset + MyItemInfo.FormatStepData.Font.CharsToTwips, yLocation, Width * MyPageHelper.YMultiplier, Height * MyPageHelper.YMultiplier, DebugInfo, yBottomMargin, !MyItemInfo.FormatStepData.Type.Contains("Borderless")); + } + else + { + string[] vals = ImageText.Split("\n".ToCharArray()); + ProcedureInfo proc = MyItemInfo.MyProcedure; + DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo; + ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; + ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); + if (roImage == null) roImage = rofst.GetROImageByFilename(vals[0], MyItemInfo);// need code to go and get an ROImaage if it exists + if (roImage != null) { - MemoryStream ms = new MemoryStream(dcnt); - System.Drawing.Bitmap bm = new System.Drawing.Bitmap(ms); - using (MemoryStream ms2 = new MemoryStream()) + ROImageConfig rc = new ROImageConfig(roImage); + int size = Convert.ToInt32(rc.Image_Size); + byte[] cnt = roImage.Content; + byte[] dcnt = ROImageInfo.Decompress(cnt, size); + iTextSharp.text.Image it_image = null; + try { - bm.Save(ms2, System.Drawing.Imaging.ImageFormat.Png); - ms2.Seek(0, SeekOrigin.Begin); - byte[] newdcnt = new byte[ms2.Length]; - ms2.Read(newdcnt, 0, (int)ms2.Length); - try + it_image = iTextSharp.text.Image.GetInstance(dcnt); + } + catch + { + MemoryStream ms = new MemoryStream(dcnt); + System.Drawing.Bitmap bm = new System.Drawing.Bitmap(ms); + using (MemoryStream ms2 = new MemoryStream()) { - it_image = iTextSharp.text.Image.GetInstance(newdcnt); - } - catch (Exception ex) - { - _MyLog.Error(string.Format("{0}",roImage.FileName),ex); - return yLocation; + bm.Save(ms2, System.Drawing.Imaging.ImageFormat.Png); + ms2.Seek(0, SeekOrigin.Begin); + byte[] newdcnt = new byte[ms2.Length]; + ms2.Read(newdcnt, 0, (int)ms2.Length); + try + { + it_image = iTextSharp.text.Image.GetInstance(newdcnt); + } + catch (Exception ex) + { + _MyLog.Error(string.Format("{0}", roImage.FileName), ex); + return yLocation; + } } } - } - //iTextSharp.text.Image it_image = iTextSharp.text.Image.GetInstance(ROImageInfo.Decompress(roImage.Content, size)); - retval = Rtf2Pdf.FigureAt(cb, it_image, XOffset + MyItemInfo.FormatStepData.Font.CharsToTwips, yLocation, Width * MyPageHelper.YMultiplier, Height * MyPageHelper.YMultiplier, DebugInfo, yBottomMargin, !MyItemInfo.FormatStepData.Type.Contains("Borderless")); + StepConfig sc = new StepConfig(MyItemInfo as StepInfo); + if (sc != null && sc.Step_ImageWidth != 0) + { + Width = sc.Step_ImageWidth; + Height = sc.Step_ImageHeight; + } + retval = Rtf2Pdf.FigureAt(cb, it_image, XOffset + MyItemInfo.FormatStepData.Font.CharsToTwips, yLocation, Width * MyPageHelper.YMultiplier, Height * MyPageHelper.YMultiplier, DebugInfo, yBottomMargin, !MyItemInfo.FormatStepData.Type.Contains("Borderless")); + } + } + // The following code was added to fix B2016-219 (for VCS, the centerline drew through a figure). The 'top' value was taken from the code + // that draws the vlnBoxes (Caution/Note, etc) + // The adjustments, adjtop & adjbottom, were necessary to get the vertical centerline to meet up correctly with the top/bottom of the figure. These + // numbers were determined by trial and error. - // The following code was added to fix B2016-219 (for VCS, the centerline drew through a figure). The 'top' value was taken from the code - // that draws the vlnBoxes (Caution/Note, etc) - // The adjustments, adjtop & adjbottom, were necessary to get the vertical centerline to meet up correctly with the top/bottom of the figure. These - // numbers were determined by trial and error. + // only add gap if centered, i.e. in 2 column mode & table is centered + if (MyItemInfo.ColumnMode > 0 && (!MyItemInfo.FormatStepData.Type.Contains("AER") && !MyItemInfo.IsInRNO)) + { float top = CalculateYOffset(yPageStart, yTopMargin) - (7 * MyPageHelper.YMultiplier); - float adjtop=0; - float adjbottom=0; + float adjtop = 0; + float adjbottom = 0; if (MyPageHelper.YMultiplier == 1) adjtop = -3; else @@ -3303,10 +3330,9 @@ namespace Volian.Print.Library { int profileDepth2 = ProfileTimer.Push(">>>> Before vlnParagraph.Figure"); string erMsg = null; - if (itemInfo.MyContent.Text != null) + if (itemInfo.MyContent.Text != null) // ro image { ProcedureInfo proc = itemInfo.MyProcedure; - // DocVersionInfo dvi = proc.ActiveParent as DocVersionInfo; DocVersionInfo dvi = proc.MyDocVersion; ROFstInfo rofst = dvi.DocVersionAssociations[0].MyROFst; //rofst.docVer = dvi; @@ -3342,51 +3368,78 @@ namespace Volian.Print.Library } } GC.Collect(); // memory garbage collection (Regex memory bug) - if (val != null && val != "?") + if (val != null && val != "?") + { + string[] vals = val.Split("\n".ToCharArray()); + Width = Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) * MyItemInfo.FormatStepData.Font.CharsToTwips; + int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier); + // Check that the Height of figure isn't too big to fit on the page, if it is + // set the Height to the printable part of page - Height of the HLS and an extra line + // for between HLS & figure. + float h1 = lines * SixLinesPerInch; + float h2 = RoughSizeOfPage - MyParent.Height - SixLinesPerInch; + Height = Math.Min(h1, h2); + if (h1 > h2) { - string[] vals = val.Split("\n".ToCharArray()); - Width = Int32.Parse(vals[3], System.Globalization.NumberStyles.AllowHexSpecifier) * MyItemInfo.FormatStepData.Font.CharsToTwips; - int lines = Int32.Parse(vals[2], System.Globalization.NumberStyles.AllowHexSpecifier); - // Check that the Height of figure isn't too big to fit on the page, if it is - // set the Height to the printable part of page - Height of the HLS and an extra line - // for between HLS & figure. - float h1 = lines * SixLinesPerInch; - float h2 = RoughSizeOfPage - MyParent.Height - SixLinesPerInch; - Height = Math.Min(h1, h2); - if (h1 > h2) + Width *= (h2 / h1); + } + StepConfig sc = new StepConfig(MyItemInfo as StepInfo); + if (sc != null && sc.Step_ImageWidth != 0) + { + Width = sc.Step_ImageWidth; + Height = sc.Step_ImageHeight; + } + yoff = AdjustLocIfLongerRNO(itemInfo, yoff, yoffRightParent); + if (dropCheckoff) + yForCheckoff += Height - SixLinesPerInch; // place checkoff on last row of text + bool noborder = MyItemInfo.FormatStepData.Type.ToUpper().Contains("BORDERLESS"); + yoff += (Height + ((noborder ? 1 : 2) * SixLinesPerInch)); // RHM 20120925 - Eliminate extra space after Figure } + try + { + ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); + if (roImage != null) + ImageText = val; + else { - Width *= (h2 / h1); - } - //yForCheckoff = yoff + Height - SixLinesPerInch; - yoff = AdjustLocIfLongerRNO(itemInfo, yoff, yoffRightParent); - if (dropCheckoff) - yForCheckoff += Height - SixLinesPerInch; // place checkoff on last row of text - bool noborder = MyItemInfo.FormatStepData.Type.ToUpper().Contains("BORDERLESS"); - yoff += (Height + ((noborder ? 1 : 2) * SixLinesPerInch)); // RHM 20120925 - Eliminate extra space after Figure } - - try - { - ROImageInfo roImage = ROImageInfo.GetByROFstID_FileName(rofst.ROFstID, vals[0]); - if (roImage != null) - ImageText = val; + roImage = rofst.GetROImageByFilename(vals[0], MyItemInfo);// need code to go and get an ROImaage if it exists + if (roImage == null) + erMsg = string.Format("Image {0} does not exist.", vals[0]); else - { - roImage = rofst.GetROImageByFilename(vals[0], MyItemInfo);// need code to go and get an ROImaage if it exists - if (roImage == null) - erMsg = string.Format("Image {0} does not exist.", vals[0]); - else - ImageText = val; - } - } - - catch (Exception ex) - { - erMsg = string.Format("Image {0} does not exist, error = {1}.", vals[0], ex.Message); + ImageText = val; } } + catch (Exception ex) + { + erMsg = string.Format("Image {0} does not exist, error = {1}.", vals[0], ex.Message); + } + } if (erMsg != null) Rtf = GetRtf(erMsg, itemInfo.ActiveFormat.PlantFormat.FormatData.Font); CalculateXOffsetGridOrFigure(itemInfo, maxRNO, formatInfo); } + else + { + // figure + ImageText = "figure"; + } + if (ImageText == null && erMsg == null) + { + ImageText = "figure"; + ImageConfig ic = new ImageConfig(MyItemInfo.MyContent.MyImage); + byte[] idata = (ic != null && ic.Image_DataSize > 0) ? ROImageInfo.Decompress(MyItemInfo.MyContent.MyImage.Data, ic.Image_DataSize) : MyItemInfo.MyContent.MyImage.Data; + MemoryStream ms = new MemoryStream(idata); + System.Drawing.Image img = System.Drawing.Image.FromStream(ms); + Width = img.Width; + Height = img.Height; + if (ic != null && ic.Image_Height != 0) + { + Width = ic.Image_Width; + Height = ic.Image_Height; + } + yoff = AdjustLocIfLongerRNO(itemInfo, yoff, yoffRightParent); + bool noborder = MyItemInfo.FormatStepData.Type.ToUpper().Contains("BORDERLESS"); + yoff += (Height + ((noborder ? 2 : 3) * SixLinesPerInch)); + CalculateXOffsetGridOrFigure(itemInfo, maxRNO, formatInfo); + } ProfileTimer.Pop(profileDepth2); } else @@ -5230,7 +5283,7 @@ namespace Volian.Print.Library //} else // if no left justify, right align the tab { - // The following fixes F2016-033: Print the Verification Point at left margin. + // The following fixes F2016-033: Print the Verification Point at left margin. if (itemInfo.ActiveFormat.Name.ToUpper().StartsWith("VCB") && (itemInfo.FormatStepData.ColOverride ?? 0) > 0) { XOffset = (float)itemInfo.FormatStepData.ColOverride; @@ -5379,12 +5432,12 @@ namespace Volian.Print.Library } if (!itemInfo.ActiveFormat.Name.ToUpper().StartsWith("VCB")) // Don't do the following if in a vcb format (part of fix F2016-039) { - if (!HasCheckOffHeading(itemInfo, formatInfo) && CheckOffAdj < 0) - CheckOffAdj += (float)(9 * 7.2); // 9 is the size of the SIGNOFF adjustment - else if (!FmtHasAdj && HasCheckOffHeading(itemInfo, formatInfo)) - // For Robinson, tried using font's CharsToTwips but it made it too narrow, so used hardcoded 6: - CheckOffAdj = -((float)9 * 6); - } + if (!HasCheckOffHeading(itemInfo, formatInfo) && CheckOffAdj < 0) + CheckOffAdj += (float)(9 * 7.2); // 9 is the size of the SIGNOFF adjustment + else if (!FmtHasAdj && HasCheckOffHeading(itemInfo, formatInfo)) + // For Robinson, tried using font's CharsToTwips but it made it too narrow, so used hardcoded 6: + CheckOffAdj = -((float)9 * 6); + } } float adjwidth = CheckOffAdj; CheckOffWidth = -CheckOffAdj; @@ -5392,7 +5445,7 @@ namespace Volian.Print.Library Width = ToInt(formatInfo.MyStepSectionLayoutData.WidSTablePrint, maxRNO); Width += _WidthAdjust; Width += adjwidth; - + // if AlignHLSTabWithSect is set, we moved the starting x location of the HLS, and following steps // to be under section header. Adjust the width accordingly, or the text may go out of the margin. if (myTab == null && itemInfo.FormatStepData.AlignNullTabWSectHead && itemInfo.ActiveFormat.PlantFormat.FormatData.PrintData.SpecialCaseCalvert) @@ -5509,8 +5562,8 @@ namespace Volian.Print.Library if (((itemInfo.MyDocStyle.StructureStyle.Style & E_DocStructStyle.DSS_SameXOffSubsections) == E_DocStructStyle.DSS_SameXOffSubsections)) { // don't adjust the width if there already was an adjustment for checkoffs - for VCB only (F2016-039) - if (!(itemInfo.ActiveFormat.Name.ToUpper().StartsWith("VCB") && coadj)) - adjwidth = MyTab != null ? -MyTab.Width : 0; + if (!(itemInfo.ActiveFormat.Name.ToUpper().StartsWith("VCB")&&coadj)) + adjwidth = MyTab != null ? -MyTab.Width : 0; } else if (sd.UseMetaSections) {