Skip to content
This repository has been archived by the owner on Sep 6, 2021. It is now read-only.

Commit

Permalink
Merge pull request #7038 from SAPlayer/improve-close-others
Browse files Browse the repository at this point in the history
Improvements to Close Others
  • Loading branch information
JeffryBooher committed Mar 4, 2014
2 parents 14822dc + 1688a01 commit 1ee81ee
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 55 deletions.
137 changes: 87 additions & 50 deletions src/extensions/default/CloseOthers/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,28 +27,37 @@
define(function (require, exports, module) {
"use strict";

var Menus = brackets.getModule("command/Menus"),
CommandManager = brackets.getModule("command/CommandManager"),
Commands = brackets.getModule("command/Commands"),
dm = brackets.getModule("document/DocumentManager"),
docCH = brackets.getModule("document/DocumentCommandHandlers"),
strings = brackets.getModule("i18n!nls/strings"),
settings = JSON.parse(require("text!settings.json")),
working_set_cmenu = Menus.getContextMenu(Menus.ContextMenuIds.WORKING_SET_MENU),
close_others = "file.close_others",
close_above = "file.close_above",
close_below = "file.close_below";
var Menus = brackets.getModule("command/Menus"),
CommandManager = brackets.getModule("command/CommandManager"),
Commands = brackets.getModule("command/Commands"),
DocumentManager = brackets.getModule("document/DocumentManager"),
Strings = brackets.getModule("strings"),
workingSetCmenu = Menus.getContextMenu(Menus.ContextMenuIds.WORKING_SET_MENU),
PreferencesManager = brackets.getModule("preferences/PreferencesManager");

// Constants
var closeOthers = "file.close_others",
closeAbove = "file.close_above",
closeBelow = "file.close_below";

// Global vars and preferences
var commandsRegistered = false,
menuEntriesShown = {},
prefs = PreferencesManager.getExtensionPrefs("closeOthers");
prefs.definePreference("below", "boolean", true);
prefs.definePreference("others", "boolean", true);
prefs.definePreference("above", "boolean", true);

function handleClose(mode) {

var targetIndex = dm.findInWorkingSet(dm.getCurrentDocument().file.fullPath),
workingSet = dm.getWorkingSet().slice(0),
start = (mode === close_below) ? (targetIndex + 1) : 0,
end = (mode === close_above) ? (targetIndex) : (workingSet.length),
files = [],
var targetIndex = DocumentManager.findInWorkingSet(DocumentManager.getCurrentDocument().file.fullPath),
workingSet = DocumentManager.getWorkingSet().slice(0),
start = (mode === closeBelow) ? (targetIndex + 1) : 0,
end = (mode === closeAbove) ? (targetIndex) : (workingSet.length),
files = [],
i;

if (mode === close_others) {
if (mode === closeOthers) {
end--;
workingSet.splice(targetIndex, 1);
}
Expand All @@ -60,54 +69,82 @@ define(function (require, exports, module) {
CommandManager.execute(Commands.FILE_CLOSE_LIST, {fileList: files});
}

function _currentDocChangedHandler() {
var doc = dm.getCurrentDocument();
function _contextMenuOpenHandler() {
var doc = DocumentManager.getCurrentDocument();

if (doc) {
var docIndex = dm.findInWorkingSet(doc.file.fullPath),
workingSet = dm.getWorkingSet().slice(0);
var docIndex = DocumentManager.findInWorkingSet(doc.file.fullPath),
workingSet = DocumentManager.getWorkingSet().slice(0);

if (docIndex === workingSet.length - 1) { // hide "Close Others Below" when the last file in Working Files is selected
CommandManager.get(close_below).setEnabled(false);
if (docIndex === workingSet.length - 1) { // hide "Close Others Below" if the last file in Working Files is selected
CommandManager.get(closeBelow).setEnabled(false);
} else {
CommandManager.get(close_below).setEnabled(true);
CommandManager.get(closeBelow).setEnabled(true);
}

if (workingSet.length === 1) { // hide "Close Others" when there is only one file in Working Files
CommandManager.get(close_others).setEnabled(false);
if (workingSet.length === 1) { // hide "Close Others" if there is only one file in Working Files
CommandManager.get(closeOthers).setEnabled(false);
} else {
CommandManager.get(close_others).setEnabled(true);
CommandManager.get(closeOthers).setEnabled(true);
}

if (docIndex === 0) { // hide "Close Others Above" when the first file in Working Files is selected
CommandManager.get(close_above).setEnabled(false);
if (docIndex === 0) { // hide "Close Others Above" if the first file in Working Files is selected
CommandManager.get(closeAbove).setEnabled(false);
} else {
CommandManager.get(close_above).setEnabled(true);
CommandManager.get(closeAbove).setEnabled(true);
}
}
}

if (settings.close_below) {
CommandManager.register(strings.CMD_FILE_CLOSE_BELOW, close_below, function () {
handleClose(close_below);
});
working_set_cmenu.addMenuItem(close_below, "", Menus.AFTER, Commands.FILE_CLOSE);
function prefChangeHandler() {
// it's senseless to look prefs up for the current file, instead look them up for
// the current project (or globally)
var prefCloseBelow = prefs.get("below", PreferencesManager.CURRENT_PROJECT),
prefCloseOthers = prefs.get("others", PreferencesManager.CURRENT_PROJECT),
prefCloseAbove = prefs.get("above", PreferencesManager.CURRENT_PROJECT);

if (!commandsRegistered && (prefCloseBelow || prefCloseOthers || prefCloseAbove)) {
CommandManager.register(Strings.CMD_FILE_CLOSE_BELOW, closeBelow, function () {
handleClose(closeBelow);
});
CommandManager.register(Strings.CMD_FILE_CLOSE_OTHERS, closeOthers, function () {
handleClose(closeOthers);
});
CommandManager.register(Strings.CMD_FILE_CLOSE_ABOVE, closeAbove, function () {
handleClose(closeAbove);
});
commandsRegistered = true;
}

if (prefCloseBelow !== menuEntriesShown.closeBelow) {
if (prefCloseBelow) {
workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE);
} else {
workingSetCmenu.removeMenuItem(closeBelow);
}
}
if (prefCloseOthers !== menuEntriesShown.closeOthers) {
if (prefCloseOthers) {
workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE);
} else {
workingSetCmenu.removeMenuItem(closeOthers);
}
}
if (prefCloseAbove !== menuEntriesShown.closeAbove) {
if (prefCloseAbove) {
workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE);
} else {
workingSetCmenu.removeMenuItem(closeAbove);
}
}
menuEntriesShown = {"closeBelow": prefCloseBelow, "closeOthers": prefCloseOthers, "closeAbove": prefCloseAbove};
}

if (settings.close_others) {
CommandManager.register(strings.CMD_FILE_CLOSE_OTHERS, close_others, function () {
handleClose(close_others);
});
working_set_cmenu.addMenuItem(close_others, "", Menus.AFTER, Commands.FILE_CLOSE);
}
// Initialize using the prefs
prefChangeHandler();

if (settings.close_above) {
CommandManager.register(strings.CMD_FILE_CLOSE_ABOVE, close_above, function () {
handleClose(close_above);
});
working_set_cmenu.addMenuItem(close_above, "", Menus.AFTER, Commands.FILE_CLOSE);
}
// Add a context menu open handler
$(workingSetCmenu).on("beforeContextMenuOpen", _contextMenuOpenHandler);

// Add a document change handler
$(dm).on("currentDocumentChange", _currentDocChangedHandler);
});
prefs.on("change", prefChangeHandler);
});
5 changes: 0 additions & 5 deletions src/extensions/default/CloseOthers/settings.json

This file was deleted.

0 comments on commit 1ee81ee

Please sign in to comment.