public ActivateItems(ITheme theme, RefreshBus refreshBus, DockPanel mainDockPanel, IRDMPPlatformRepositoryServiceLocator repositoryLocator, WindowFactory windowFactory, WindowManager windowManager, ICheckNotifier globalErrorCheckNotifier) : base(repositoryLocator, globalErrorCheckNotifier) { Theme = theme; WindowFactory = windowFactory; _mainDockPanel = mainDockPanel; _windowManager = windowManager; RefreshBus = refreshBus; ConstructPluginChildProviders(); CoreChildProvider = GetChildProvider(); //Shouldn't ever change externally to your session so doesn't need constantly refreshed FavouritesProvider = new FavouritesProvider(this, repositoryLocator.CatalogueRepository); HistoryProvider = new HistoryProvider(repositoryLocator); //handle custom icons from plugin user interfaces in which CoreIconProvider = new DataExportIconProvider(repositoryLocator, PluginUserInterfaces.ToArray()); SelectIMapsDirectlyToDatabaseTableDialog.ImageGetter = (model) => CoreIconProvider.GetImage(model); WindowArranger = new WindowArranger(this, _windowManager, _mainDockPanel); CommandFactory = new RDMPCombineableFactory(); CommandExecutionFactory = new RDMPCommandExecutionFactory(this); ProblemProviders = new List <IProblemProvider>(); ProblemProviders.Add(new DataExportProblemProvider()); ProblemProviders.Add(new CatalogueProblemProvider()); RefreshProblemProviders(); RefreshBus.Subscribe(this); }
void _winHook_WindowFocusChanged(object sender, WindowHandleEventArgs e) { if (_currentRefWindow == IntPtr.Zero) { return; } if (_currentRefWindow == e.WindowHandle) { return; } if (_lastSwitched == e.WindowHandle) { return; } using (var targw = Window.ForegroundWindow()) using (var refw = new Window(_currentRefWindow)) { _lastSwitched = targw.Handle; Direction[] tryOrder = { Direction.Left, Direction.Right, Direction.Down, Direction.Up }; foreach (var dir in tryOrder) { if (WindowArranger.MoveWindowRelativeScreenDirection(refw, targw, dir)) { break; } } refw.SendToFront(); targw.SendToFront(); } }
public ActivateItems(ITheme theme, RefreshBus refreshBus, DockPanel mainDockPanel, IRDMPPlatformRepositoryServiceLocator repositoryLocator, WindowFactory windowFactory, WindowManager windowManager, ICheckNotifier globalErrorCheckNotifier) : base(repositoryLocator, globalErrorCheckNotifier) { Theme = theme; InteractiveDeletes = true; WindowFactory = windowFactory; _mainDockPanel = mainDockPanel; _windowManager = windowManager; RefreshBus = refreshBus; RefreshBus.ChildProvider = CoreChildProvider; HistoryProvider = new HistoryProvider(repositoryLocator); WindowArranger = new WindowArranger(this, _windowManager, _mainDockPanel); CommandFactory = new RDMPCombineableFactory(); CommandExecutionFactory = new RDMPCommandExecutionFactory(this); ProblemProviders = new List <IProblemProvider>(); ProblemProviders.Add(new DataExportProblemProvider()); ProblemProviders.Add(new CatalogueProblemProvider()); RefreshProblemProviders(); RefreshBus.Subscribe(this); }
void ReleaseArranger() { if (arranger != null) { arranger.ParentClosed -= OnParentWindowClosed; arranger.Release(); arranger = null; } }
static void Main() { InitialiseWinForms(); // Hook 'shell' events into the capturing form. Win32.RegisterShellHookWindow(ShellEventsDelegateForm.Handle); // TESTING: /*Console.WriteLine(DateTime.Now.ToString()); * using (var gf = new GifWriter(@"W:\work\tmp.gif", new Size(320,240))) * { * for (var x = 0; x < 100; x++) * { * gf.WriteScreenFrame(new Point(10+x, 10)); * } * } * Console.WriteLine(DateTime.Now.ToString());// manages about 30fps, almost regardless of capture size (up to a limit) */ // END TEST // Hook into system wide windowing events using (var winHook = new WindowHookManager()) { using (var switcherForm = new SwitcherForm(winHook)) using (var concentrationForm = new ConcentrationForm(winHook)) using (var popupWindows = new PopupWindows()) using (var pushback = new Pushback()) using (var arranger = new WindowArranger()) using (var experimental = new ReferenceWindow(winHook)) using (var hotKeys = new HotkeyCore()) { // General features hotKeys.Bind(new[] { Keys.LWin, Keys.Tab }, switcherForm.Toggle); hotKeys.Bind(new[] { Keys.LShiftKey, Keys.F12 }, concentrationForm.Toggle); hotKeys.Bind(new[] { Keys.RShiftKey, Keys.F12 }, concentrationForm.Toggle); hotKeys.Bind(new[] { Keys.LWin, Keys.Space }, popupWindows.ToggleVisibility); hotKeys.Bind(new[] { Keys.LControlKey, Keys.LWin, Keys.Space }, popupWindows.ToggleFade); hotKeys.Bind(new[] { Keys.LWin, Keys.Escape }, pushback.PushBackFrontWindow); // re-arrangement of top-window that breaks less things than the Windows built-in hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D1 }, arranger.SetTopLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D2 }, arranger.SetTop); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D3 }, arranger.SetTopRight); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D4 }, arranger.SetLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D5 }, arranger.SetCentre); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D6 }, arranger.SetRight); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D7 }, arranger.SetBottomLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D8 }, arranger.SetBottom); hotKeys.Bind(new[] { Keys.LWin, Keys.LControlKey, Keys.D9 }, arranger.SetBottomRight); // win-arrow to move screen hotKeys.Bind(new[] { Keys.LWin, Keys.Left }, arranger.MoveScreenLeft); hotKeys.Bind(new[] { Keys.LWin, Keys.Up }, arranger.MoveScreenUp); hotKeys.Bind(new[] { Keys.LWin, Keys.Right }, arranger.MoveScreenRight); hotKeys.Bind(new[] { Keys.LWin, Keys.Down }, arranger.MoveScreenDown); // Reference window hotKeys.Bind(new[] { Keys.LWin, Keys.OemMinus }, experimental.SetReferenceWindow); TrayIcon = new NotifyTrayApp("Windows Jedi", Resources.JediIcon, "https://github.com/i-e-b/WindowsJedi"); TrayIcon.AddMenuItem("Settings", delegate { new Settings().ShowDialog(); }); TrayIcon.AddMenuItem("Re-type file", delegate { new FileRetypeChooser().Show(); }); TrayIcon.AddMenuItem("Screen Capture to GIF", delegate { new ScreenCaptureForm().Show(); }); Application.ThreadException += Application_ThreadException; Application.Run(); } ShellEventsDelegateForm.Dispose(); } }
void CreateArranger(SplashScreenOwner parentContainer, SplashScreenLocation childLocation) { arranger = new WindowArranger(parentContainer, childLocation); arranger.ParentClosed += OnParentWindowClosed; arranger.AttachChild(this); }
void ReleaseArranger() { if(arranger != null) { arranger.ParentClosed -= OnParentWindowClosed; arranger.Release(); arranger = null; } }