public MainWindow (): base (MainClass.AppName) { this.Build(); _views = new IGedcomView[] { SummaryViewView, FamilyViewView, IndividualViewView }; _viewActions = new Gtk.Action[] { SummaryViewAction, FamilyViewAction, IndividualViewAction, SourceViewAction, MultimediaViewAction, RepositoryViewAction, PedigreeViewAction, NoteViewAction }; foreach (IGedcomView view in _views) { view.MoreInformation += new EventHandler<IndividualArgs>(OnMoreInformation); view.MoreFamilyInformation += new EventHandler<FamilyArgs>(OnMoreFamilyInformation); view.SpouseSelect += new EventHandler<SpouseSelectArgs>(OnSpouseSelect); view.ShowSourceCitation += new EventHandler<SourceCitationArgs>(OnShowSourceCitation); view.SelectNewChild += new EventHandler<IndividualArgs>(OnSelectNewChild); view.SelectNewSpouse += new EventHandler<IndividualArgs>(OnSelectNewSpouse); view.SelectNewNote += new EventHandler<NoteArgs>(OnSelectNewNote); view.ShowScrapBook += new EventHandler<ScrapBookArgs>(OnShowScrapBook); view.ShowName += new EventHandler<IndividualArgs>(OnShowName); view.DeleteIndividual += new EventHandler<IndividualArgs>(OnDeleteIndividual); view.MoreFactInformation += new EventHandler<FactArgs>(OnMoreFactInformation); } SourceViewView.ShowScrapBook += new EventHandler<ScrapBookArgs>(OnShowScrapBook); SourceViewView.ShowSourceCitation += new EventHandler<SourceCitationArgs>(OnShowSourceCitation); MultimediaViewView.AddFile += new EventHandler<MultimediaFileArgs>(OnMultimediaView_AddFile); MultimediaViewView.OpenFile += new EventHandler<MultimediaFileArgs>(OnMultimediaView_OpenFile); MultimediaViewView.ShowSourceCitation += new EventHandler<SourceCitationArgs>(OnShowSourceCitation); RepositoryViewView.ShowSourceCitation += new EventHandler<SourceCitationArgs>(OnShowSourceCitation); NotesViewView.ShowSourceCitation += new EventHandler<SourceCitationArgs>(OnShowSourceCitation); // FIXME: not working via property in designer show all kicking in? NotesViewView.NoteOnly = true; ViewNotebook.ShowTabs = false; ViewNotebook.Page = 0; _currentView = _views[0]; ViewNotebook.Sensitive = false; Merge.Sensitive = false; Save.Sensitive = false; SaveAs.Sensitive = false; PropertiesAction.Sensitive = false; _viewGroup = View.ActionGroup; _toolsGroup = Tools.ActionGroup; _reportsGroup = Reports.ActionGroup; _defaultGroup = New.ActionGroup; // get all report related actions, make insensitive foreach (Gtk.Action action in _reportsGroup.ListActions()) { action.Sensitive = false; } // get all tools related actions, make insensitive foreach (Gtk.Action action in _toolsGroup.ListActions()) { action.Sensitive = false; } // get all view related actions, make insensitive foreach (Gtk.Action action in _viewGroup.ListActions()) { action.Sensitive = false; } SummaryViewAction.ActionGroup.Sensitive = true; NewIndividual.Sensitive = false; NewMedia.Sensitive = false; NewRepository.Sensitive = false; NewSource.Sensitive = false; NewNote.Sensitive = false; // dropdown actions, not supported by stetic Gtk.UIManager manager = new Gtk.UIManager(); GtkDropDownAction newDropDown = new GtkDropDownAction("New", "New", string.Empty, Gtk.Stock.New); newDropDown.Activated += OnNew_Activated; newDropDown.UIManager = manager; newDropDown.MenuPath = "/newpopup"; manager.InsertActionGroup(_defaultGroup, 0); manager.AddUiFromString("<ui><popup name='newpopup'><menuitem action='NewDatabase'/><menuitem action='NewIndividual'/><menuitem action='NewMedia'/><menuitem action='NewRepository'/><menuitem action='NewSource'/><menuitem action='NewNote'/></popup></ui>"); Gtk.Widget newButton = newDropDown.CreateToolItem(); newDropDown.ConnectProxy(newButton); toolbar1.Insert((Gtk.ToolItem)newButton, 0); // gtk recent actions, not supported by stetic or gtk# 2.10 _recentManager = Gtk.RecentManager.Default; //_recentManager.Limit = 4; // FIXME: don't hardcode max recent file count Gtk.RecentChooserMenu menu = new RecentChooserMenu(_recentManager); menu.LocalOnly = true; menu.SortType = RecentSortType.Mru; Gtk.RecentFilter filter = new RecentFilter(); filter.Name = "GEDCOM files"; filter.AddMimeType("application/x-gedcom"); menu.AddFilter(filter); menu.Filter = filter; menu.ItemActivated += RecentMenu_ItemActivated; _toolbarRecentMenu = menu; GtkDropDownAction recentDropDown = new GtkDropDownAction("Open", "Open", "Open File", Gtk.Stock.Open); recentDropDown.Menu = menu; recentDropDown.Activated += OnOpen_Activated; Gtk.Widget openButton = recentDropDown.CreateToolItem(); recentDropDown.ConnectProxy(openButton); toolbar1.Insert((Gtk.ToolItem)openButton, 1); }
private void DoSwitchPage(uint pageNum, bool toggleAction) { if (pageNum >= 0) { if (_currentView != null) { _currentView.SaveView(); // view may have changed the record so get what the view thinks // the current record is _record = _currentView.Record; } // make views that don't go off the current individual record // to update when we switch tabs SourceViewView.SaveView(); RepositoryViewView.SaveView(); // FIXME: as multimedia objects can be edited via the scrapbook dialog // saving all the time here isn't right as the record may have changed MultimediaViewView.SaveView(); // same as above but for notes NotesViewView.Save(); // _currentView is only for gedcom views // we have other views such as source view, multimedia view etc. // which while part of the gedcom file don't represent an // individual or family if (pageNum < _views.Length) { IGedcomView view = _views[pageNum]; view.Database = _database; view.Record = _record; _currentView = view; } switch (pageNum) { case PedigreePage: // FIXME: yuk PedigreeViewView.Database = _database; PedigreeViewView.Record = _record; _currentView = PedigreeViewView; break; case SourcesPage: SourceViewView.Sensitive = (SourceViewView.Record != null); break; case RepositoryPage: RepositoryViewView.Sensitive = (RepositoryViewView.Record != null); break; case MultimediaPage: MultimediaViewView.Sensitive = (MultimediaViewView.Record != null); break; case DuplicatesPage: // page 7 is for duplicates, it doesn't // take a record at all, so set _currentView to null this.DuplicateViewView.DatabaseA = _database; this.DuplicateViewView.DatabaseB = _database; _currentView = null; break; case NotePage: NotesViewView.Sensitive = (NotesViewView.Record != null); break; } // FIXME: yuk if (pageNum != DuplicatesPage && toggleAction) { Gtk.RadioAction action = _viewActions[pageNum] as Gtk.RadioAction; action.Activate(); } } }