protected override bool OnMotionNotifyEvent(EventMotion evnt) { RemovePreviewPopupTimeout(); if (IsInGrab()) { var yDelta = evnt.Y - grabY; MovePosition(grabCenter + yDelta); } else { UpdatePrelightState(evnt.X, evnt.Y); } const ModifierType buttonMask = ModifierType.Button1Mask | ModifierType.Button2Mask | ModifierType.Button3Mask | ModifierType.Button4Mask | ModifierType.Button5Mask; if ((evnt.State & ModifierType.ShiftMask) == ModifierType.ShiftMask) { int line = YToLine(evnt.Y); line = Math.Max(1, line - 2); int lastLine = Math.Min(TextEditor.LineCount, line + 5); var start = TextEditor.GetLine(line); var end = TextEditor.GetLine(lastLine); if (start == null || end == null) { return(base.OnMotionNotifyEvent(evnt)); } var showSegment = new Mono.TextEditor.TextSegment(start.Offset, end.Offset + end.Length - start.Offset); if (previewWindow != null) { previewWindow.SetSegment(showSegment, false); PositionPreviewWindow((int)evnt.Y); } else { var popup = new PreviewPopup(this, showSegment, TextEditor.Allocation.Width * 4 / 7, (int)evnt.Y); previewPopupTimeout = GLib.Timeout.Add(450, new GLib.TimeoutHandler(popup.Run)); } } else { RemovePreviewPopupTimeout(); DestroyPreviewWindow(); } return(base.OnMotionNotifyEvent(evnt)); }
public static void create_preview(Item item, Gtk.Widget placement, Gtk.Widget hover) { PreviewPopup popup = new PreviewPopup(item, placement); hover.EnterNotifyEvent += delegate (object sender, EnterNotifyEventArgs args) { Singleton<OverlayTracker>.Instance.add_overlay_and_show(popup); popup.show((int)(args.Event.XRoot - args.Event.X), (int)(args.Event.YRoot - args.Event.Y)); }; hover.LeaveNotifyEvent += delegate { Singleton<OverlayTracker>.Instance.hide_and_die("preview_popup"); }; hover.Destroyed += delegate { // make sure the window is always hidden when the item dies Singleton<OverlayTracker>.Instance.hide_and_die("preview_popup"); }; }
protected override bool OnMotionNotifyEvent (EventMotion evnt) { RemovePreviewPopupTimeout (); if (IsInGrab ()) { var yDelta = evnt.Y - grabY; MovePosition (grabCenter + yDelta); } else { UpdatePrelightState (evnt.X, evnt.Y); } const ModifierType buttonMask = ModifierType.Button1Mask | ModifierType.Button2Mask | ModifierType.Button3Mask | ModifierType.Button4Mask | ModifierType.Button5Mask; if ((evnt.State & buttonMask & ModifierType.ShiftMask) == ModifierType.ShiftMask) { int line = YToLine (evnt.Y); line = Math.Max (1, line - 2); int lastLine = Math.Min (TextEditor.LineCount, line + 5); var start = TextEditor.GetLine (line); var end = TextEditor.GetLine (lastLine); if (start == null || end == null) { return base.OnMotionNotifyEvent (evnt); } var showSegment = new TextSegment (start.Offset, end.Offset + end.Length - start.Offset); if (previewWindow != null) { previewWindow.SetSegment (showSegment, false); PositionPreviewWindow ((int)evnt.Y); } else { var popup = new PreviewPopup (this, showSegment, TextEditor.Allocation.Width * 4 / 7, (int)evnt.Y); previewPopupTimeout = GLib.Timeout.Add (450, new GLib.TimeoutHandler (popup.Run)); } } else { RemovePreviewPopupTimeout (); DestroyPreviewWindow (); } return base.OnMotionNotifyEvent (evnt); }
protected override bool OnMotionNotifyEvent(EventMotion evnt) { RemovePreviewPopupTimeout(); if (button != 0) { MouseMove(evnt.Y); } int h = Allocation.Height - Allocation.Width - 3; if (TextEditor.HighlightSearchPattern) { if (evnt.Y > h) { this.TooltipText = string.Format(GettextCatalog.GetPluralString("{0} match", "{0} matches", TextEditor.TextViewMargin.SearchResultMatchCount), TextEditor.TextViewMargin.SearchResultMatchCount); } } else { if (evnt.Y > h) { int errors = 0, warnings = 0; foreach (var task in AllTasks) { switch (task.Severity) { case Severity.Error: errors++; break; case Severity.Warning: warnings++; break; } } string text = null; if (errors == 0 && warnings == 0) { text = GettextCatalog.GetString("No errors or warnings"); } else if (errors == 0) { text = string.Format(GettextCatalog.GetPluralString("{0} warning", "{0} warnings", warnings), warnings); } else if (warnings == 0) { text = string.Format(GettextCatalog.GetPluralString("{0} error", "{0} errors", errors), errors); } else { text = string.Format(GettextCatalog.GetString("{0} errors and {1} warnings"), errors, warnings); } this.TooltipText = text; } else { // TextEditorData editorData = TextEditor.GetTextEditorData (); foreach (var task in AllTasks) { double y = GetYPosition(task.Location.Line); if (Math.Abs(y - evnt.Y) < 3) { hoverTask = task; } } base.TooltipText = hoverTask != null ? hoverTask.Description : null; } } if (button == 0 && evnt.State.HasFlag(ModifierType.ShiftMask)) { int line = YToLine(evnt.Y); line = Math.Max(1, line - 2); int lastLine = Math.Min(TextEditor.LineCount, line + 5); var start = TextEditor.GetLine(line); var end = TextEditor.GetLine(lastLine); if (start == null || end == null) { return(base.OnMotionNotifyEvent(evnt)); } var showSegment = new TextSegment(start.Offset, end.Offset + end.Length - start.Offset); if (previewWindow != null) { previewWindow.SetSegment(showSegment, false); PositionPreviewWindow((int)evnt.Y); } else { var popup = new PreviewPopup(this, showSegment, TextEditor.Allocation.Width * 4 / 7, (int)evnt.Y); previewPopupTimeout = GLib.Timeout.Add(450, new GLib.TimeoutHandler(popup.Run)); } } else { RemovePreviewPopupTimeout(); DestroyPreviewWindow(); } return(base.OnMotionNotifyEvent(evnt)); }
protected override bool OnMotionNotifyEvent (EventMotion evnt) { RemovePreviewPopupTimeout (); if (button != 0) MouseMove (evnt.Y); var h = IndicatorHeight; if (TextEditor.HighlightSearchPattern) { hoverOverIndicator = false; if (evnt.Y < h) this.TooltipText = string.Format (GettextCatalog.GetPluralString ("{0} match", "{0} matches", TextEditor.TextViewMargin.SearchResultMatchCount), TextEditor.TextViewMargin.SearchResultMatchCount); } else { hoverOverIndicator = evnt.Y < h; if (hoverOverIndicator) { int errors = 0, warnings = 0, hints = 0, suggestions = 0; foreach (var task in AllTasks) { switch (task.Severity) { case Severity.Error: errors++; break; case Severity.Warning: warnings++; break; case Severity.Hint: hints++; break; case Severity.Suggestion: suggestions++; break; } } string text = null; if (errors == 0 && warnings == 0) { text = GettextCatalog.GetString ("No errors or warnings"); } else if (errors == 0) { text = string.Format (GettextCatalog.GetPluralString ("{0} warning", "{0} warnings", warnings), warnings); } else if (warnings == 0) { text = string.Format (GettextCatalog.GetPluralString ("{0} error", "{0} errors", errors), errors); } else { text = string.Format (GettextCatalog.GetString ("{0} errors and {1} warnings"), errors, warnings); } if (errors > 0) { text += Environment.NewLine + GettextCatalog.GetString ("Click to navigate to the next error"); currentHoverMode = QuickTaskStrip.HoverMode.NextError; } else if (warnings > 0) { text += Environment.NewLine + GettextCatalog.GetString ("Click to navigate to the next warning"); currentHoverMode = QuickTaskStrip.HoverMode.NextWarning; } else if (warnings + hints > 0) { text += Environment.NewLine + GettextCatalog.GetString ("Click to navigate to the next message"); currentHoverMode = QuickTaskStrip.HoverMode.NextMessage; } TooltipText = text; } else { // TextEditorData editorData = TextEditor.GetTextEditorData (); foreach (var task in AllTasks) { double y = GetYPosition (task.Location.Line); if (Math.Abs (y - evnt.Y) < 3) { hoverTask = task; } } base.TooltipText = hoverTask != null ? hoverTask.Description : null; } } if (button == 0 && evnt.State.HasFlag (ModifierType.ShiftMask)) { int line = YToLine (evnt.Y); line = Math.Max (1, line - 2); int lastLine = Math.Min (TextEditor.LineCount, line + 5); var start = TextEditor.GetLine (line); var end = TextEditor.GetLine (lastLine); if (start == null || end == null) { return base.OnMotionNotifyEvent (evnt); } var showSegment = new TextSegment (start.Offset, end.Offset + end.Length - start.Offset); if (previewWindow != null) { previewWindow.SetSegment (showSegment, false); PositionPreviewWindow ((int)evnt.Y); } else { var popup = new PreviewPopup (this, showSegment, TextEditor.Allocation.Width * 4 / 7, (int)evnt.Y); previewPopupTimeout = GLib.Timeout.Add (450, new GLib.TimeoutHandler (popup.Run)); } } else { RemovePreviewPopupTimeout (); DestroyPreviewWindow (); } return base.OnMotionNotifyEvent (evnt); }
// // 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 (); }