The GUI definition file of TextDynamic contains the localization of the dialog strings and also action captions and hints. Some action names have been reserved to store the caption for menu drop downs only.
This enum definition can be used for code which creates a menu in code:
[Flags]
internal enum wpaMenuCaps
{
wpaDropDownMenuFile=1,
wpaDropDownMenuEdit=2,
wpaDropDownMenuView=4,
wpaDropDownMenuInsert=8,
wpaDropDownMenuFormat=16,
wpaDropDownMenuExtras=32,
wpaDropDownMenuData=64,
wpaDropDownMenuTable=128,
wpaDropDownMenuWindow=256,
wpaDropDownMenuInfo=512
}
Using this action names and a selection of the 'intelligent' actions you can create a framwork to create the menu of your form "on the fly".
We created a menu class which handles the update of the strings completely automatically.
You only need to to implement the IGetCurrEditor interface in your winform.
public class WinForm : System.Windows.Forms.Form,IGetCurrEditor
{
public WPDynamic.WPDLLInt CurrEdit() { return wpdllInt1; }
....
}
Now you can create the procedure which creates the menu. The actions for each menu drop down are provided as string array. This makes this code easy to be updated (green lines).
private void UpdateMenu(System.Windows.Forms.MainMenu menu, wpaMenuCaps selection)
{
// Select the items for the menus - implemented as array of string array
string[][] wpaMenuItems = new string[10][];
// DropDownMenuFile
wpaMenuItems[0]= new string[]
{"DiaOpen","DiaSave","-","DiaPagePropEx","DiaPreview","DiaPrint"};
// DropDownMenuEdit
wpaMenuItems[1]= new string[]
{"undo","redo","-","DiaFind","DiaReplace","-","copy","paste","SelAll"};
// DropDownMenuView
wpaMenuItems[2]= new string[]
{"DiaManageHeaderFooter","ShowCR","-", "LayoutNormal",
"zoom100", "zoomwidth", "zoomfullpage", "zoomdoublepage" };
// DropDownMenuInsert
wpaMenuItems[3]= new string[]
{"DiaINSGRAPHIC", "DiaINSSymbol", "DiaINSHyperlink", "DiaINSFields"};
// DropDownMenuFormat
wpaMenuItems[4]= new string[]
{"DiaParagraphProp", "DiaParagraphBorder", "DiaBulletOutlines"};
// DropDownMenuExtra
wpaMenuItems[5]= new string[]
{"DiaSpellcheck", "DiaSpellOptions", "SpellAsYouGo"};
// DropDownMenuData
wpaMenuItems[6]= new string[]
{/*TODO*/};
// DropDownMenuTable
wpaMenuItems[7]= new string[]
{"DiaINSTable", "DiaParagraphBorder",
"InsColBefore","InsCol", "InsRowBefore", "InsRow"};
// DropDownMenuWindow
wpaMenuItems[8]= new string[]
{/*TODO*/};
// DropDownMenuInfo
wpaMenuItems[9]= new string[]
{"DiaWPAbout","DiaWPDebug"};
// ----------------------------------------------------------------
string[] wpaMenuCapsNames = {
"DropDownMenuFile","DropDownMenuEdit",
"DropDownMenuView","DropDownMenuInsert",
"DropDownMenuFormat","DropDownMenuExtras",
"DropDownMenuData", "DropDownMenuTable",
"DropDownMenuWindow", "DropDownMenuInfo"};
WPDynamic.WPAMenuItem item, pitem;
for(int m=0, a=1; m<=10;m++,a=a*2)
{
if(((int)selection&a)==a)
{
pitem = new WPDynamic.WPAMenuItem(
this, wpaMenuCapsNames[m]);
// Now create the menu items
foreach(String s in wpaMenuItems[m])
{
item = new WPDynamic.WPAMenuItem(this,s);
pitem.MenuItems.Add(item);
}
pitem.Update();
menu.MenuItems.Add(pitem);
}
}
}
After adding to event Form.Load -
// Initialize MainMenu
mainMenu1.MenuItems.Clear(); // Start from scratch!
UpdateMenu(mainMenu1,
wpaMenuCaps.wpaDropDownMenuFile|
wpaMenuCaps.wpaDropDownMenuEdit|
wpaMenuCaps.wpaDropDownMenuView|
wpaMenuCaps.wpaDropDownMenuInsert|
wpaMenuCaps.wpaDropDownMenuFormat|
wpaMenuCaps.wpaDropDownMenuExtras|
// wpaMenuCaps.wpaDropDownMenuData|
wpaMenuCaps.wpaDropDownMenuTable|
// wpaMenuCaps.wpaDropDownMenuWindow|
wpaMenuCaps.wpaDropDownMenuInfo );
this is how the menu will look at runtime.
