Toolbars are a big topic. Took me weeks of search and testing to get the following code down. Make of it what you will. Sorry but I'm not explaining it line by line. I encourage you to search the forums, the dev blog and the Through the Interface blog as well.
P.S. the .bmp's are project resourses.
public void RLCui()
{
//Coded by: Lev Villanueva (doucedeux@gm**l.com)
Document newDocument = Application.DocumentManager.MdiActiveDocument;
Database newDatabase = newDocument.Database;
bool exists = false;
String mainCUI = Application.GetSystemVariable("MENUNAME").ToString() + ".cuix";
CustomizationSection mainCS = new CustomizationSection(mainCUI, false);
String baseFolder = mainCUI.Replace(mainCS.CUIFileBaseName + ".cuix", "");
PartialCuiFileCollection newPCFC = mainCS.PartialCuiFiles;
String cuiFileToSend = "\"" + baseFolder + "RL.cuix" + "\"";
String test1 = mainCUI.Replace(mainCS.CUIFileBaseName + ".cuix", "RL.cuix");
if (newPCFC.Contains(mainCUI.Replace(mainCS.CUIFileBaseName + ".cuix", "RL.cuix")))
{
if( Forms.MessageBox.Show("CUI already exist.\nDelete?", "CUI Exists", Forms.MessageBoxButtons.YesNo, Forms.MessageBoxIcon.Information, Forms.MessageBoxDefaultButton.Button1, 0) == Forms.DialogResult.No)
return;
exists = true;
}
Rebars.Properties.Resources.RLQUAD_16.Save(baseFolder + "RLQUAD16.bmp");
Rebars.Properties.Resources.RLQUAD_32.Save(baseFolder + "RLQUAD32.bmp");
Rebars.Properties.Resources.RLXREF_16.Save(baseFolder + "RLXREF16.bmp");
Rebars.Properties.Resources.RLXREF_32.Save(baseFolder + "RLXREF32.bmp");
Rebars.Properties.Resources.RLSI_16.Save(baseFolder + "RLSI16.bmp");
Rebars.Properties.Resources.RLSI_32.Save(baseFolder + "RLSI32.bmp");
Rebars.Properties.Resources.RLOSA_16.Save(baseFolder + "RLOSA16.bmp");
Rebars.Properties.Resources.RLFILTRAR_16.Save(baseFolder + "RLFILTRAR16.bmp");
Rebars.Properties.Resources.RLEXPORTAR_16.Save(baseFolder + "RLEXPORTAR16.bmp");
CustomizationSection newCS = new CustomizationSection();
newCS.MenuGroupName = "RL";
MacroGroup newMG = new MacroGroup("RLMacros", newCS.MenuGroup);
MenuMacro newMM1 = new MenuMacro(newMG, "RL Xref", "^C^CRLXREF", "ID_RL_Xref");
newMM1.macro.SmallImage = baseFolder + "RLXREF16.bmp";
newMM1.macro.LargeImage = baseFolder + "RLXREF32.bmp";
newMM1.macro.HelpString = "Anexar plano original bajo determinadas especificaciones";
newMM1.macro.CLICommand = "RLXREF";
MenuMacro newMM2 = new MenuMacro(newMG, "RL Quadrant", "^C^CRLQUAD", "ID_RL_Quad");
newMM2.macro.SmallImage = baseFolder + "RLQUAD16.bmp";
newMM2.macro.LargeImage = baseFolder + "RLQUAD32.bmp";
newMM2.macro.HelpString = "Crear cuadrante relacionado a una losa";
newMM2.macro.CLICommand = "RLQUAD";
MenuMacro newMM3 = new MenuMacro(newMG, "RL si", "^C^CRLSI", "ID_RL_si");
newMM3.macro.SmallImage = baseFolder + "RLSI16.bmp";
newMM3.macro.LargeImage = baseFolder + "RLSI32.bmp";
newMM3.macro.HelpString = "Dibujar refuerzos tipo s e i de una losa";
newMM3.macro.CLICommand = "RLSI";
MenuMacro newMM4 = new MenuMacro(newMG, "RLosa", "^C^CRLOSA", "ID_RLOSA");
newMM4.macro.SmallImage = baseFolder + "RLOSA16.bmp";
newMM4.macro.HelpString = "Crear refuerzos de losa";
newMM4.macro.CLICommand = "RLOSA";
MenuMacro newMM5 = new MenuMacro(newMG, "RL Filtrar", "^C^CRLFILTRAR", "ID_RLFILTRAR");
newMM5.macro.SmallImage = baseFolder + "RLFILTRAR16.bmp";
newMM5.macro.HelpString = "Filtrar de entre los refuerzos de losa para su visualización en el plano";
newMM5.macro.CLICommand = "RLFILTRAR";
MenuMacro newMM6 = new MenuMacro(newMG, "RL Exportar", "^C^CRLEXPORTAR", "ID_RLEXPORTAR");
newMM6.macro.SmallImage = baseFolder + "RLEXPORTAR16.bmp";
newMM6.macro.HelpString = "Exportar refuerzos a archivos de Excel. Se pedirá un nombre para el archivo.";
newMM6.macro.CLICommand = "RLEXPORTAR";
Toolbar newT = new Toolbar("RL", newCS.MenuGroup);
ToolbarButton newButton1 = new ToolbarButton("ID_RL_Xref", "RL Xref", newT, -1);
ToolbarButton newButton2 = new ToolbarButton("ID_RL_Quad", "RL Quadrant", newT, -1);
ToolbarButton newButton3 = new ToolbarButton("ID_RL_si", "RL si", newT, -1);
ToolbarButton newButton4 = new ToolbarButton("ID_RLOSA", "RLosa", newT, -1);
newButton4.DrawSeparator = true;
ToolbarButton newButton5 = new ToolbarButton("ID_RLFILTRAR", "RL Filtrar", newT, -1);
ToolbarButton newButton6 = new ToolbarButton("ID_RLEXPORTAR", "RL Exportar", newT, -1);
newT.ToolbarItems.Add(newButton2);
newT.ToolbarItems.Add(newButton1);
newT.ToolbarItems.Add(newButton3);
newT.ToolbarItems.Add(newButton4);
newT.ToolbarItems.Add(newButton5);
newT.ToolbarItems.Add(newButton6);
StringCollection newSC = new StringCollection();
int i = 1;
for (; i < mainCS.MenuGroup.PopMenus.AllAliases.Count; i++)
{
if (!mainCS.MenuGroup.PopMenus.AllAliases.Contains("POP" + i.ToString()))
break;
}
newSC.Add("POP" + i.ToString());
PopMenu newPopMenu = new PopMenu("RL Menu", newSC, "ID_RLPop" , newCS.MenuGroup);
PopMenuItem newPMI1 = new PopMenuItem(newMM1, "RL Xref" , newPopMenu, -1);
PopMenuItem newPMI2 = new PopMenuItem(newMM2, "RL Quadrant", newPopMenu, -1);
PopMenuItem newPMI3 = new PopMenuItem(newMM3, "RL si" , newPopMenu, -1);
PopMenuItem newPMI4 = new PopMenuItem(newMM4, "RLosa" , newPopMenu, -1);
PopMenuItem newPMI5 = new PopMenuItem(newMM5, "RL Filtrar" , newPopMenu, -1);
PopMenuItem newPMI6 = new PopMenuItem(newMM6, "RL Exportar", newPopMenu, -1);
newCS.SaveAs(baseFolder + "RL.cuix");
File.Delete(baseFolder + "RLQUAD16.bmp");
File.Delete(baseFolder + "RLQUAD32.bmp");
File.Delete(baseFolder + "RLXREF16.bmp");
File.Delete(baseFolder + "RLXREF32.bmp");
File.Delete(baseFolder + "RLSI16.bmp");
File.Delete(baseFolder + "RLSI32.bmp");
File.Delete(baseFolder + "RLOSA16.bmp");
File.Delete(baseFolder + "RLFILTRAR16.bmp");
File.Delete(baseFolder + "RLEXPORTAR16.bmp");
Directory.CreateDirectory(baseFolder + "Extended Help");
System.IO.File.WriteAllText(baseFolder + @"Extended Help\RLEH.xaml", Rebars.Properties.Resources.RLEH);
Directory.CreateDirectory(baseFolder + @"Extended Help\Images");
Rebars.Properties.Resources.EH_RLXREF.Save(baseFolder + @"Extended Help\Images\" + "EH_RLXREF.png");
Rebars.Properties.Resources.EH_RLQUAD.Save(baseFolder + @"Extended Help\Images\" + "EH_RLQUAD.png");
Rebars.Properties.Resources.EH_RLSI.Save(baseFolder + @"Extended Help\Images\" + "EH_RLSI.png");
//File.Copy(baseFolder + "RL.cuix", baseFolder + "RL.zip", true);
//Directory.CreateDirectory(baseFolder + "Temp");
using (ZipFile newZF = new ZipFile(baseFolder + "RL.cuix"))
{
ZipEntry newZE = newZF["MenuGroup.cui"];
newZE.Extract(baseFolder, ExtractExistingFileAction.OverwriteSilently);
FileStream oldFS = new FileStream(baseFolder + "MenuGroup.cui", FileMode.Open, FileAccess.Read);
FileStream newFS = new FileStream(baseFolder + "temp.cui", FileMode.Create, FileAccess.Write);
StreamReader oldSR = new StreamReader(oldFS);
StreamWriter newSW = new StreamWriter(newFS);
String line;
for (int j = 1; j <= 3; j++)
{
do
{
line = oldSR.ReadLine();
if (line == null) break;
newSW.WriteLine(line);
} while (!line.Contains(@"<CLICommand"));
if (line != null)
{
newSW.WriteLine(@"<ToolTip>");
newSW.WriteLine(@"<ExtendedContent UriSource=""" + baseFolder + @"Extended Help\RLEH.xaml"" SourceKey=""RLEH_CMD_00" + j.ToString() + @""" />""");
newSW.WriteLine(@"</ToolTip>");
}
}
while ((line = oldSR.ReadLine()) != null)
newSW.WriteLine(line);
newSW.Dispose();
oldSR.Dispose();
oldFS.Dispose();
newFS.Dispose();
File.Delete(baseFolder + "MenuGroup.cui");
System.IO.File.Move(baseFolder + "temp.cui", baseFolder + "MenuGroup.cui");
newZF.RemoveEntry("MenuGroup.cui");
newZF.AddFile(baseFolder + "MenuGroup.cui", @"\");
newZF.Save();
//System.IO.File.Move(baseFolder + "temp.zip", baseFolder + "RL.cuix");
File.Delete(baseFolder + "MenuGroup.cui");
}
object oldCmdEcho = Application.GetSystemVariable("CMDECHO");
object oldFileDia = Application.GetSystemVariable("FILEDIA");
Application.SetSystemVariable("CMDECHO", 0);
Application.SetSystemVariable("FILEDIA", 0);
if (exists)
newDocument.SendStringToExecute("_.cuiunload " + "RL" + " ", false, false, false);
newDocument.SendStringToExecute("_.cuiload " + cuiFileToSend + " ", false, false, false);
newDocument.SendStringToExecute("(setvar \"FILEDIA\" " + oldFileDia.ToString() + ")(princ) ", false, false, false);
newDocument.SendStringToExecute("(setvar \"CMDECHO\" " + oldCmdEcho.ToString() + ")(princ) ", false, false, false);