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

This fixes 2 issues when changing the Close Other Preferences #7088

Merged
merged 3 commits into from
Mar 18, 2014
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 77 additions & 37 deletions src/extensions/default/CloseOthers/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,19 @@ define(function (require, exports, module) {
closeBelow = "file.close_below";

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

prefs.definePreference("below", "boolean", true);
prefs.definePreference("others", "boolean", true);
prefs.definePreference("above", "boolean", true);

prefs.definePreference("above", "boolean", true);


/**
* Handle the different Close Other commands
* @param {string} mode
*/
function handleClose(mode) {

var targetIndex = DocumentManager.findInWorkingSet(DocumentManager.getCurrentDocument().file.fullPath),
workingSet = DocumentManager.getWorkingSet().slice(0),
start = (mode === closeBelow) ? (targetIndex + 1) : 0,
Expand All @@ -68,8 +72,11 @@ define(function (require, exports, module) {

CommandManager.execute(Commands.FILE_CLOSE_LIST, {fileList: files});
}

function _contextMenuOpenHandler() {

/**
* Enable/Disable the menu items depending on which document is selected in the working set
*/
function contextMenuOpenHandler() {
var doc = DocumentManager.getCurrentDocument();

if (doc) {
Expand All @@ -95,56 +102,89 @@ define(function (require, exports, module) {
}
}
}

function prefChangeHandler() {
// it's senseless to look prefs up for the current file, instead look them up for


/**
* Returns the preferences used to add/remove the menu items
* @return {{closeBelow: boolean, closeOthers: boolean, closeAbove: boolean}}
*/
function getPreferences() {
// 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;
}
return {
closeBelow : prefs.get("below", PreferencesManager.CURRENT_PROJECT),
closeOthers : prefs.get("others", PreferencesManager.CURRENT_PROJECT),
closeAbove : prefs.get("above", PreferencesManager.CURRENT_PROJECT)
};
}

/**
* When the preferences changed, add/remove the required menu items
*/
function prefChangeHandler() {
var prefs = getPreferences();

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

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

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

menuEntriesShown = prefs;
}

/**
* Register the Commands and add the Menu Items, if required
*/
function initializeCommands() {
var prefs = getPreferences();

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);
});

if (prefs.closeBelow) {
workingSetCmenu.addMenuItem(closeBelow, "", Menus.AFTER, Commands.FILE_CLOSE);
}
if (prefs.closeOthers) {
workingSetCmenu.addMenuItem(closeOthers, "", Menus.AFTER, Commands.FILE_CLOSE);
}
if (prefs.closeAbove) {
workingSetCmenu.addMenuItem(closeAbove, "", Menus.AFTER, Commands.FILE_CLOSE);
}
menuEntriesShown = prefs;
}


// Initialize using the prefs
prefChangeHandler();
initializeCommands();

// Add a context menu open handler
$(workingSetCmenu).on("beforeContextMenuOpen", _contextMenuOpenHandler);
$(workingSetCmenu).on("beforeContextMenuOpen", contextMenuOpenHandler);

prefs.on("change", prefChangeHandler);
});