TaskManager.swift 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * Copyright (c) 2024, Tim Flynn <trflynn89@serenityos.org>
  3. * Copyright (c) 2024, Andrew Kaster <akaster@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. import Foundation
  8. import Ladybird.WebView
  9. import Ladybird.WebViewApplication
  10. import SwiftUI
  11. public class TaskManager: NSWindow {
  12. private let WINDOW_WIDTH: CGFloat = 600
  13. private let WINDOW_HEIGHT: CGFloat = 400
  14. var web_view: LadybirdWebView
  15. private var timer: Timer?
  16. init() {
  17. let tab_rect = NSApplication.shared.keyWindow!.frame
  18. let position_x = tab_rect.origin.x + (tab_rect.size.width - WINDOW_WIDTH) / 2
  19. let position_y = tab_rect.origin.y + (tab_rect.size.height - WINDOW_HEIGHT) / 2
  20. let window_rect = NSMakeRect(position_x, position_y, WINDOW_WIDTH, WINDOW_HEIGHT)
  21. let style_mask = NSWindow.StyleMask.init(arrayLiteral: [
  22. NSWindow.StyleMask.titled, NSWindow.StyleMask.closable, NSWindow.StyleMask.miniaturizable,
  23. NSWindow.StyleMask.resizable,
  24. ])
  25. self.web_view = LadybirdWebView.init(nil)
  26. super.init(
  27. contentRect: window_rect, styleMask: style_mask, backing: NSWindow.BackingStoreType.buffered,
  28. defer: false)
  29. self.timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] timer in
  30. if let strong_self = self {
  31. strong_self.updateStatistics()
  32. }
  33. }
  34. self.web_view.postsBoundsChangedNotifications = true
  35. let scroll_view = NSScrollView()
  36. scroll_view.hasVerticalScroller = true
  37. scroll_view.hasHorizontalScroller = true
  38. scroll_view.lineScroll = 24
  39. scroll_view.contentView = self.web_view
  40. scroll_view.documentView = NSView()
  41. self.contentView = scroll_view
  42. self.title = "Task Manager"
  43. self.setIsVisible(true)
  44. self.updateStatistics()
  45. }
  46. func updateStatistics() {
  47. WebView.Application.the().update_process_statistics();
  48. self.web_view.loadHTML(WebView.Application.the().generate_process_statistics_html().__bytes_as_string_viewUnsafe());
  49. }
  50. }