示例#1
0
        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();
        }
示例#2
0
        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();
        }
示例#3
0
 BarItem GetItem(WordBinder binder)
 {
     return wordBinderMenu.ItemLinks.Cast<BarItemLink>().First(link => link.Item.Tag == binder).Item;
 }
示例#4
0
 void item_ItemClick(object sender, ItemClickEventArgs e)
 {
     RibbonBinder = e.Item.Tag as WordBinder;
 }
示例#5
0
        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();
        }
示例#6
0
        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");
        }
示例#7
0
        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;
        }
示例#8
0
        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);
        }
示例#9
0
        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);
        }