예제 #1
0
            public override void MouseDown(Rectangle rect, MouseButtons button, int x, int y)
            {
                if (button == MouseButtons.Right)
                {
                    foreach (var reference in _drawnReferences)
                    {
                        if (reference.Rectangle.X <= x && reference.Rectangle.Right > x)
                        {
                            var menu = default(ContextMenuStrip);
                            switch (reference.Reference)
                            {
                            case BranchBase branch:
                                menu = new BranchMenu(branch);
                                break;

                            case Tag tag:
                                menu = new TagMenu(tag);
                                break;

                            case Head head:
                                menu = new HeadMenu(head);
                                break;
                            }
                            if (menu != null)
                            {
                                Utility.MarkDropDownForAutoDispose(menu);
                                Owner.OnContextMenuRequested(menu, new Point(x + 1, y + 1));
                            }
                            return;
                        }
                    }
                }
            }
예제 #2
0
 public Gtk.Menu GetMenu()
 {
     tag_menu = new TagMenu(null, MainWindow.Toplevel.Database.Tags);
     tag_menu.NewTagHandler += delegate { MainWindow.Toplevel.HandleCreateTagAndAttach(this, null); };
     tag_menu.TagSelected   += MainWindow.Toplevel.HandleAttachTagMenuSelected;
     return((Gtk.Menu)tag_menu);
 }
예제 #3
0
            public ScreensaverConfigDialog() : base(Assembly.GetExecutingAssembly(), "ScreensaverConfigDialog.ui", "screensaver-config-dialog")
            {
                delay_adjustment = new Adjustment(default_delay, 1.0, 20.0, .5, 5, 0);
                LoadPreference(SCREENSAVER_DELAY);
                delay_scale.Adjustment         = delay_adjustment;
                delay_adjustment.ValueChanged += HandleDelayChanged;

                tag_button = new MenuButton();
                tag_button.SizeRequested += delegate(object sender, SizeRequestedArgs args) {
                    var req = args.Requisition;
                    req.Width       += 100;
                    args.Requisition = req;
                };
                TagMenu menu = new TagMenu(null, App.Instance.Database.Tags);

                menu.Populate(false);
                menu.TagSelected += HandleTagSelected;
                tag_button.Menu   = menu;
                tag_button.ShowAll();
                table.Attach(tag_button, 2, 3, 1, 2);
                LoadPreference(SCREENSAVER_TAG);
                all_radio.Toggled += HandleTagRadioToggled;

                do_button.Clicked += HandleUseFSpot;
            }
예제 #4
0
 public Gtk.Menu GetMenu()
 {
     tag_menu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
     tag_menu.NewTagHandler += delegate { MainWindow.Toplevel.HandleCreateTagAndAttach (this, null); };
     tag_menu.TagSelected += MainWindow.Toplevel.HandleAttachTagMenuSelected;
     return (Gtk.Menu) tag_menu;
 }
예제 #5
0
        public PreferenceDialog() : base("main_preferences")
        {
            LoadPreference(Preferences.METADATA_EMBED_IN_IMAGE);
            LoadPreference(Preferences.SCREENSAVER_TAG);
            LoadPreference(Preferences.GNOME_SCREENSAVER_THEME);
            if (!Global.CustomPhotoDirectory)
            {
                photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
                photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
            }
            else
            {
                photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
                photosdir_chooser.Sensitive = false;
            }

            Gtk.CellRendererText name_cell = new Gtk.CellRendererText();
            Gtk.CellRendererText desc_cell = new Gtk.CellRendererText();

            display_combo.Model = new ProfileList();
            display_combo.PackStart(desc_cell, false);
            display_combo.PackStart(name_cell, true);
            display_combo.SetCellDataFunc(name_cell, new CellLayoutDataFunc(ProfileList.ProfileNameDataFunc));
            display_combo.SetCellDataFunc(desc_cell, new CellLayoutDataFunc(ProfileList.ProfileDescriptionDataFunc));
            display_combo.Changed += HandleDisplayChanged;

            destination_combo.Model = new ProfileList();
            destination_combo.PackStart(desc_cell, false);
            destination_combo.PackStart(name_cell, true);
            destination_combo.SetCellDataFunc(name_cell, new CellLayoutDataFunc(ProfileList.ProfileNameDataFunc));
            destination_combo.SetCellDataFunc(desc_cell, new CellLayoutDataFunc(ProfileList.ProfileDescriptionDataFunc));
            destination_combo.Changed += HandleDisplayChanged;

            Tag     t       = MainWindow.Toplevel.Database.Tags.GetTagById(screensaver_tag);
            TagMenu tagmenu = new TagMenu(null, MainWindow.Toplevel.Database.Tags);

            tagmenu.Populate(true);
            tag_option.Menu = tagmenu;

            int history = tagmenu.GetPosition(t);

            if (history >= 0)
            {
                tag_option.SetHistory((uint)history);
            }

            tagmenu.TagSelected          += HandleTagMenuSelected;
            set_saver_button.Clicked     += HandleUseFSpot;
            screensaverall_radio.Toggled += ToggleTagRadio;

            Preferences.SettingChanged += OnPreferencesChanged;
            this.Dialog.Destroyed      += HandleDestroyed;
        }
예제 #6
0
        void ShowTagMenuFor(Widget widget, TagMenu.TagSelectedHandler handler)
        {
            TagMenu tag_menu = new TagMenu(null, App.Instance.Database.Tags);

            tag_menu.TagSelected += handler;
            tag_menu.Populate();
            int x, y;

            GetPosition(out x, out y);
            x += widget.Allocation.X; y += widget.Allocation.Y;
            tag_menu.Popup(null, null, delegate(Menu menu, out int x_, out int y_, out bool push_in) { x_ = x; y_ = y; push_in = true; }, 0, 0);
        }
		private void CreateTagMenu ()
		{
			TagMenu tagmenu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
			tagmenu.NewTagHandler = HandleNewTagSelected;
			
			tagmenu.Append (new MenuItem (Catalog.GetString ("Select Tag")));
			
			tagmenu.Populate (true);
			
			tagmenu.TagSelected += HandleTagMenuSelected;
			
			tagmenu.ShowAll ();
			tag_option_menu.Menu = tagmenu;
		}
예제 #8
0
        private void Button_RightTapped(object sender, RightTappedRoutedEventArgs e)
        {
            if (tagMenuIsOpen)
            {
                return;
            }
            Button button = sender as Button;

            menuTag = button.DataContext as Models.Tag;

            InitMenu();

            TagMenu.ShowAt(button, e.GetPosition(button));
        }
        private void CreateTagMenu()
        {
            TagMenu tagmenu = new TagMenu(null, MainWindow.Toplevel.Database.Tags);

            tagmenu.NewTagHandler = HandleNewTagSelected;

            tagmenu.Append(new MenuItem(Catalog.GetString("Select Tag")));

            tagmenu.Populate(true);

            tagmenu.TagSelected += HandleTagMenuSelected;

            tagmenu.ShowAll();
            tag_option_menu.Menu = tagmenu;
        }
		public PreferenceDialog () : base ("main_preferences")
		{
			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);
			LoadPreference (Preferences.SCREENSAVER_TAG);
			LoadPreference (Preferences.GNOME_SCREENSAVER_THEME);
			if (!Global.CustomPhotoDirectory) {
				photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
				photosdir_chooser.SetCurrentFolder (Global.PhotoDirectory);
			} else {
				photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
				photosdir_chooser.Sensitive = false;
			}

			Gtk.CellRendererText name_cell = new Gtk.CellRendererText ();
			Gtk.CellRendererText desc_cell = new Gtk.CellRendererText ();
			
			display_combo.Model = new ProfileList ();
			display_combo.PackStart (desc_cell, false);
			display_combo.PackStart (name_cell, true);
			display_combo.SetCellDataFunc (name_cell, new CellLayoutDataFunc (ProfileList.ProfileNameDataFunc));
			display_combo.SetCellDataFunc (desc_cell, new CellLayoutDataFunc (ProfileList.ProfileDescriptionDataFunc));
			display_combo.Changed += HandleDisplayChanged;

			destination_combo.Model = new ProfileList ();
			destination_combo.PackStart (desc_cell, false);
			destination_combo.PackStart (name_cell, true);
			destination_combo.SetCellDataFunc (name_cell, new CellLayoutDataFunc (ProfileList.ProfileNameDataFunc));
			destination_combo.SetCellDataFunc (desc_cell, new CellLayoutDataFunc (ProfileList.ProfileDescriptionDataFunc));
			destination_combo.Changed += HandleDisplayChanged;

			Tag t = MainWindow.Toplevel.Database.Tags.GetTagById (screensaver_tag);
			TagMenu tagmenu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
	
			tagmenu.Populate (true);
			tag_option.Menu = tagmenu;

			int history = tagmenu.GetPosition (t);
			if (history >= 0)
				tag_option.SetHistory ((uint)history);

			tagmenu.TagSelected += HandleTagMenuSelected;
			set_saver_button.Clicked += HandleUseFSpot;
			screensaverall_radio.Toggled += ToggleTagRadio;

			Preferences.SettingChanged += OnPreferencesChanged;
			this.Dialog.Destroyed += HandleDestroyed;
		}
예제 #11
0
        public StartPage()
        {
            InitializeComponent();

            // http://www.ben.geek.nz/controldesignmode-misbehaving/
            if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
            {
                return;
            }

            exitProgram.Text = string.Format(exitProgram.Text, Application.ProductName);

            recentItems.ListsChosen += new EventHandler(recentItems_ListsChosen);

            tagMenu = new TagMenu();
            listContextMenu.Items.Insert(listContextMenu.Items.IndexOf(newListCM), tagMenu);
        }
예제 #12
0
 public override void MouseDown(Rectangle rect, MouseButtons button, int x, int y)
 {
     if (button == MouseButtons.Right)
     {
         foreach (var reference in _drawnReferences)
         {
             if (reference.Rectangle.X <= x && reference.Rectangle.Right > x)
             {
                 var branch = reference.Reference as BranchBase;
                 if (branch != null)
                 {
                     var menu = new BranchMenu(branch);
                     Utility.MarkDropDownForAutoDispose(menu);
                     Owner.OnContextMenuRequested(menu, new Point(x + 1, y + 1));
                     return;
                 }
                 var tag = reference.Reference as Tag;
                 if (tag != null)
                 {
                     var menu = new TagMenu(tag);
                     Utility.MarkDropDownForAutoDispose(menu);
                     Owner.OnContextMenuRequested(menu, new Point(x + 1, y + 1));
                     return;
                 }
                 var head = reference.Reference as Head;
                 if (head != null)
                 {
                     var menu = new HeadMenu(head);
                     Utility.MarkDropDownForAutoDispose(menu);
                     Owner.OnContextMenuRequested(menu, new Point(x + 1, y + 1));
                     return;
                 }
                 return;
             }
         }
     }
 }
예제 #13
0
        //
        // Constructor
        //
        public MainWindow(Db db)
        {
            foreach (ServiceNode service in AddinManager.GetExtensionNodes ("/FSpot/Services")) {
                try {
                    service.Initialize ();
                    service.Start ();
                } catch (Exception e) {
                    Log.Warning ("Something went wrong while starting the {0} extension.", service.Id);
                    Log.DebugException (e);
                }
            }

            #if GSD_2_24
            Log.Information ("Hack for gnome-settings-daemon engaged");
            int max_age, max_size;
            if (Preferences.TryGet<int> (Preferences.GSD_THUMBS_MAX_AGE, out max_age)) {
                if (max_age < 0)
                    Log.Debug ("maximum_age check already disabled, good");
                else if (max_age == 0)
                    Log.Warning ("maximum_age is 0 (tin-hat mode), not overriding");
                else if (max_age < 180) {
                    Log.Debug ("Setting maximum_age to a saner value");
                    Preferences.Set (Preferences.GSD_THUMBS_MAX_AGE, 180);
                }
            }

            if (Preferences.TryGet<int> (Preferences.GSD_THUMBS_MAX_SIZE, out max_size)) {
                int count = App.Instance.Database.Photos.Count ("photos");
                // average thumbs are taking 70K, so this will push the threshold
                //if f-spot takes more than 70% of the thumbs space
                int size = count / 10;
                if (max_size < 0)
                    Log.Debug ("maximum_size check already disabled, good");
                else if (max_size == 0)
                    Log.Warning ("maximum_size is 0 (tin-hat mode), not overriding");
                else if (max_size < size) {
                    Log.Debug ("Setting maximum_size to a saner value ({0}MB), according to your db size", size);
                    Preferences.Set (Preferences.GSD_THUMBS_MAX_SIZE, size);
                }
            }

            #endif
            Database = db;

            if (Toplevel == null)
                Toplevel = this;

            GtkBeans.Builder builder = new GtkBeans.Builder ("main_window.ui");
            builder.Autoconnect (this);

            //Set the global DefaultColormap. Allows transparency according
            //to the theme (work on murrine engine)
            Gdk.Colormap colormap = ((Widget)main_window).Screen.RgbaColormap;
            if (colormap == null) {
                Log.Debug ("Your screen doesn't support alpha channels!");
                colormap = ((Widget)main_window).Screen.RgbColormap;
            }
            Gtk.Widget.DefaultColormap = colormap;

            LoadPreference (Preferences.MAIN_WINDOW_WIDTH);
            LoadPreference (Preferences.MAIN_WINDOW_X);
            LoadPreference (Preferences.MAIN_WINDOW_MAXIMIZED);
            main_window.ShowAll ();

            LoadPreference (Preferences.SIDEBAR_POSITION);
            LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);

            pagesetup_menu_item.Activated += HandlePageSetupActivated;

            toolbar = new Gtk.Toolbar ();
            toolbar_vbox.PackStart (toolbar);

            ToolButton import_button = GtkUtil.ToolButtonFromTheme ("gtk-add", Catalog.GetString ("Import"), true);
            import_button.Clicked += HandleImportCommand;
            import_button.SetTooltip (ToolTips, Catalog.GetString ("Import new images"), null);
            toolbar.Insert (import_button, -1);

            toolbar.Insert (new SeparatorToolItem (), -1);

            rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), false);
            rl_button.Clicked += HandleRotate270Command;
            toolbar.Insert (rl_button, -1);

            rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), false);
            rr_button.Clicked += HandleRotate90Command;
            toolbar.Insert (rr_button, -1);

            toolbar.Insert (new SeparatorToolItem (), -1);

            browse_button = new ToggleToolButton ();
            browse_button.Label = Catalog.GetString ("Browse");
            browse_button.IconName = "mode-browse";
            browse_button.IsImportant = true;
            browse_button.Toggled += HandleToggleViewBrowse;
            browse_button.SetTooltip (ToolTips, Catalog.GetString ("Browse many photos simultaneously"), null);
            toolbar.Insert (browse_button, -1);

            edit_button = new ToggleToolButton ();
            edit_button.Label = Catalog.GetString ("Edit Image");
            edit_button.IconName = "mode-image-edit";
            edit_button.IsImportant = true;
            edit_button.Toggled += HandleToggleViewPhoto;
            edit_button.SetTooltip (ToolTips, Catalog.GetString ("View and edit a photo"), null);
            toolbar.Insert (edit_button, -1);

            toolbar.Insert (new SeparatorToolItem (), -1);

            ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), false);
            fs_button.Clicked += HandleViewFullscreen;
            fs_button.SetTooltip (ToolTips, Catalog.GetString ("View photos fullscreen"), null);
            toolbar.Insert (fs_button, -1);

            ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), false);
            ss_button.Clicked += HandleViewSlideShow;
            ss_button.SetTooltip (ToolTips, Catalog.GetString ("View photos in a slideshow"), null);
            toolbar.Insert (ss_button, -1);

            SeparatorToolItem white_space = new SeparatorToolItem ();
            white_space.Draw = false;
            white_space.Expand = true;
            toolbar.Insert (white_space, -1);

            ToolItem label_item = new ToolItem ();
            count_label = new Label (String.Empty);
            label_item.Child = count_label;
            toolbar.Insert (label_item, -1);

            display_previous_button = new ToolButton (Stock.GoBack);
            toolbar.Insert (display_previous_button, -1);
            display_previous_button.SetTooltip (ToolTips, Catalog.GetString ("Previous photo"), String.Empty);
            display_previous_button.Clicked += new EventHandler (HandleDisplayPreviousButtonClicked);

            display_next_button = new ToolButton (Stock.GoForward);
            toolbar.Insert (display_next_button, -1);
            display_next_button.SetTooltip (ToolTips, Catalog.GetString ("Next photo"), String.Empty);
            display_next_button.Clicked += new EventHandler (HandleDisplayNextButtonClicked);

            Sidebar = new Sidebar ();
            ViewModeChanged += Sidebar.HandleMainWindowViewModeChanged;
            sidebar_vbox.Add (Sidebar);

            tag_selection_scrolled = new ScrolledWindow ();
            tag_selection_scrolled.ShadowType = ShadowType.In;

            tag_selection_widget = new TagSelectionWidget (Database.Tags);
            tag_selection_scrolled.Add (tag_selection_widget);

            Sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "tag");

            AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);

            Sidebar.Context = ViewContext.Library;

            Sidebar.CloseRequested += HideSidebar;
            Sidebar.Show ();

            InfoBox = new InfoBox ();
            ViewModeChanged += InfoBox.HandleMainWindowViewModeChanged;
            InfoBox.VersionIdChanged += delegate (InfoBox box, uint version_id) { UpdateForVersionIdChange (version_id);};
            sidebar_vbox.PackEnd (InfoBox, false, false, 0);

            InfoBox.Context = ViewContext.Library;

            tag_selection_widget.Selection.Changed += HandleTagSelectionChanged;
            tag_selection_widget.KeyPressEvent += HandleTagSelectionKeyPress;
            tag_selection_widget.ButtonPressEvent += HandleTagSelectionButtonPressEvent;
            tag_selection_widget.PopupMenu += HandleTagSelectionPopupMenu;
            tag_selection_widget.RowActivated += HandleTagSelectionRowActivated;

            LoadPreference (Preferences.TAG_ICON_SIZE);

            try {
                query = new FSpot.PhotoQuery (Database.Photos);
            } catch (System.Exception e) {
                //FIXME assume any exception here is due to a corrupt db and handle that.
                new RepairDbDialog (e, Database.Repair (), main_window);
                query = new FSpot.PhotoQuery (Database.Photos);
            }

            UpdateStatusLabel ();
            query.Changed += HandleQueryChanged;

            Database.Photos.ItemsChanged += HandleDbItemsChanged;
            Database.Tags.ItemsChanged += HandleTagsChanged;
            Database.Tags.ItemsAdded += HandleTagsChanged;
            Database.Tags.ItemsRemoved += HandleTagsChanged;
            #if SHOW_CALENDAR
            FSpot.SimpleCalendar cal = new FSpot.SimpleCalendar (query);
            cal.DaySelected += HandleCalendarDaySelected;
            left_vbox.PackStart (cal, false, true, 0);
            #endif

            group_selector = new FSpot.GroupSelector ();
            group_selector.Adaptor = new FSpot.TimeAdaptor (query, Preferences.Get<bool> (Preferences.GROUP_ADAPTOR_ORDER_ASC));

            group_selector.ShowAll ();

            if (zoom_scale != null) {
                zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
            }

            view_vbox.PackStart (group_selector, false, false, 0);
            view_vbox.ReorderChild (group_selector, 0);

            find_bar = new FindBar (query, tag_selection_widget.Model);
            view_vbox.PackStart (find_bar, false, false, 0);
            view_vbox.ReorderChild (find_bar, 1);
            main_window.KeyPressEvent += HandleKeyPressEvent;

            query_widget = new FSpot.QueryWidget (query, Database);
            query_widget.Logic.Changed += HandleQueryLogicChanged;
            view_vbox.PackStart (query_widget, false, false, 0);
            view_vbox.ReorderChild (query_widget, 2);

            icon_view = new QueryView (query);
            icon_view.ZoomChanged += HandleZoomChanged;
            LoadPreference (Preferences.ZOOM);
            LoadPreference (Preferences.SHOW_TAGS);
            LoadPreference (Preferences.SHOW_DATES);
            LoadPreference (Preferences.SHOW_RATINGS);
            icon_view_scrolled.Add (icon_view);
            icon_view.DoubleClicked += HandleDoubleClicked;
            icon_view.Vadjustment.ValueChanged += HandleIconViewScroll;
            icon_view.GrabFocus ();

            new FSpot.PreviewPopup (icon_view);

            Gtk.Drag.SourceSet (icon_view, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
                        icon_source_target_table, DragAction.Copy | DragAction.Move);

            icon_view.DragBegin += HandleIconViewDragBegin;
            icon_view.DragDataGet += HandleIconViewDragDataGet;

            TagMenu tag_menu = new TagMenu (null, Database.Tags);
            tag_menu.NewTagHandler += delegate { HandleCreateTagAndAttach (this, null); };
            tag_menu.TagSelected += HandleAttachTagMenuSelected;
            tag_menu.Populate();
            (uimanager.GetWidget("/ui/menubar1/edit2/attach_tag") as MenuItem).Submenu = tag_menu;

            PhotoTagMenu pmenu = new PhotoTagMenu ();
            pmenu.TagSelected += HandleRemoveTagMenuSelected;
            (uimanager.GetWidget("/ui/menubar1/edit2/remove_tag") as MenuItem).Submenu = pmenu;

            Gtk.Drag.DestSet (icon_view, DestDefaults.All, icon_dest_target_table,
                      DragAction.Copy | DragAction.Move);

            //		icon_view.DragLeave += new DragLeaveHandler (HandleIconViewDragLeave);
            icon_view.DragMotion += HandleIconViewDragMotion;
            icon_view.DragDrop += HandleIconViewDragDrop;
            icon_view.DragDataReceived += HandleIconViewDragDataReceived;
            icon_view.KeyPressEvent += HandleIconViewKeyPressEvent;

            photo_view = new PhotoView (query);
            photo_box.Add (photo_view);

            photo_view.DoubleClicked += HandleDoubleClicked;
            photo_view.KeyPressEvent += HandlePhotoViewKeyPressEvent;
            photo_view.UpdateStarted += HandlePhotoViewUpdateStarted;
            photo_view.UpdateFinished += HandlePhotoViewUpdateFinished;

            photo_view.View.ZoomChanged += HandleZoomChanged;

            // Tag typing: focus the tag entry if the user starts typing a tag
            icon_view.KeyPressEvent += HandlePossibleTagTyping;
            photo_view.KeyPressEvent += HandlePossibleTagTyping;
            tag_entry = new TagEntry (Database.Tags);
            tag_entry.KeyPressEvent += HandleTagEntryKeyPressEvent;
            tag_entry.TagsAttached += HandleTagEntryTagsAttached;
            tag_entry.TagsRemoved += HandleTagEntryRemoveTags;
            tag_entry.Activated += HandleTagEntryActivate;
            tag_entry_container.Add (tag_entry);

            Gtk.Drag.DestSet (photo_view, DestDefaults.All, tag_target_table,
                      DragAction.Copy | DragAction.Move);

            photo_view.DragMotion += HandlePhotoViewDragMotion;
            photo_view.DragDrop += HandlePhotoViewDragDrop;
            photo_view.DragDataReceived += HandlePhotoViewDragDataReceived;

            view_notebook.SwitchPage += HandleViewNotebookSwitchPage;
            group_selector.Adaptor.GlassSet += HandleAdaptorGlassSet;
            group_selector.Adaptor.Changed += HandleAdaptorChanged;
            LoadPreference (Preferences.GROUP_ADAPTOR_ORDER_ASC);
            LoadPreference (Preferences.FILMSTRIP_ORIENTATION);

            Selection = new MainSelection (this);
            Selection.Changed += HandleSelectionChanged;
            Selection.ItemsChanged += HandleSelectionItemsChanged;
            Selection.Changed += Sidebar.HandleSelectionChanged;
            Selection.ItemsChanged += Sidebar.HandleSelectionItemsChanged;

            Mono.Addins.AddinManager.ExtensionChanged += PopulateExtendableMenus;
            PopulateExtendableMenus (null, null);

            UpdateMenus ();

            main_window.ShowAll ();

            tagbar.Hide ();
            find_bar.Hide ();

            UpdateFindByTagMenu ();

            LoadPreference (Preferences.SHOW_TOOLBAR);
            LoadPreference (Preferences.SHOW_SIDEBAR);
            LoadPreference (Preferences.SHOW_TIMELINE);
            LoadPreference (Preferences.SHOW_FILMSTRIP);

            LoadPreference (Preferences.GNOME_MAILTO_ENABLED);

            Preferences.SettingChanged += OnPreferencesChanged;

            main_window.DeleteEvent += HandleDeleteEvent;

            query_widget.HandleChanged (query);
            query_widget.Close ();

            // When the icon_view is loaded, set it's initial scroll position
            icon_view.SizeAllocated += HandleIconViewReady;

            export.Activated += HandleExportActivated;
            UpdateToolbar ();

            (uimanager.GetWidget("/ui/menubar1/file1/close1") as MenuItem).Hide ();

            Banshee.Kernel.Scheduler.Resume ();
        }
예제 #14
0
        public PreferenceDialog() : base("main_preferences")
        {
            tag_button = new MenuButton();
            LoadPreference(Preferences.METADATA_EMBED_IN_IMAGE);
            LoadPreference(Preferences.COLOR_MANAGEMENT_ENABLED);
            LoadPreference(Preferences.COLOR_MANAGEMENT_USE_X_PROFILE);
            LoadPreference(Preferences.SCREENSAVER_TAG);
            LoadPreference(Preferences.GNOME_SCREENSAVER_THEME);
            if (Global.PhotoDirectory == Preferences.Get <string> (Preferences.STORAGE_PATH))
            {
                photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
                photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
            }
            else
            {
                photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
                photosdir_chooser.Sensitive = false;
            }

            Gtk.CellRendererText name_cell = new Gtk.CellRendererText();
            Gtk.CellRendererText desc_cell = new Gtk.CellRendererText();

            use_x_profile_check.Sensitive = colormanagement_check.Active;

            display_combo.Sensitive = colormanagement_check.Active;
            display_combo.Model     = new ProfileList();
            display_combo.PackStart(desc_cell, false);
            display_combo.PackStart(name_cell, true);
            display_combo.SetCellDataFunc(name_cell, new CellLayoutDataFunc(ProfileList.ProfileNameDataFunc));
            //FIXME
            int it_ = 0;

            foreach (Cms.Profile profile in FSpot.ColorManagement.Profiles)
            {
                if (profile.ProductName == Preferences.Get <string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE))
                {
                    display_combo.Active = it_;
                }
                it_++;
            }

            display_combo.Changed += HandleDisplayChanged;

            destination_combo.Sensitive = colormanagement_check.Active;
            destination_combo.Model     = new ProfileList();
            destination_combo.PackStart(desc_cell, false);
            destination_combo.PackStart(name_cell, true);
            destination_combo.SetCellDataFunc(name_cell, new CellLayoutDataFunc(ProfileList.ProfileNameDataFunc));
            destination_combo.Changed += HandleDestinationChanged;
            //FIXME
            it_ = 0;
            foreach (Cms.Profile profile in FSpot.ColorManagement.Profiles)
            {
                if (profile.ProductName == Preferences.Get <string> (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE))
                {
                    destination_combo.Active = it_;
                }
                it_++;
            }

            TagMenu tagmenu = new TagMenu(null, MainWindow.Toplevel.Database.Tags);

            tagmenu.Populate(false);

            tag_button.Menu = tagmenu;
            tag_button.ShowAll();
            tagselectionhbox.Add(tag_button);

            tagmenu.TagSelected          += HandleTagMenuSelected;
            set_saver_button.Clicked     += HandleUseFSpot;
            screensaverall_radio.Toggled += ToggleTagRadio;

            themenone_radio.Toggled += ToggleThemeRadio;
            themelist_combo          = ComboBox.NewText();
            theme_list = new Dictionary <string, string> ();
            string gtkrc = Path.Combine("gtk-2.0", "gtkrc");

            string [] search = { Path.Combine(Global.HomeDirectory, ".themes"), "/usr/share/themes" };
            foreach (string path in search)
            {
                if (Directory.Exists(path))
                {
                    foreach (string dir in Directory.GetDirectories(path))
                    {
                        if (File.Exists(Path.Combine(dir, gtkrc)) && !theme_list.ContainsKey(Path.GetFileName(dir)))
                        {
                            theme_list.Add(Path.GetFileName(dir), Path.Combine(dir, gtkrc));
                        }
                    }
                }
            }

            string active_theme = Preferences.Get <string> (Preferences.GTK_RC);
            int    it           = 0;

            foreach (string theme in theme_list.Keys)
            {
                themelist_combo.AppendText(Path.GetFileName(theme));
                if (active_theme.Contains(Path.DirectorySeparatorChar + Path.GetFileName(theme) + Path.DirectorySeparatorChar))
                {
                    themelist_combo.Active = it;
                }
                it++;
            }

            theme_table.Attach(themelist_combo, 2, 3, 0, 1);
            themelist_combo.Changed += HandleThemeComboChanged;
            themelist_combo.Show();
            theme_filechooser.Visible = themefile_label.Visible = FSpot.Utils.Log.Debugging;

            themelist_combo.Sensitive = theme_filechooser.Sensitive = themecustom_radio.Active;
            if (File.Exists(active_theme))
            {
                theme_filechooser.SetFilename(Preferences.Get <string> (Preferences.GTK_RC));
            }
            theme_filechooser.SelectionChanged += HandleThemeFileActivated;
            themecustom_radio.Active            = (active_theme != String.Empty);

#if GTK_2_12_2
            restartlabel.Visible = false;
#endif

#if DEBUGTHEMES
            refreshtheme_button = true;
#endif

            Preferences.SettingChanged += OnPreferencesChanged;
            this.Dialog.Destroyed      += HandleDestroyed;
        }
예제 #15
0
    public void Activate(Widget toplevel, Gdk.EventButton eb)
    {
        // FIXME this is a hack to handle the --view case for the time being.
        creator = toplevel;

        if (MainWindow.Toplevel == null)
        {
            return;
        }

        int count = MainWindow.Toplevel.SelectedIds().Length;

        Gtk.Menu popup_menu     = this;
        bool     have_selection = count > 0;

        GtkUtil.MakeMenuItem(popup_menu, Catalog.GetString("Copy Photo Location"),
                             delegate { MainWindow.Toplevel.HandleCopyLocation(creator, null); }, have_selection);

        GtkUtil.MakeMenuSeparator(popup_menu);

        GtkUtil.MakeMenuItem(popup_menu, "f-spot-rotate-270",
                             delegate { MainWindow.Toplevel.HandleRotate270Command(creator, null); }, have_selection);
        GtkUtil.MakeMenuItem(popup_menu, "f-spot-rotate-90",
                             delegate { MainWindow.Toplevel.HandleRotate90Command(creator, null); }, have_selection);

        GtkUtil.MakeMenuSeparator(popup_menu);

        OpenWithMenu owm = OpenWithMenu.AppendMenuTo(popup_menu, MainWindow.Toplevel.SelectedMimeTypes, true);

        owm.IgnoreApp             = "f-spot";
        owm.ApplicationActivated += delegate(Gnome.Vfs.MimeApplication app) { MainWindow.Toplevel.HandleOpenWith(creator, app); };

        GtkUtil.MakeMenuItem(popup_menu, Catalog.GetString("Remove From Catalog"),
                             delegate { MainWindow.Toplevel.HandleRemoveCommand(creator, null); }, have_selection);
        GtkUtil.MakeMenuItem(popup_menu, Catalog.GetString("Delete From Drive"),
                             delegate { MainWindow.Toplevel.HandleDeleteCommand(creator, null); }, have_selection);

        GtkUtil.MakeMenuSeparator(popup_menu);

        //
        // FIXME TagMenu is ugly.
        //
        ImageMenuItem attach_item = new ImageMenuItem(Catalog.GetString("Attach Tag"));

        attach_item.Image = new Gtk.Image("gtk-add", IconSize.Menu);
        TagMenu attach_menu = new TagMenu(attach_item, MainWindow.Toplevel.Database.Tags);

        attach_menu.NewTagHandler += delegate { MainWindow.Toplevel.HandleCreateTagAndAttach(creator, null); };
        attach_menu.TagSelected   += MainWindow.Toplevel.HandleAttachTagMenuSelected;
        attach_item.ShowAll();
        popup_menu.Append(attach_item);

        //
        // FIXME finish the IPhotoSelection stuff and move the activate handler into the class
        // this current method is way too complicated.
        //
        ImageMenuItem remove_item = new ImageMenuItem(Catalog.GetString("Remove Tag"));

        remove_item.Image = new Gtk.Image("gtk-remove", IconSize.Menu);
        PhotoTagMenu remove_menu = new PhotoTagMenu();

        remove_menu.TagSelected += MainWindow.Toplevel.HandleRemoveTagMenuSelected;
        remove_item.Submenu      = remove_menu;
        remove_item.Activated   += MainWindow.Toplevel.HandleTagMenuActivate;
        remove_item.ShowAll();
        popup_menu.Append(remove_item);

        if (eb != null)
        {
            popup_menu.Popup(null, null, null, eb.Button, eb.Time);
        }
        else
        {
            popup_menu.Popup(null, null, null, 0, Gtk.Global.CurrentEventTime);
        }
    }
예제 #16
0
	//
	// Constructor
	//
	public MainWindow (Db db)
	{
		this.db = db;

		if (Toplevel == null)
			Toplevel = this;

		Glade.XML gui = new Glade.XML (null, "f-spot.glade", "main_window", "f-spot");
		gui.Autoconnect (this);

		LoadPreference (Preferences.MAIN_WINDOW_WIDTH);
		LoadPreference (Preferences.MAIN_WINDOW_X);
		LoadPreference (Preferences.MAIN_WINDOW_MAXIMIZED);
		main_window.ShowAll ();

		LoadPreference (Preferences.SIDEBAR_POSITION);
		LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);

		LoadPreference (Preferences.COLOR_MANAGEMENT_ENABLED);
 		LoadPreference (Preferences.COLOR_MANAGEMENT_USE_X_PROFILE);
 		FSpot.ColorManagement.LoadSettings();
	
#if GTK_2_10
		pagesetup_menu_item.Activated += HandlePageSetupActivated;
#else
		pagesetup_menu_item.Visible = false;
#endif
		toolbar = new Gtk.Toolbar ();
		toolbar_vbox.PackStart (toolbar);

		ToolButton import_button = GtkUtil.ToolButtonFromTheme ("gtk-add", Catalog.GetString ("Import"), false);
		import_button.Clicked += HandleImportCommand;
		import_button.SetTooltip (ToolTips, Catalog.GetString ("Import new images"), null);
		toolbar.Insert (import_button, -1);
	
		toolbar.Insert (new SeparatorToolItem (), -1);

		ToolButton rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), true);
		rl_button.Clicked += HandleRotate270Command;
		toolbar.Insert (rl_button, -1);

		ToolButton rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), true);
		rr_button.Clicked += HandleRotate90Command;
		toolbar.Insert (rr_button, -1);

		toolbar.Insert (new SeparatorToolItem (), -1);

		browse_button = new ToggleToolButton ();
		browse_button.Label = Catalog.GetString ("Browse");
		browse_button.IconName = "mode-browse";
		browse_button.IsImportant = true;
		browse_button.Toggled += HandleToggleViewBrowse;
		browse_button.SetTooltip (ToolTips, Catalog.GetString ("Browse many photos simultaneously"), null);
		toolbar.Insert (browse_button, -1);

		edit_button = new ToggleToolButton ();
		edit_button.Label = Catalog.GetString ("Edit Image");
		edit_button.IconName = "mode-image-edit";
		edit_button.IsImportant = true;
		edit_button.Toggled += HandleToggleViewPhoto;
		edit_button.SetTooltip (ToolTips, Catalog.GetString ("View and edit a photo"), null);
		toolbar.Insert (edit_button, -1);

		toolbar.Insert (new SeparatorToolItem (), -1);

		ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), true);
		fs_button.Clicked += HandleViewFullscreen;
		fs_button.SetTooltip (ToolTips, Catalog.GetString ("View photos fullscreen"), null);
		toolbar.Insert (fs_button, -1);

		ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), true);
		ss_button.Clicked += HandleViewSlideShow;
		ss_button.SetTooltip (ToolTips, Catalog.GetString ("View photos in a slideshow"), null);
		toolbar.Insert (ss_button, -1);

		SeparatorToolItem white_space = new SeparatorToolItem ();
		white_space.Draw = false;
		white_space.Expand = true;
		toolbar.Insert (white_space, -1);

		ToolItem label_item = new ToolItem ();
		count_label = new Label (String.Empty);
		label_item.Child = count_label;
		toolbar.Insert (label_item, -1);

		display_previous_button = new ToolButton (Stock.GoBack);
		toolbar.Insert (display_previous_button, -1);
		display_previous_button.SetTooltip (ToolTips, Catalog.GetString ("Previous photo"), String.Empty);
		display_previous_button.Clicked += new EventHandler (HandleDisplayPreviousButtonClicked);

		display_next_button = new ToolButton (Stock.GoForward);
		toolbar.Insert (display_next_button, -1);
		display_next_button.SetTooltip (ToolTips, Catalog.GetString ("Next photo"), String.Empty);
		display_next_button.Clicked += new EventHandler (HandleDisplayNextButtonClicked);

		sidebar = new Sidebar ();
		ViewModeChanged += sidebar.HandleMainWindowViewModeChanged;
		sidebar_vbox.Add (sidebar);

		tag_selection_scrolled = new ScrolledWindow ();
		tag_selection_scrolled.ShadowType = ShadowType.In;
		
		tag_selection_widget = new TagSelectionWidget (db.Tags);
		tag_selection_scrolled.Add (tag_selection_widget);

		sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "tag");

		AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);

		sidebar.Context = ViewContext.Library;
 		
		sidebar.CloseRequested += HideSidebar;
		sidebar.Show ();

		info_box = new InfoBox ();
		ViewModeChanged += info_box.HandleMainWindowViewModeChanged;
		info_box.VersionIdChanged += delegate (InfoBox box, uint version_id) { UpdateForVersionIdChange (version_id);};
		sidebar_vbox.PackEnd (info_box, false, false, 0);

		info_box.Context = ViewContext.Library;
		
		tag_selection_widget.Selection.Changed += HandleTagSelectionChanged;
		tag_selection_widget.DragDataGet += HandleTagSelectionDragDataGet;
		tag_selection_widget.DragDrop += HandleTagSelectionDragDrop;
		tag_selection_widget.DragBegin += HandleTagSelectionDragBegin;
		tag_selection_widget.KeyPressEvent += HandleTagSelectionKeyPress;
		Gtk.Drag.SourceSet (tag_selection_widget, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
				    tag_target_table, DragAction.Copy | DragAction.Move);

		tag_selection_widget.DragDataReceived += HandleTagSelectionDragDataReceived;
		tag_selection_widget.DragMotion += HandleTagSelectionDragMotion;
		Gtk.Drag.DestSet (tag_selection_widget, DestDefaults.All, tag_dest_target_table, 
				  DragAction.Copy | DragAction.Move ); 

		tag_selection_widget.ButtonPressEvent += HandleTagSelectionButtonPressEvent;
		tag_selection_widget.PopupMenu += HandleTagSelectionPopupMenu;
		tag_selection_widget.RowActivated += HandleTagSelectionRowActivated;
		
		LoadPreference (Preferences.TAG_ICON_SIZE);
		
		try {
			query = new FSpot.PhotoQuery (db.Photos);
		} catch (System.Exception e) {
			//FIXME assume any exception here is due to a corrupt db and handle that.
			new RepairDbDialog (e, db.Repair (), main_window);
			query = new FSpot.PhotoQuery (db.Photos);
		}

		UpdateStatusLabel ();
		query.Changed += HandleQueryChanged;

		db.Photos.ItemsChanged += HandleDbItemsChanged;
		db.Tags.ItemsChanged += HandleTagsChanged;
		db.Tags.ItemsAdded += HandleTagsChanged;
		db.Tags.ItemsRemoved += HandleTagsChanged;
#if SHOW_CALENDAR
		FSpot.SimpleCalendar cal = new FSpot.SimpleCalendar (query);
		cal.DaySelected += HandleCalendarDaySelected;
		left_vbox.PackStart (cal, false, true, 0);
#endif

		group_selector = new FSpot.GroupSelector ();
		group_selector.Adaptor = new FSpot.TimeAdaptor (query, Preferences.Get<bool> (Preferences.GROUP_ADAPTOR_ORDER_ASC));

		group_selector.ShowAll ();
		
		if (zoom_scale != null) {
			zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
		}

		view_vbox.PackStart (group_selector, false, false, 0);
		view_vbox.ReorderChild (group_selector, 0);

		find_bar = new FindBar (query, tag_selection_widget.Model);
		view_vbox.PackStart (find_bar, false, false, 0);
		view_vbox.ReorderChild (find_bar, 1);
		main_window.KeyPressEvent += HandleKeyPressEvent;
		
		query_widget = new FSpot.QueryWidget (query, db, tag_selection_widget);
		query_widget.Logic.Changed += HandleQueryLogicChanged;
		view_vbox.PackStart (query_widget, false, false, 0);
		view_vbox.ReorderChild (query_widget, 2);

		icon_view = new QueryView (query);
		icon_view.ZoomChanged += HandleZoomChanged;
		LoadPreference (Preferences.ZOOM);
		LoadPreference (Preferences.SHOW_TAGS);
		LoadPreference (Preferences.SHOW_DATES);
		LoadPreference (Preferences.SHOW_RATINGS);
		icon_view_scrolled.Add (icon_view);
		icon_view.DoubleClicked += HandleDoubleClicked;
		icon_view.Vadjustment.ValueChanged += HandleIconViewScroll;
		icon_view.GrabFocus ();

		new FSpot.PreviewPopup (icon_view);

		Gtk.Drag.SourceSet (icon_view, Gdk.ModifierType.Button1Mask | Gdk.ModifierType.Button3Mask,
				    icon_source_target_table, DragAction.Copy | DragAction.Move);
		
		icon_view.DragBegin += HandleIconViewDragBegin;
		icon_view.DragDataGet += HandleIconViewDragDataGet;

		TagMenu tag_menu = new TagMenu (null, Database.Tags);
		tag_menu.NewTagHandler += delegate { HandleCreateTagAndAttach (this, null); };
		tag_menu.TagSelected += HandleAttachTagMenuSelected;
		tag_menu.Populate();
		attach_tag.Submenu = tag_menu;
		
		PhotoTagMenu pmenu = new PhotoTagMenu ();
		pmenu.TagSelected += HandleRemoveTagMenuSelected;
		remove_tag.Submenu = pmenu;
		
		Gtk.Drag.DestSet (icon_view, DestDefaults.All, icon_dest_target_table, 
				  DragAction.Copy | DragAction.Move); 

		//		icon_view.DragLeave += new DragLeaveHandler (HandleIconViewDragLeave);
		icon_view.DragMotion += HandleIconViewDragMotion;
		icon_view.DragDrop += HandleIconViewDragDrop;
		icon_view.DragDataReceived += HandleIconViewDragDataReceived;
		icon_view.KeyPressEvent += HandleIconViewKeyPressEvent;

		photo_view = new PhotoView (query);
		photo_box.Add (photo_view);

		photo_view.DoubleClicked += HandleDoubleClicked;
		photo_view.KeyPressEvent += HandlePhotoViewKeyPressEvent;
		photo_view.UpdateStarted += HandlePhotoViewUpdateStarted;
		photo_view.UpdateFinished += HandlePhotoViewUpdateFinished;

		photo_view.View.ZoomChanged += HandleZoomChanged;

		// Tag typing: focus the tag entry if the user starts typing a tag
		icon_view.KeyPressEvent += HandlePossibleTagTyping;
		photo_view.KeyPressEvent += HandlePossibleTagTyping;
		tag_entry = new TagEntry (db.Tags);
		tag_entry.KeyPressEvent += HandleTagEntryKeyPressEvent;
		tag_entry.TagsAttached += HandleTagEntryTagsAttached;
		tag_entry.TagsRemoved += HandleTagEntryRemoveTags;
		tag_entry.Activated += HandleTagEntryActivate;
		tag_entry_container.Add (tag_entry);

		Gtk.Drag.DestSet (photo_view, DestDefaults.All, tag_target_table, 
				  DragAction.Copy | DragAction.Move); 

		photo_view.DragMotion += HandlePhotoViewDragMotion;
		photo_view.DragDrop += HandlePhotoViewDragDrop;
		photo_view.DragDataReceived += HandlePhotoViewDragDataReceived;

		view_notebook.SwitchPage += HandleViewNotebookSwitchPage;
		group_selector.Adaptor.GlassSet += HandleAdaptorGlassSet;
		group_selector.Adaptor.Changed += HandleAdaptorChanged;
		LoadPreference (Preferences.GROUP_ADAPTOR);
		LoadPreference (Preferences.GROUP_ADAPTOR_ORDER_ASC);

		this.selection = new MainSelection (this);
		this.selection.Changed += HandleSelectionChanged;
		this.selection.ItemsChanged += HandleSelectionItemsChanged;
		this.selection.Changed += sidebar.HandleSelectionChanged;
		this.selection.ItemsChanged += sidebar.HandleSelectionItemsChanged;

		Mono.Addins.AddinManager.ExtensionChanged += PopulateExtendableMenus;
		PopulateExtendableMenus (null, null);

		UpdateMenus ();

		main_window.ShowAll ();

		tagbar.Hide ();
		find_bar.Hide ();

		UpdateFindByTagMenu ();

		LoadPreference (Preferences.SHOW_TOOLBAR);
		LoadPreference (Preferences.SHOW_SIDEBAR);
		LoadPreference (Preferences.SHOW_TIMELINE);
		LoadPreference (Preferences.SHOW_FILMSTRIP);

		LoadPreference (Preferences.GNOME_MAILTO_ENABLED);
		
		Preferences.SettingChanged += OnPreferencesChanged;

		main_window.DeleteEvent += HandleDeleteEvent;
		
		query_widget.HandleChanged (query);
		query_widget.Hide ();

		// When the icon_view is loaded, set it's initial scroll position
		icon_view.SizeAllocated += HandleIconViewReady;

		export.Activated += HandleExportActivated;
		UpdateToolbar ();

		Banshee.Kernel.Scheduler.Resume ();
	}
		public PreferenceDialog () : base ("main_preferences")
		{
			tag_button = new MenuButton ();
			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);
			LoadPreference (Preferences.COLOR_MANAGEMENT_ENABLED);
			LoadPreference (Preferences.COLOR_MANAGEMENT_USE_X_PROFILE);
			LoadPreference (Preferences.SCREENSAVER_TAG);
			LoadPreference (Preferences.GNOME_SCREENSAVER_THEME);
			if (Global.PhotoDirectory == Preferences.Get<string> (Preferences.STORAGE_PATH)) {
				photosdir_chooser.CurrentFolderChanged += HandlePhotosdirChanged;
				photosdir_chooser.SetCurrentFolder (Global.PhotoDirectory);
			} else {
				photosdir_chooser.SetCurrentFolder(Global.PhotoDirectory);
				photosdir_chooser.Sensitive = false;
			}

			Gtk.CellRendererText name_cell = new Gtk.CellRendererText ();
			Gtk.CellRendererText desc_cell = new Gtk.CellRendererText ();
			
			use_x_profile_check.Sensitive = colormanagement_check.Active;
			
			display_combo.Sensitive = colormanagement_check.Active;
			display_combo.Model = new ProfileList ();                                                                                    
			display_combo.PackStart (desc_cell, false);
			display_combo.PackStart (name_cell, true);
			display_combo.SetCellDataFunc (name_cell, new CellLayoutDataFunc (ProfileList.ProfileNameDataFunc));
			//FIXME
			int it_ = 0;
			foreach (Cms.Profile profile in FSpot.ColorManagement.Profiles) {
				if (profile.ProductName == Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_DISPLAY_PROFILE))
					display_combo.Active = it_;
				it_++;
			}

			display_combo.Changed += HandleDisplayChanged;

			destination_combo.Sensitive = colormanagement_check.Active;
			destination_combo.Model = new ProfileList ();
			destination_combo.PackStart (desc_cell, false);
			destination_combo.PackStart (name_cell, true);
			destination_combo.SetCellDataFunc (name_cell, new CellLayoutDataFunc (ProfileList.ProfileNameDataFunc));
			destination_combo.Changed += HandleDestinationChanged;
			//FIXME
			it_ = 0;
			foreach (Cms.Profile profile in FSpot.ColorManagement.Profiles) {
				if (profile.ProductName ==  Preferences.Get<string> (Preferences.COLOR_MANAGEMENT_OUTPUT_PROFILE))
					destination_combo.Active = it_;
				it_++;
			}

			TagMenu tagmenu = new TagMenu (null, MainWindow.Toplevel.Database.Tags);
	
			tagmenu.Populate (false);

			tag_button.Menu = tagmenu;
			tag_button.ShowAll ();
			tagselectionhbox.Add (tag_button);

			tagmenu.TagSelected += HandleTagMenuSelected;
			set_saver_button.Clicked += HandleUseFSpot;
			screensaverall_radio.Toggled += ToggleTagRadio;

			themenone_radio.Toggled += ToggleThemeRadio;
			themelist_combo = ComboBox.NewText ();
			theme_list = new Dictionary<string, string> ();
			string gtkrc = Path.Combine ("gtk-2.0", "gtkrc");
			string [] search = {Path.Combine (Global.HomeDirectory, ".themes"), "/usr/share/themes"};
			foreach (string path in search)
				if (Directory.Exists (path)) 
					foreach (string dir in Directory.GetDirectories (path))
						if (File.Exists (Path.Combine (dir, gtkrc)) && !theme_list.ContainsKey (Path.GetFileName (dir)))
							theme_list.Add (Path.GetFileName (dir), Path.Combine (dir, gtkrc));
			
			string active_theme = Preferences.Get<string> (Preferences.GTK_RC);
			int it = 0;
			foreach (string theme in theme_list.Keys) {
				themelist_combo.AppendText (Path.GetFileName (theme));
				if (active_theme.Contains (Path.DirectorySeparatorChar + Path.GetFileName (theme) + Path.DirectorySeparatorChar))
					themelist_combo.Active = it;
				it ++;
			}
			
			theme_table.Attach (themelist_combo, 2, 3, 0, 1);
			themelist_combo.Changed += HandleThemeComboChanged;
			themelist_combo.Show ();
			theme_filechooser.Visible = themefile_label.Visible = FSpot.Utils.Log.Debugging;

			themelist_combo.Sensitive = theme_filechooser.Sensitive = themecustom_radio.Active; 
			if (File.Exists (active_theme))
				theme_filechooser.SetFilename (Preferences.Get<string> (Preferences.GTK_RC));
			theme_filechooser.SelectionChanged += HandleThemeFileActivated;
			themecustom_radio.Active = (active_theme != String.Empty);	

#if GTK_2_12_2
			restartlabel.Visible = false;
#endif

#if DEBUGTHEMES
			refreshtheme_button = true;
#endif

			Preferences.SettingChanged += OnPreferencesChanged;
			this.Dialog.Destroyed += HandleDestroyed;
		}
예제 #18
0
파일: MainWindow.cs 프로젝트: mono/f-spot
		//
		// Constructor
		//
		public MainWindow (Db db)
		{
			foreach (ServiceNode service in AddinManager.GetExtensionNodes ("/FSpot/Services")) {
				try {
					service.Initialize ();
					service.Start ();
				} catch (Exception e) {
					Log.WarningFormat ("Something went wrong while starting the {0} extension.", service.Id);
					Log.DebugException (e);
				}
			}

			Database = db;

			GtkBeans.Builder builder = new GtkBeans.Builder ("main_window.ui");
			builder.Autoconnect (this);

			//Set the global DefaultColormap. Allows transparency according
			//to the theme (work on murrine engine)
			Gdk.Colormap colormap = ((Widget)main_window).Screen.RgbaColormap;
			if (colormap == null) {
				Log.Debug ("Your screen doesn't support alpha channels!");
				colormap = ((Widget)main_window).Screen.RgbColormap;
			}
			Gtk.Widget.DefaultColormap = colormap;

			LoadPreference (Preferences.MAIN_WINDOW_WIDTH);
			LoadPreference (Preferences.MAIN_WINDOW_X);
			LoadPreference (Preferences.MAIN_WINDOW_MAXIMIZED);
			main_window.ShowAll ();

			LoadPreference (Preferences.SIDEBAR_POSITION);
			LoadPreference (Preferences.METADATA_EMBED_IN_IMAGE);

			pagesetup_menu_item.Activated += HandlePageSetupActivated;

			toolbar = new Gtk.Toolbar ();
			toolbar_vbox.PackStart (toolbar);

			ToolButton import_button = GtkUtil.ToolButtonFromTheme ("gtk-add", Catalog.GetString ("Import Photos…"), true);
			import_button.Clicked += (o, args) => StartImport (null);
			import_button.TooltipText = Catalog.GetString ("Import new photos");
			toolbar.Insert (import_button, -1);

			toolbar.Insert (new SeparatorToolItem (), -1);

			rl_button = GtkUtil.ToolButtonFromTheme ("object-rotate-left", Catalog.GetString ("Rotate Left"), false);
			rl_button.Clicked += HandleRotate270Command;
			toolbar.Insert (rl_button, -1);

			rr_button = GtkUtil.ToolButtonFromTheme ("object-rotate-right", Catalog.GetString ("Rotate Right"), false);
			rr_button.Clicked += HandleRotate90Command;
			toolbar.Insert (rr_button, -1);

			toolbar.Insert (new SeparatorToolItem (), -1);

			browse_button = new ToggleToolButton ();
			browse_button.Label = Catalog.GetString ("Browsing");
			browse_button.IconName = "mode-browse";
			browse_button.IsImportant = true;
			browse_button.Toggled += HandleToggleViewBrowse;
			browse_button.TooltipText = Catalog.GetString ("Browse your photo library");
			toolbar.Insert (browse_button, -1);

			edit_button = new ToggleToolButton ();
			edit_button.Label = Catalog.GetString ("Editing");
			edit_button.IconName = "mode-image-edit";
			edit_button.IsImportant = true;
			edit_button.Toggled += HandleToggleViewPhoto;
			edit_button.TooltipText = Catalog.GetString ("Edit your photos");
			toolbar.Insert (edit_button, -1);

			toolbar.Insert (new SeparatorToolItem (), -1);

			ToolButton fs_button = GtkUtil.ToolButtonFromTheme ("view-fullscreen", Catalog.GetString ("Fullscreen"), false);
			fs_button.Clicked += HandleViewFullscreen;
			fs_button.TooltipText = Catalog.GetString ("View photos fullscreen");
			toolbar.Insert (fs_button, -1);

			ToolButton ss_button = GtkUtil.ToolButtonFromTheme ("media-playback-start", Catalog.GetString ("Slideshow"), false);
			ss_button.Clicked += HandleViewSlideShow;
			ss_button.TooltipText = Catalog.GetString ("View photos in a slideshow");
			toolbar.Insert (ss_button, -1);

			SeparatorToolItem white_space = new SeparatorToolItem ();
			white_space.Draw = false;
			white_space.Expand = true;
			toolbar.Insert (white_space, -1);

			ToolItem label_item = new ToolItem ();
			count_label = new Label (String.Empty);
			label_item.Child = count_label;
			toolbar.Insert (label_item, -1);

			display_previous_button = new ToolButton (Stock.GoBack);
			toolbar.Insert (display_previous_button, -1);
			display_previous_button.TooltipText = Catalog.GetString ("Previous photo");
			display_previous_button.Clicked += new EventHandler (HandleDisplayPreviousButtonClicked);

			display_next_button = new ToolButton (Stock.GoForward);
			toolbar.Insert (display_next_button, -1);
			display_next_button.TooltipText = Catalog.GetString ("Next photo");
			display_next_button.Clicked += new EventHandler (HandleDisplayNextButtonClicked);

			Sidebar = new Sidebar ();
			ViewModeChanged += Sidebar.HandleMainWindowViewModeChanged;
			sidebar_vbox.Add (Sidebar);

			tag_selection_scrolled = new Gtk.ScrolledWindow ();
			tag_selection_scrolled.ShadowType = ShadowType.In;

			tag_selection_widget = new TagSelectionWidget (Database.Tags);
			tag_selection_scrolled.Add (tag_selection_widget);

			Sidebar.AppendPage (tag_selection_scrolled, Catalog.GetString ("Tags"), "tag");

			AddinManager.AddExtensionNodeHandler ("/FSpot/Sidebar", OnSidebarExtensionChanged);

			Sidebar.Context = ViewContext.Library;

			Sidebar.CloseRequested += HideSidebar;
			Sidebar.Show ();

			InfoBox = new InfoBox ();
			ViewModeChanged += InfoBox.HandleMainWindowViewModeChanged;
			InfoBox.VersionChanged += delegate (InfoBox box, IPhotoVersion version) {
				UpdateForVersionChange (version);
			};
			sidebar_vbox.PackEnd (InfoBox, false, false, 0);

			InfoBox.Context = ViewContext.Library;

			tag_selection_widget.Selection.Changed += HandleTagSelectionChanged;
			tag_selection_widget.KeyPressEvent += HandleTagSelectionKeyPress;
			tag_selection_widget.ButtonPressEvent += HandleTagSelectionButtonPressEvent;
			tag_selection_widget.PopupMenu += HandleTagSelectionPopupMenu;
			tag_selection_widget.RowActivated += HandleTagSelectionRowActivated;

			LoadPreference (Preferences.TAG_ICON_SIZE);

			try {
				query = new PhotoQuery (Database.Photos);
			} catch (System.Exception e) {
				//FIXME assume any exception here is due to a corrupt db and handle that.
				new RepairDbDialog (e, Database.Repair (), main_window);
				query = new PhotoQuery (Database.Photos);
			}

			UpdateStatusLabel ();
			query.Changed += HandleQueryChanged;

			Database.Photos.ItemsChanged += HandleDbItemsChanged;
			Database.Tags.ItemsChanged += HandleTagsChanged;
			Database.Tags.ItemsAdded += HandleTagsChanged;
			Database.Tags.ItemsRemoved += HandleTagsChanged;

			group_selector = new GroupSelector ();
			group_selector.Adaptor = new TimeAdaptor (query, Preferences.Get<bool> (Preferences.GROUP_ADAPTOR_ORDER_ASC));

			group_selector.ShowAll ();

			if (zoom_scale != null) {
				zoom_scale.ValueChanged += HandleZoomScaleValueChanged;
			}

			view_vbox.PackStart (group_selector, false, false, 0);
			view_vbox.ReorderChild (group_selector, 0);

			find_bar = new FindBar (query, tag_selection_widget.Model);
			view_vbox.PackStart (find_bar, false, false, 0);
			view_vbox.ReorderChild (find_bar, 1);
			main_window.KeyPressEvent += HandleKeyPressEvent;

			query_widget = new QueryWidget (query, Database);
			query_widget.Logic.Changed += HandleQueryLogicChanged;
			view_vbox.PackStart (query_widget, false, false, 0);
			view_vbox.ReorderChild (query_widget, 2);

			MenuItem findByTag = uimanager.GetWidget ("/ui/menubar1/find/find_by_tag") as MenuItem;
			query_widget.Hidden += delegate {
				((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Show _Find Bar");
			};
			query_widget.Shown += delegate {
				((Gtk.Label)findByTag.Child).TextWithMnemonic = Catalog.GetString ("Hide _Find Bar");
			};

			icon_view = new QueryView (query);
			icon_view.ZoomChanged += HandleZoomChanged;
			LoadPreference (Preferences.ZOOM);
			LoadPreference (Preferences.SHOW_TAGS);
			LoadPreference (Preferences.SHOW_DATES);
			LoadPreference (Preferences.SHOW_RATINGS);
			icon_view_scrolled.Add (icon_view);
			icon_view.DoubleClicked += HandleDoubleClicked;
			icon_view.Vadjustment.ValueChanged += HandleIconViewScroll;
			icon_view.GrabFocus ();

			preview_popup = new PreviewPopup (icon_view);

			icon_view.DragBegin += HandleIconViewDragBegin;
			icon_view.DragEnd += HandleIconViewDragEnd;
			icon_view.DragDataGet += HandleIconViewDragDataGet;
			icon_view.DragMotion += HandleIconViewDragMotion;
			icon_view.DragDrop += HandleIconViewDragDrop;
			// StartDrag is fired by IconView
			icon_view.StartDrag += HandleIconViewStartDrag;

			TagMenu tag_menu = new TagMenu (null, Database.Tags);
			tag_menu.NewTagHandler += delegate {
				HandleCreateTagAndAttach (this, null);
			};
			tag_menu.TagSelected += HandleAttachTagMenuSelected;
			tag_menu.Populate ();
			(uimanager.GetWidget ("/ui/menubar1/edit2/attach_tag") as MenuItem).Submenu = tag_menu;

			PhotoTagMenu pmenu = new PhotoTagMenu ();
			pmenu.TagSelected += HandleRemoveTagMenuSelected;
			(uimanager.GetWidget ("/ui/menubar1/edit2/remove_tag") as MenuItem).Submenu = pmenu;

			Gtk.Drag.DestSet (icon_view, DestDefaults.All, (TargetEntry[])iconDestTargetList,
				DragAction.Copy | DragAction.Move);

			icon_view.DragDataReceived += HandleIconViewDragDataReceived;
			icon_view.KeyPressEvent += HandleIconViewKeyPressEvent;

			photo_view = new PhotoView (query);
			photo_box.Add (photo_view);

			photo_view.DoubleClicked += HandleDoubleClicked;
			photo_view.KeyPressEvent += HandlePhotoViewKeyPressEvent;
			photo_view.UpdateStarted += HandlePhotoViewUpdateStarted;
			photo_view.UpdateFinished += HandlePhotoViewUpdateFinished;

			photo_view.View.ZoomChanged += HandleZoomChanged;

			// Tag typing: focus the tag entry if the user starts typing a tag
			icon_view.KeyPressEvent += HandlePossibleTagTyping;
			photo_view.KeyPressEvent += HandlePossibleTagTyping;
			tag_entry = new TagEntry (Database.Tags);
			tag_entry.KeyPressEvent += HandleTagEntryKeyPressEvent;
			tag_entry.TagsAttached += HandleTagEntryTagsAttached;
			tag_entry.TagsRemoved += HandleTagEntryRemoveTags;
			tag_entry.Activated += HandleTagEntryActivate;
			tag_entry_container.Add (tag_entry);

			Gtk.Drag.DestSet (photo_view, DestDefaults.All, tag_target_table,
				DragAction.Copy | DragAction.Move);

			photo_view.DragMotion += HandlePhotoViewDragMotion;
			photo_view.DragDrop += HandlePhotoViewDragDrop;
			photo_view.DragDataReceived += HandlePhotoViewDragDataReceived;

			view_notebook.SwitchPage += HandleViewNotebookSwitchPage;
			group_selector.Adaptor.GlassSet += HandleAdaptorGlassSet;
			group_selector.Adaptor.Changed += HandleAdaptorChanged;
			LoadPreference (Preferences.GROUP_ADAPTOR_ORDER_ASC);
			LoadPreference (Preferences.FILMSTRIP_ORIENTATION);

			Selection = new MainSelection (this);
			Selection.Changed += HandleSelectionChanged;
			Selection.ItemsChanged += HandleSelectionItemsChanged;
			Selection.Changed += Sidebar.HandleSelectionChanged;
			Selection.ItemsChanged += Sidebar.HandleSelectionItemsChanged;

			AddinManager.ExtensionChanged += PopulateExtendableMenus;
			PopulateExtendableMenus (null, null);

			UpdateMenus ();

			main_window.ShowAll ();

			tagbar.Hide ();
			find_bar.Hide ();

			UpdateFindByTagMenu ();

			LoadPreference (Preferences.SHOW_TOOLBAR);
			LoadPreference (Preferences.SHOW_SIDEBAR);
			LoadPreference (Preferences.SHOW_TIMELINE);
			LoadPreference (Preferences.SHOW_FILMSTRIP);

			LoadPreference (Preferences.GNOME_MAILTO_ENABLED);

			Preferences.SettingChanged += OnPreferencesChanged;

			main_window.DeleteEvent += HandleDeleteEvent;

			// When the icon_view is loaded, set it's initial scroll position
			icon_view.SizeAllocated += HandleIconViewReady;

			export.Activated += HandleExportActivated;
			UpdateToolbar ();

			(uimanager.GetWidget ("/ui/menubar1/file1/close1") as MenuItem).Hide ();

			Banshee.Kernel.Scheduler.Resume ();
		}
예제 #19
0
        private void PopupMenuAtLocation(NSObject sender)
        {
            var     button   = (NSButton)sender;
            CGPoint location = new CGPoint();

            location.X = button.Frame.GetMinX();
            location.Y = button.Frame.GetMidY();

            location = button.Superview.ConvertPointToView(location, null);

            NSWindow window       = Utility.GetMainWindowConroller().Window;
            nint     windowNumber = window.WindowNumber;

            if (TagMenu == null)
            {
                TagMenu = new NSMenu();
            }
            else
            {
                TagMenu.RemoveAllItems();
            }

            NSMenuItem menuItem = new NSMenuItem("All Tags");

            menuItem.Image  = Utility.ImageWithFilePath("/Images/Annotation/[email protected]");
            menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:");
            menuItem.Target = this;
            menuItem.Tag    = 0;
            TagMenu.InsertItem(menuItem, 0);

            menuItem        = new NSMenuItem("No Tag");
            menuItem.Image  = CreateImageWithColor(string.Empty);
            menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:");
            menuItem.Target = this;
            menuItem.Tag    = 1;
            TagMenu.InsertItem(menuItem, 1);

            TagMenu.AddItem(NSMenuItem.SeparatorItem);

            for (int i = 3; i < this.TagList.Count; i++)
            {
                menuItem        = new NSMenuItem(this.TagList[i].Title);
                menuItem.Image  = CreateImageWithColor(this.TagList[i].Color);
                menuItem.Action = new ObjCRuntime.Selector("TagFilterMenuItemClick:");
                menuItem.Target = this;
                menuItem.Tag    = i;
                menuItem.State  = NSCellStateValue.Off;
                TagMenu.InsertItem(menuItem, i);
            }

            var menuItems = TagMenu.ItemArray();

            for (int i = 0; i < this.TagList.Count; i++)
            {
                menuItems[i].State = this.TagList[i].CheckState;
            }

            NSEvent fakeMouseEvent =
                NSEvent.MouseEvent(NSEventType.LeftMouseUp,
                                   location,
                                   (NSEventModifierMask)NSEventMask.LeftMouseUp,
                                   0,
                                   windowNumber,
                                   window.GraphicsContext, 0, 1, 1);

            NSMenu.PopUpContextMenu(TagMenu, fakeMouseEvent, (NSView)sender);
        }
예제 #20
0
 void ShowTagMenuFor(Widget widget, TagMenu.TagSelectedHandler handler)
 {
     TagMenu tag_menu = new TagMenu (null, App.Instance.Database.Tags);
     tag_menu.TagSelected += handler;
     tag_menu.Populate ();
     int x, y;
     GetPosition (out x, out y);
     x += widget.Allocation.X; y += widget.Allocation.Y;
     tag_menu.Popup (null, null, delegate (Menu menu, out int x_, out int y_, out bool push_in) {x_ = x; y_ = y; push_in = true;}, 0, 0);
 }
예제 #21
0
            public ScreensaverConfigDialog()
                : base(Assembly.GetExecutingAssembly (), "ScreensaverConfigDialog.ui", "screensaver-config-dialog")
            {
                delay_adjustment = new Adjustment (default_delay, 1.0, 20.0, .5, 5, 0);
                LoadPreference (SCREENSAVER_DELAY);
                delay_scale.Adjustment = delay_adjustment;
                delay_adjustment.ValueChanged += HandleDelayChanged;

                tag_button = new MenuButton ();
                tag_button.SizeRequested += delegate (object sender, SizeRequestedArgs args) {
                    var req = args.Requisition;
                    req.Width += 100;
                    args.Requisition = req;
                };
                TagMenu menu = new TagMenu (null, App.Instance.Database.Tags);
                menu.Populate (false);
                menu.TagSelected += HandleTagSelected;
                tag_button.Menu = menu;
                tag_button.ShowAll ();
                table.Attach (tag_button, 2, 3, 1, 2);
                LoadPreference (SCREENSAVER_TAG);
                all_radio.Toggled += HandleTagRadioToggled;

                do_button.Clicked += HandleUseFSpot;
            }
예제 #22
0
	public void Activate (Widget toplevel, Gdk.EventButton eb) 
	{
		// FIXME this is a hack to handle the --view case for the time being.
		creator = toplevel;

		if (MainWindow.Toplevel == null)
			return;

		int count = MainWindow.Toplevel.SelectedIds ().Length;
		
		Gtk.Menu popup_menu = this;
		bool have_selection = count > 0;
		
		GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Copy Photo Location"), 
				      delegate { MainWindow.Toplevel.HandleCopyLocation (creator, null); }, have_selection);
		
		GtkUtil.MakeMenuSeparator (popup_menu);

		GtkUtil.MakeMenuItem (popup_menu, "f-spot-rotate-270",
				      delegate { MainWindow.Toplevel.HandleRotate270Command(creator, null); }, have_selection);
		GtkUtil.MakeMenuItem (popup_menu, "f-spot-rotate-90", 
				      delegate { MainWindow.Toplevel.HandleRotate90Command (creator, null); }, have_selection);

		GtkUtil.MakeMenuSeparator (popup_menu);

		OpenWithMenu owm = OpenWithMenu.AppendMenuTo (popup_menu, MainWindow.Toplevel.SelectedMimeTypes, true);
		owm.IgnoreApp = "f-spot";
		owm.ApplicationActivated += delegate (Gnome.Vfs.MimeApplication app) { MainWindow.Toplevel.HandleOpenWith (creator, app); };

		GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Remove From Catalog"), 
				      delegate { MainWindow.Toplevel.HandleRemoveCommand (creator, null); }, have_selection);
		GtkUtil.MakeMenuItem (popup_menu, Catalog.GetString ("Delete From Drive"),
				      delegate { MainWindow.Toplevel.HandleDeleteCommand (creator, null); }, have_selection);

		GtkUtil.MakeMenuSeparator (popup_menu);
		
		//
		// FIXME TagMenu is ugly.
		//
		ImageMenuItem attach_item = new ImageMenuItem (Catalog.GetString ("Attach Tag"));
        attach_item.Image = new Gtk.Image ("gtk-add", IconSize.Menu);
		TagMenu attach_menu = new TagMenu (attach_item, MainWindow.Toplevel.Database.Tags);
		attach_menu.NewTagHandler += delegate { MainWindow.Toplevel.HandleCreateTagAndAttach (creator, null); };
		attach_menu.TagSelected += MainWindow.Toplevel.HandleAttachTagMenuSelected;
		attach_item.ShowAll ();
		popup_menu.Append (attach_item);

		//
		// FIXME finish the IPhotoSelection stuff and move the activate handler into the class
		// this current method is way too complicated.
		//
		ImageMenuItem remove_item = new ImageMenuItem (Catalog.GetString ("Remove Tag"));
        remove_item.Image = new Gtk.Image ("gtk-remove", IconSize.Menu);
		PhotoTagMenu remove_menu = new PhotoTagMenu ();
		remove_menu.TagSelected += MainWindow.Toplevel.HandleRemoveTagMenuSelected;
		remove_item.Submenu = remove_menu;
		remove_item.Activated += MainWindow.Toplevel.HandleTagMenuActivate;
		remove_item.ShowAll ();
		popup_menu.Append (remove_item);

		if (eb != null)
			popup_menu.Popup (null, null, null, eb.Button, eb.Time);
		else 
			popup_menu.Popup (null, null, null, 0, Gtk.Global.CurrentEventTime);
	}