main.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. const { CompositeDisposable, Emitter } = require('atom');
  2. const Grim = require('grim');
  3. const StatusBarView = require('./status-bar-view');
  4. const FileInfoView = require('./file-info-view');
  5. const CursorPositionView = require('./cursor-position-view');
  6. const SelectionCountView = require('./selection-count-view');
  7. const GitView = require('./git-view');
  8. const LaunchModeView = require('./launch-mode-view');
  9. module.exports = {
  10. activate() {
  11. this.emitters = new Emitter();
  12. this.subscriptions = new CompositeDisposable();
  13. this.statusBar = new StatusBarView();
  14. this.attachStatusBar();
  15. this.subscriptions.add(atom.config.onDidChange('status-bar.fullWidth', () => {
  16. this.attachStatusBar();
  17. })
  18. );
  19. this.updateStatusBarVisibility();
  20. this.statusBarVisibilitySubscription =
  21. atom.config.observe('status-bar.isVisible', () => {
  22. this.updateStatusBarVisibility();
  23. });
  24. atom.commands.add('atom-workspace', 'status-bar:toggle', () => {
  25. if (this.statusBarPanel.isVisible()) {
  26. atom.config.set('status-bar.isVisible', false);
  27. } else {
  28. atom.config.set('status-bar.isVisible', true);
  29. }
  30. });
  31. const { safeMode, devMode } = atom.getLoadSettings();
  32. if (safeMode || devMode) {
  33. const launchModeView = new LaunchModeView({safeMode, devMode});
  34. this.statusBar.addLeftTile({item: launchModeView.element, priority: -1});
  35. }
  36. this.fileInfo = new FileInfoView();
  37. this.statusBar.addLeftTile({item: this.fileInfo.element, priority: 0});
  38. this.cursorPosition = new CursorPositionView();
  39. this.statusBar.addLeftTile({item: this.cursorPosition.element, priority: 1});
  40. this.selectionCount = new SelectionCountView();
  41. this.statusBar.addLeftTile({item: this.selectionCount.element, priority: 2});
  42. this.gitInfo = new GitView();
  43. this.gitInfoTile = this.statusBar.addRightTile({item: this.gitInfo.element, priority: 0});
  44. },
  45. deactivate() {
  46. this.statusBarVisibilitySubscription?.dispose();
  47. this.statusBarVisibilitySubscription = null;
  48. this.gitInfo?.destroy();
  49. this.gitInfo = null;
  50. this.fileInfo?.destroy();
  51. this.fileInfo = null;
  52. this.cursorPosition?.destroy();
  53. this.cursorPosition = null;
  54. this.selectionCount?.destroy();
  55. this.selectionCount = null;
  56. this.statusBarPanel?.destroy();
  57. this.statusBarPanel = null;
  58. this.statusBar?.destroy();
  59. this.statusBar = null;
  60. this.subscriptions?.dispose();
  61. this.subscriptions = null;
  62. this.emitters?.dispose();
  63. this.emitters = null;
  64. if (atom.__workspaceView != null) { delete atom.__workspaceView.statusBar; }
  65. },
  66. updateStatusBarVisibility() {
  67. if (atom.config.get('status-bar.isVisible')) {
  68. this.statusBarPanel.show();
  69. } else {
  70. this.statusBarPanel.hide();
  71. }
  72. },
  73. provideStatusBar() {
  74. return {
  75. addLeftTile: this.statusBar.addLeftTile.bind(this.statusBar),
  76. addRightTile: this.statusBar.addRightTile.bind(this.statusBar),
  77. getLeftTiles: this.statusBar.getLeftTiles.bind(this.statusBar),
  78. getRightTiles: this.statusBar.getRightTiles.bind(this.statusBar),
  79. disableGitInfoTile: this.gitInfoTile.destroy.bind(this.gitInfoTile)
  80. };
  81. },
  82. attachStatusBar() {
  83. if (this.statusBarPanel != null) { this.statusBarPanel.destroy(); }
  84. const panelArgs = {item: this.statusBar, priority: 0};
  85. if (atom.config.get('status-bar.fullWidth')) {
  86. this.statusBarPanel = atom.workspace.addFooterPanel(panelArgs);
  87. } else {
  88. this.statusBarPanel = atom.workspace.addBottomPanel(panelArgs);
  89. }
  90. },
  91. // Deprecated
  92. //
  93. // Wrap deprecation calls on the methods returned rather than
  94. // Services API method which would be registered and trigger
  95. // a deprecation call
  96. legacyProvideStatusBar() {
  97. const statusbar = this.provideStatusBar();
  98. return {
  99. addLeftTile(...args) {
  100. Grim.deprecate("Use version ^1.0.0 of the status-bar Service API.");
  101. statusbar.addLeftTile(...args);
  102. },
  103. addRightTile(...args) {
  104. Grim.deprecate("Use version ^1.0.0 of the status-bar Service API.");
  105. statusbar.addRightTile(...args);
  106. },
  107. getLeftTiles() {
  108. Grim.deprecate("Use version ^1.0.0 of the status-bar Service API.");
  109. statusbar.getLeftTiles();
  110. },
  111. getRightTiles() {
  112. Grim.deprecate("Use version ^1.0.0 of the status-bar Service API.");
  113. statusbar.getRightTiles();
  114. }
  115. };
  116. }
  117. };