void OpenDocument(string fileName) { HandleWord(true); Word.Document document; try { document = WordApp.Documents.Open(fileName); } catch (COMException ex) { XtraMessageBox.Show("Couldn't open " + Path.GetFileName(fileName) + ".\r\n" + ex.Message, "Shomrei Torah Schedulizer", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } //The Open event handler should have created a binder WordBinder binder; if (!openDocuments.TryGetValue(document.DocID() ?? "", out binder)) { if (DialogResult.Yes == XtraMessageBox.Show("This document is not a schedule. Do you want to close it?", "Shomrei Torah Schedulizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) DocumentExtensions.Close(document); return; } RibbonBinder = binder; document.Activate(); WordApp.Activate(); }
void WordApp_DocumentBeforeClose(Word.Document document, ref bool Cancel) { WordBinder binder; if (!openDocuments.TryGetValue(document.DocID() ?? "", out binder)) return; if (RibbonBinder == binder) RibbonBinder = null; ribbon.Items.Remove(GetItem(binder)); openDocuments.Remove(document.DocID()); binder.Dispose(); }
BarItem GetItem(WordBinder binder) { return wordBinderMenu.ItemLinks.Cast<BarItemLink>().First(link => link.Item.Tag == binder).Item; }
void item_ItemClick(object sender, ItemClickEventArgs e) { RibbonBinder = e.Item.Tag as WordBinder; }
private void findWord_ItemClick(object sender, ItemClickEventArgs e) { var openDoc = openDocuments.Values.FirstOrDefault(b => calendar.IsSameMonth(b.StartDate + (7 * b.WeekCount) / 2)); if (openDoc != null) { RibbonBinder = openDoc; RibbonBinder.Document.Activate(); WordApp.Activate(); return; } var path = GetDefaultWordPath(calendar.MonthStart) + ".docx"; if (File.Exists(path)) OpenDocument(path); else exportWord.PerformClick(); }
private void exportWord_ItemClick(object sender, ItemClickEventArgs e) { HandleWord(true); //If I don't call this now, I'll end up with two binders for the new document. var binder = WordBinder.CreateDocument(context, calendar.MonthStart, 5, this); //TODO: Error handling AddWordBinder(binder); RibbonBinder = binder; //Ugly hack to execute this after ExecAsync finishes //creating the document from the WeekCount property. Waiter.ExecAsync(delegate { BeginInvoke(new Action(delegate { var defaultPath = GetDefaultWordPath(calendar.MonthStart); if (DialogResult.Yes == XtraMessageBox.Show("Would you like to save this document?\r\n\r\nPath: " + defaultPath, "Shomrei Torah Schedulizer", MessageBoxButtons.YesNo, MessageBoxIcon.Question)) { Directory.CreateDirectory(Path.GetDirectoryName(defaultPath)); if (ConfirmSave(defaultPath + ".docx")) binder.Document.SaveAs(defaultPath + ".docx", Word.WdSaveFormat.wdFormatXMLDocument); if (ConfirmSave(defaultPath + ".pdf")) binder.Document.SaveAs(defaultPath + ".pdf", Word.WdSaveFormat.wdFormatPDF); } })); }, "Busy"); }
void binder_IsDirtyChanged(object sender, EventArgs e) { var binder = (WordBinder)sender; if (binder == RibbonBinder) wbUpdateDirty.Enabled = binder.IsDirty; else if (binder.IsDirty && RibbonBinder == null || !RibbonBinder.IsDirty) RibbonBinder = binder; var item = (BarCheckItem)wordBinderMenu.ItemLinks.OfType<BarCheckItemLink>().First(bcil => bcil.Item.Tag == binder).Item; item.Appearance.ForeColor = binder.IsDirty ? Color.Red : Color.Empty; }
void AddWordBinder(WordBinder binder) { object docId = binder.Document.DocID(); if (docId == null) { docId = Guid.NewGuid().ToString(); binder.Document.Variables.Add("ID", ref docId); } if (openDocuments.ContainsKey(docId.ToString())) return; openDocuments.Add(docId.ToString(), binder); var item = new BarCheckItem { Caption = binder.Document.Name, Glyph = Resources.WordDocument16, Tag = binder }; item.ItemClick += item_ItemClick; binder.IsDirtyChanged += binder_IsDirtyChanged; ribbon.Items.Add(item); wordBinderMenu.AddItem(item); }
protected override void OnClosing(CancelEventArgs e) { var dirtyBinder = openDocuments.Values.FirstOrDefault(wb => wb.IsDirty); if (dirtyBinder != null && DialogResult.No == XtraMessageBox.Show(dirtyBinder.Document.Name + " has not been updated.\r\nAre you sure you want to exit?", "Shomrei Torah Schedulizer", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)) { e.Cancel = true; RibbonBinder = dirtyBinder; } base.OnClosing(e); }