Skip to content
Snippets Groups Projects
main.js 19.7 KiB
Newer Older
Torge Kummerow's avatar
Torge Kummerow committed
/*******************************************************************************
 * Better Quick Tiles KWin script
 *
 * This script will allow cyclign through mutliple sizes for each shortcut key
 *
 ******************************************************************************/

/**
 * Holds all modes the window can be in.
 */
var MODES = {
	FLOATING			: 0, //Any position/size not matching those below

	UP_LEFT_ONE_THIRD 	: 1, 	//x = 0, 	y = 0, 		w = 33%, 	h=50%
	UP_LEFT_HALF 		: 2, 	//x = 0, 	y = 0, 		w = 50%, 	h=50%
	UP_LEFT_TWO_THIRD 	: 3, 	//x = 0, 	y = 0, 		w = 66%, 	h=50%

	UP_CENTER_CENTER 	: 4, 	//x = 33%, 	y = 0, 		w = 33%, 	h=50%
	UP_CENTER_FULL 		: 5, 	//x = 0, 	y = 0, 		w = 100%, 	h=50%

	UP_RIGHT_ONE_THIRD 	: 6, 	//x = 66%, 	y = 0, 		w = 33%, 	h=50%
Torge Kummerow's avatar
Torge Kummerow committed
	UP_RIGHT_HALF 		: 7, 	//x = 50%,	y = 0, 		w = 50%, 	h=50%
	UP_RIGHT_TWO_THIRD 	: 8, 	//x = 33%, 	y = 0, 		w = 66%, 	h=50%

	RIGHT_ONE_THIRD 	: 9, 	//x = 66%, 	y = 0, 		w = 33%, 	h=100%
	RIGHT_HALF 			: 10, 	//x = 50%, 	y = 0, 		w = 50%, 	h=100%
	RIGHT_TWO_THIRD 	: 11, 	//x = 33%, 	y = 0, 		w = 66%, 	h=100%

	CENTER_CENTER 		: 12, 	//x = 33%, 	y = 0, 		w = 33%, 	h=100%
	CENTER_FULL 		: 13, 	//x = 0, 	y = 0, 		w = 100%, 	h=100%

	LEFT_ONE_THIRD 		: 14, 	//x = 0, 	y = 0, 		w = 33%, 	h=100%
	LEFT_HALF 			: 15, 	//x = 0, 	y = 0, 		w = 50%, 	h=100%
	LEFT_TWO_THIRD 		: 16, 	//x = 0, 	y = 0, 		w = 66%, 	h=100%

	DOWN_LEFT_ONE_THIRD : 17, 	//x = 0, 	y = 50%, 	w = 33%, 	h=50%
	DOWN_LEFT_HALF 		: 18, 	//x = 0,	y = 50%, 	w = 50%, 	h=50%
	DOWN_LEFT_TWO_THIRD : 19, 	//x = 0, 	y = 50%, 	w = 66%, 	h=50%

	DOWN_CENTER_CENTER 	: 20, 	//x = 33%, 	y = 50%, 	w = 33%, 	h=50%
	DOWN_CENTER_FULL 	: 21, 	//x = 0, 	y = 50%, 	w = 100%, 	h=50%

	DOWN_RIGHT_ONE_THIRD : 22, 	//x = 66%, 	y = 50%, 	w = 33%, 	h=50%
	DOWN_RIGHT_HALF 	 : 23, 	//x = 50%, 	y = 50%, 	w = 50%, 	h=50%
	DOWN_RIGHT_TWO_THIRD : 24 	//x = 33%, 	y = 50%, 	w = 66%, 	h=50%
};


/**
 * Holds all gird points and sizes (beside left and upper edge which are always 0)
 *
 * updateToCurrentScreen needs to be called to update these points.
 */
var Grid = {
	oneThirdX 	: null,
	halfX 		: null,
	twoThirdX 	: null,

	halfY 		: null,

	oneThirdW 	: null,
    halfW 		: null,
	twoThirdW 	: null,
	fullW 		: null,

	halfH 		: null,
	fullH 		: null,
Torge Kummerow's avatar
Torge Kummerow committed
	/**
	 * Updates the points and sizes based on the current active screen
	 *
     * Modify this, if you want to move the grid borders
	 */
	updateToCurrentScreen : function () {
		var screenBounds = BQT.getActiveScreenBounds();
Torge Kummerow's avatar
Torge Kummerow committed
		
		print("Screen bounds: "+screenBounds.x+"/"+screenBounds.y+"/"+screenBounds.width+"/"+screenBounds.height);
Torge Kummerow's avatar
Torge Kummerow committed
		this.oneThirdX 	= Math.floor(screenBounds.width/3);
		this.halfX 		= Math.floor(screenBounds.width/2);
		this.twoThirdX 	= Math.floor(screenBounds.width/3*2);
Torge Kummerow's avatar
Torge Kummerow committed

Torge Kummerow's avatar
Torge Kummerow committed
		this.halfY 		= Math.floor(screenBounds.height/2);
Torge Kummerow's avatar
Torge Kummerow committed

Torge Kummerow's avatar
Torge Kummerow committed
		this.oneThirdW 	= Math.floor(screenBounds.width/3);
        this.halfW 		= Math.floor(screenBounds.width/2);
		this.twoThirdW 	= Math.floor(screenBounds.width/3*2);
Torge Kummerow's avatar
Torge Kummerow committed
		this.fullW 		= screenBounds.width;

Torge Kummerow's avatar
Torge Kummerow committed
		this.halfH 		= Math.floor(screenBounds.height/2);
Torge Kummerow's avatar
Torge Kummerow committed
		this.fullH 		= screenBounds.height;
Torge Kummerow's avatar
Torge Kummerow committed
		
		print("Grid params: ");
		print("oneThirdX: "+this.oneThirdX);
		print("halfX: "+this.halfX);
		print("halfY: "+this.halfY);
		print("oneThirdW: "+this.oneThirdW);
		print("halfW: "+this.halfW);
		print("twoThirdW: "+this.twoThirdW);
		print("fullW: "+this.fullW);
		print("halfH: "+this.halfH);
		print("fullH: "+this.fullH);
Torge Kummerow's avatar
Torge Kummerow committed
	}
};


/**
 * Main object for Better Quick Tile plugin
 */
var BQT = {

	init : function() {
        print("Initializing");
Torge Kummerow's avatar
Torge Kummerow committed
		this.registerShortcuts();
	},
Torge Kummerow's avatar
Torge Kummerow committed
	/**
	 * Registers all shortcuts this extension does provide
	 */
	registerShortcuts : function() {
        print("Registering shortcuts");
Torge Kummerow's avatar
Torge Kummerow committed
		var shortcutPrefix = "Better Quick Tiles ";
Torge Kummerow's avatar
Torge Kummerow committed
		registerShortcut(shortcutPrefix + "Up Left", shortcutPrefix + "Up Left", "Meta+Num+7", ShortCutFunctions.upLeft);
		registerShortcut(shortcutPrefix + "Up Center", shortcutPrefix + "Up Center", "Meta+Num+8", ShortCutFunctions.upCenter);
		registerShortcut(shortcutPrefix + "Up Right", shortcutPrefix + "Up Right", "Meta+Num+9", ShortCutFunctions.upRight);
		registerShortcut(shortcutPrefix + "Left", shortcutPrefix + "Left", "Meta+Num+4", ShortCutFunctions.left);
		registerShortcut(shortcutPrefix + "Center", shortcutPrefix + "Center", "Meta+Num+5", ShortCutFunctions.center);
		registerShortcut(shortcutPrefix + "Right", shortcutPrefix + "Right", "Meta+Num+6", ShortCutFunctions.right);
		registerShortcut(shortcutPrefix + "Down Left", shortcutPrefix + "Down Left", "Meta+Num+1", ShortCutFunctions.downLeft);
		registerShortcut(shortcutPrefix + "Down Center", shortcutPrefix + "Down Center", "Meta+Num+2", ShortCutFunctions.downCenter);
		registerShortcut(shortcutPrefix + "Down Right", shortcutPrefix + "Down Right", "Meta+Num+3", ShortCutFunctions.downRight);

        print("Shortcuts registered")
Torge Kummerow's avatar
Torge Kummerow committed
	},

	/**
	 *	Get the bounds of the currently active window relative to the screen it is on.
	 *
	 *	@returns: QRect containing x,y, width and height fields
	 */
	getActiveWindowBounds : function() {
		var activeWindowBounds = workspace.activeClient.frameGeometry;
Torge Kummerow's avatar
Torge Kummerow committed
		//Substract the relative screen position (Multi screen support)
	    var screenBounds = this.getActiveScreenBounds();
Torge Kummerow's avatar
Torge Kummerow committed
	    activeWindowBounds.x -= screenBounds.x;
	    activeWindowBounds.y -= screenBounds.y;

	    return activeWindowBounds;
	},

	/**
	*	Get the bounds of the screen the currently active window is on
Torge Kummerow's avatar
Torge Kummerow committed
	* 	@returns: QRect containing x,y, width and height fields
 	*/
	getActiveScreenBounds : function() {
		return workspace.clientArea(KWin.PlacementArea, workspace.activeScreen, workspace.Desktop);
	},

	/**
	 *  Get the window position mode, the window is currently in.
Torge Kummerow's avatar
Torge Kummerow committed
	 *  If it is in no predefine mode the value modes.FLOATING will be returned
Torge Kummerow's avatar
Torge Kummerow committed
	 *  @returns: integer One of the values in the variable modes
	 */
	getMode : function() {
        print("getMode called");
Torge Kummerow's avatar
Torge Kummerow committed
		var windowBounds = this.getActiveWindowBounds();
Torge Kummerow's avatar
Torge Kummerow committed
		
		print("Window bounds: "+windowBounds.x+"/"+windowBounds.y+"/"+windowBounds.height+"/"+windowBounds.width);
Torge Kummerow's avatar
Torge Kummerow committed
		//Getting possible modes due to the windows' X position

        print("Determining current mode");

Torge Kummerow's avatar
Torge Kummerow committed
		var possibleModesX = [];
Torge Kummerow's avatar
Torge Kummerow committed
		if (windowBounds.x == 0) {
			possibleModesX.push(MODES.UP_LEFT_HALF);
			possibleModesX.push(MODES.UP_LEFT_ONE_THIRD);
			possibleModesX.push(MODES.UP_LEFT_TWO_THIRD);
			possibleModesX.push(MODES.UP_CENTER_FULL);
			possibleModesX.push(MODES.LEFT_HALF);
			possibleModesX.push(MODES.LEFT_ONE_THIRD);
			possibleModesX.push(MODES.LEFT_TWO_THIRD);
			possibleModesX.push(MODES.CENTER_FULL);
			possibleModesX.push(MODES.DOWN_LEFT_HALF);
			possibleModesX.push(MODES.DOWN_LEFT_ONE_THIRD);
			possibleModesX.push(MODES.DOWN_LEFT_TWO_THIRD);
			possibleModesX.push(MODES.DOWN_CENTER_FULL);
		}
		else if (windowBounds.x == Grid.oneThirdX) {
			possibleModesX.push(MODES.UP_RIGHT_TWO_THIR);
			possibleModesX.push(MODES.UP_CENTER_CENTER);
			possibleModesX.push(MODES.RIGHT_TWO_THIRD);
			possibleModesX.push(MODES.CENTER_CENTER);
			possibleModesX.push(MODES.DOWN_RIGHT_TWO_THIRD);
			possibleModesX.push(MODES.DOWN_CENTER_CENTER);
		}
		else if (windowBounds.x == Grid.halfX) {
			possibleModesX.push(MODES.UP_RIGHT_HALF);
			possibleModesX.push(MODES.RIGHT_HALF);
			possibleModesX.push(MODES.DOWN_RIGHT_HALF);
		}
		else if (windowBounds.x == Grid.twoThirdX) {
			possibleModesX.push(MODES.UP_RIGHT_ONE_THIRD);
			possibleModesX.push(MODES.RIGHT_ONE_THIRD);
			possibleModesX.push(MODES.DOWN_RIGHT_ONE_THIRD);
		}

		if (possibleModesX.length == 0) {
			//X value is not maching any mode. Window is "floating"
			return MODES.FLOATING;
		}

		print("Possible modes found for X");
Torge Kummerow's avatar
Torge Kummerow committed


		//Getting possible modes due to the windows' Y position'
Torge Kummerow's avatar
Torge Kummerow committed
		var possibleModesY = [];
Torge Kummerow's avatar
Torge Kummerow committed
		if (windowBounds.y == 0) {
			possibleModesY.push(MODES.UP_LEFT_HALF);
			possibleModesY.push(MODES.UP_LEFT_ONE_THIRD);
			possibleModesY.push(MODES.UP_LEFT_TWO_THIRD);
			possibleModesY.push(MODES.UP_CENTER_CENTER);
			possibleModesY.push(MODES.UP_CENTER_FULL);
			possibleModesY.push(MODES.UP_RIGHT_HALF);
			possibleModesY.push(MODES.UP_RIGHT_ONE_THIRD);
			possibleModesY.push(MODES.UP_RIGHT_TWO_THIRD);
			possibleModesY.push(MODES.LEFT_HALF);
			possibleModesY.push(MODES.LEFT_ONE_THIRD);
			possibleModesY.push(MODES.LEFT_TWO_THIRD);
			possibleModesY.push(MODES.RIGHT_HALF);
			possibleModesY.push(MODES.RIGHT_ONE_THIRD);
			possibleModesY.push(MODES.RIGHT_TWO_THIRD);
			possibleModesY.push(MODES.CENTER_CENTER);
			possibleModesY.push(MODES.CENTER_FULL);
		}
		else if (windowBounds.y == Grid.halfY) {
			possibleModesY.push(MODES.DOWN_LEFT_HALF);
			possibleModesY.push(MODES.DOWN_LEFT_ONE_THIRD);
			possibleModesY.push(MODES.DOWN_LEFT_TWO_THIRD);
			possibleModesY.push(MODES.DOWN_CENTER_CENTER);
			possibleModesY.push(MODES.DOWN_CENTER_FULL);
			possibleModesY.push(MODES.DOWN_RIGHT_HALF);
			possibleModesY.push(MODES.DOWN_RIGHT_ONE_THIRD);
			possibleModesY.push(MODES.DOWN_RIGHT_TWO_THIRD);
		}

		if (possibleModesY.length == 0) {
			//Y value is not maching any mode. Window is "floating"
			return MODES.FLOATING;
		}


		//Getting possible modes due to the windows' width
Torge Kummerow's avatar
Torge Kummerow committed
		var possibleModesW = [];
Torge Kummerow's avatar
Torge Kummerow committed
		if (windowBounds.width == Grid.oneThirdW) {
			possibleModesW.push(MODES.UP_LEFT_ONE_THIRD);
			possibleModesW.push(MODES.UP_CENTER_CENTER);
			possibleModesW.push(MODES.UP_RIGHT_ONE_THIRD);
			possibleModesW.push(MODES.RIGHT_ONE_THIRD);
			possibleModesW.push(MODES.CENTER_CENTER);
			possibleModesW.push(MODES.LEFT_ONE_THIRD);
			possibleModesW.push(MODES.DOWN_LEFT_ONE_THIRD);
			possibleModesW.push(MODES.DOWN_CENTER_CENTER);
			possibleModesW.push(MODES.DOWN_RIGHT_ONE_THIRD);
		}
		else if (windowBounds.width == Grid.halfW) {
			possibleModesW.push(MODES.UP_LEFT_HALF);
			possibleModesW.push(MODES.UP_RIGHT_HALF);
			possibleModesW.push(MODES.LEFT_HALF);
			possibleModesW.push(MODES.RIGHT_HALF);
			possibleModesW.push(MODES.DOWN_LEFT_HALF);
			possibleModesW.push(MODES.DOWN_RIGHT_HALF);
		}
		else if (windowBounds.width == Grid.twoThirdW) {
			possibleModesW.push(MODES.UP_LEFT_TWO_THIRD);
			possibleModesW.push(MODES.UP_RIGHT_TWO_THIRD);
			possibleModesW.push(MODES.LEFT_TWO_THIRD);
			possibleModesW.push(MODES.RIGHT_TWO_THIRD);
			possibleModesW.push(MODES.DOWN_LEFT_TWO_THIRD);
			possibleModesW.push(MODES.DOWN_RIGHT_TWO_THIRD);
		}
		else if (windowBounds.width == Grid.fullW) {
			possibleModesW.push(MODES.UP_CENTER_FULL);
			possibleModesW.push(MODES.CENTER_FULL);
			possibleModesW.push(MODES.DOWN_CENTER_FULL);
		}

		if (possibleModesW.length == 0) {
			//Width value is not maching any mode. Window is "floating"
			return MODES.FLOATING;
		}


		//Getting possible modes due to the windows' height
Torge Kummerow's avatar
Torge Kummerow committed
		var possibleModesH = [];

		if (windowBounds.height == Grid.halfH) {
			possibleModesH.push(MODES.UP_LEFT_ONE_THIRD);
			possibleModesH.push(MODES.UP_LEFT_HALF);
			possibleModesH.push(MODES.UP_LEFT_TWO_THIRD);
			possibleModesH.push(MODES.UP_CENTER_CENTER);
			possibleModesH.push(MODES.UP_CENTER_FULLL);
			possibleModesH.push(MODES.UP_RIGHT_ONE_THIRD);
			possibleModesH.push(MODES.UP_RIGHT_HALF);
			possibleModesH.push(MODES.UP_RIGHT_TWO_THIRD);
			possibleModesH.push(MODES.DOWN_LEFT_ONE_THIRD);
			possibleModesH.push(MODES.DOWN_LEFT_HALF);
			possibleModesH.push(MODES.DOWN_LEFT_TWO_THIRD);
			possibleModesH.push(MODES.DOWN_CENTER_CENTER);
			possibleModesH.push(MODES.DOWN_CENTER_FULL);
			possibleModesH.push(MODES.DOWN_RIGHT_ONE_THIRD);
			possibleModesH.push(MODES.DOWN_RIGHT_HALF);
			possibleModesH.push(MODES.DOWN_RIGHT_TWO_THIRD);
		}
		else if (windowBounds.height == Grid.fullH) {
			possibleModesH.push(MODES.LEFT_ONE_THIRD);
			possibleModesH.push(MODES.LEFT_HALF);
			possibleModesH.push(MODES.LEFT_TWO_THIRD);
			possibleModesH.push(MODES.CENTER_CENTER);
			possibleModesH.push(MODES.CENTER_FULL);
			possibleModesH.push(MODES.RIGHT_ONE_THIRD);
			possibleModesH.push(MODES.RIGHT_HALF);
			possibleModesH.push(MODES.RIGHT_TWO_THIRD);
		}

		if (possibleModesH.length == 0) {
			//Height value is not maching any mode. Window is "floating"
			return MODES.FLOATING;
		}

Torge Kummerow's avatar
Torge Kummerow committed
		//Checking if one mode satisfies all 4 parameters. X, Y, Widht and Height
		for (var ix in possibleModesX) {
			var mode = possibleModesX[ix];

			//Check if this possible mode for the X condition also satisfy the Y, width and height condition. If yes, this is our result.
			if (possibleModesY.indexOf(mode) > -1 && possibleModesW.indexOf(mode) > -1 && possibleModesH.indexOf(mode) > -1)
				return mode;
		}

		//No valid mode found. Window is "floating"
		return MODES.FLOATING;

	},


	/**
	 * Sets the mode for the active window and by that move it to the position for this mode.
Torge Kummerow's avatar
Torge Kummerow committed
     * @param mode: The mode to move the window in
	 *
Torge Kummerow's avatar
Torge Kummerow committed
	 */
	setMode : function(mode) {
        print("Set mode: "+mode);
Torge Kummerow's avatar
Torge Kummerow committed
		var x,y,w,h;

		//Setting sizes based on the given mode.
		switch (mode) {

			case MODES.UP_LEFT_ONE_THIRD 	:	x=0;				y=0;		w=Grid.oneThirdW;	h=Grid.halfH;	break;
			case MODES.UP_LEFT_HALF 		:	x=0;				y=0;		w=Grid.halfW;		h=Grid.halfH;	break;
			case MODES.UP_LEFT_TWO_THIRD 	:	x=0;				y=0;		w=Grid.twoThirdW;	h=Grid.halfH;	break;

			case MODES.UP_CENTER_CENTER 	:	x=Grid.oneThirdX;	y=0;		w=Grid.oneThirdW;	h=Grid.halfH;	break;
			case MODES.UP_CENTER_FULL 		:	x=0;				y=0;		w=Grid.fullW;		h=Grid.halfH;	break;

			case MODES.UP_RIGHT_ONE_THIRD 	:	x=Grid.twoThirdX;	y=0;		w=Grid.oneThirdW;	h=Grid.halfH;	break;
			case MODES.UP_RIGHT_HALF 		:	x=Grid.halfX;		y=0;		w=Grid.halfW;		h=Grid.halfH;	break;
			case MODES.UP_RIGHT_TWO_THIRD 	:	x=Grid.oneThirdX;	y=0;		w=Grid.twoThirdW;	h=Grid.halfH;	break;

			case MODES.LEFT_ONE_THIRD 		:	x=0;				y=0;		w=Grid.oneThirdW;	h=Grid.fullH;	break;
			case MODES.LEFT_HALF 			:	x=0;				y=0;		w=Grid.halfW;		h=Grid.fullH;	break;
			case MODES.LEFT_TWO_THIRD 		:	x=0;				y=0;		w=Grid.twoThirdW;	h=Grid.fullH;	break;

			case MODES.CENTER_CENTER 		:	x=Grid.oneThirdX;	y=0;		w=Grid.oneThirdW;	h=Grid.fullH;	break;
			case MODES.CENTER_FULL 			:	x=0;				y=0;		w=Grid.fullW;		h=Grid.fullH;	break;

			case MODES.RIGHT_ONE_THIRD 		:	x=Grid.twoThirdX;	y=0;		w=Grid.oneThirdW;	h=Grid.fullH;	break;
			case MODES.RIGHT_HALF 			:	x=Grid.halfX;		y=0;		w=Grid.halfW;		h=Grid.fullH;	break;
			case MODES.RIGHT_TWO_THIRD 		:	x=Grid.oneThirdX;	y=0;		w=Grid.twoThirdW;	h=Grid.fullH;	break;

Torge Kummerow's avatar
Torge Kummerow committed
			case MODES.DOWN_LEFT_ONE_THIRD	:	x=0;				y=Grid.halfY;	w=Grid.oneThirdW;	h=Grid.halfH;	break;
			case MODES.DOWN_LEFT_HALF 		:	x=0;				y=Grid.halfY;	w=Grid.halfW;		h=Grid.halfH;	break;
			case MODES.DOWN_LEFT_TWO_THIRD 	:	x=0;				y=Grid.halfY;	w=Grid.twoThirdW;	h=Grid.halfH;	break;
Torge Kummerow's avatar
Torge Kummerow committed

Torge Kummerow's avatar
Torge Kummerow committed
			case MODES.DOWN_CENTER_CENTER 	:	x=Grid.oneThirdX;	y=Grid.halfY;	w=Grid.oneThirdW;	h=Grid.halfH;	break;
			case MODES.DOWN_CENTER_FULL 	:	x=0;				y=Grid.halfY;	w=Grid.fullW;		h=Grid.halfH;	break;
Torge Kummerow's avatar
Torge Kummerow committed

Torge Kummerow's avatar
Torge Kummerow committed
			case MODES.DOWN_RIGHT_ONE_THIRD :	x=Grid.twoThirdX;	y=Grid.halfY;	w=Grid.oneThirdW;	h=Grid.halfH;	break;
			case MODES.DOWN_RIGHT_HALF 		:	x=Grid.halfX;		y=Grid.halfY;	w=Grid.halfW;		h=Grid.halfH;	break;
			case MODES.DOWN_RIGHT_TWO_THIRD :	x=Grid.oneThirdX;	y=Grid.halfY;	w=Grid.twoThirdW;	h=Grid.halfH;	break;
Torge Kummerow's avatar
Torge Kummerow committed

Torge Kummerow's avatar
Torge Kummerow committed
			default:	break;
Torge Kummerow's avatar
Torge Kummerow committed
		}

Torge Kummerow's avatar
Torge Kummerow committed
		print("New bounds: "+x+"/"+y+"/"+w+"/"+h);

Torge Kummerow's avatar
Torge Kummerow committed
		//Calulating the new window frame geometry relative to the active screen
		var screenBounds = BQT.getActiveScreenBounds();
Torge Kummerow's avatar
Torge Kummerow committed
		var newFrameGeometry =  {
            x: x+screenBounds.x,
            y: y+screenBounds.y,
            width: w,
            height: h
        }
Torge Kummerow's avatar
Torge Kummerow committed
		//Setting the new window geomety
		workspace.activeClient.frameGeometry = newFrameGeometry;
	},


    /**
	 * Updates the window position based on the start mode and the mode mapping for repeated key presses.
     *
	 * It will get the current mode. Then see if this is one of the modes in the nextModeMap.
	 * If that is the case, the mode in the nextModeMap will be appied, if not, the startMode will be applied.
Torge Kummerow's avatar
Torge Kummerow committed
     * @param startMode: The mode the window should be put in, if it is in no valid according to the nextModeMap
	 * @param nextModeMap: The mapping of which mode leads to which next mode on repeated key press.
     *
	 * @returns void
	 */
	updateWindowPosition : function(startMode, nextModeMap) {
        print("Update window position: "+startMode);
Torge Kummerow's avatar
Torge Kummerow committed
		//Update the grid parameters to the currently active screen (Multi monitor support)
		Grid.updateToCurrentScreen();
Torge Kummerow's avatar
Torge Kummerow committed
		//Get the current mode associated with the size and position of the window.
		var currentMode = this.getMode();

        print("Current mode: "+currentMode);

Torge Kummerow's avatar
Torge Kummerow committed
		//See if there is a valid followup mode available for the current mode (Repeated key presses)
		var nextMode = nextModeMap[currentMode];

		if (nextMode == undefined) {
			//No valid followup. Applying start mode
			nextMode = startMode;
		}
Torge Kummerow's avatar
Torge Kummerow committed
		//Moving window to new designated position and size
		BQT.setMode(nextMode);
Torge Kummerow's avatar
Torge Kummerow committed
	}
};


/**
 * All shortcut handlers
 */
var ShortCutFunctions =  {
	upLeft : function() {
        print("Up left pressed");
Torge Kummerow's avatar
Torge Kummerow committed
		//If the window is not in any valid up left position yet,
		//this is the first position the window will be put in
		var startMode = MODES.UP_LEFT_HALF;

		//This is mapping a previous valid position to the next valid one in case of repeated key presses
		var nextModeMap = {};
		nextModeMap[MODES.UP_LEFT_HALF] = MODES.UP_LEFT_ONE_THIRD;
		nextModeMap[MODES.UP_LEFT_ONE_THIRD] = MODES.UP_LEFT_TWO_THIRD;
		nextModeMap[MODES.UP_LEFT_TWO_THIRD] = MODES.UP_LEFT_HALF;

		//Update the window position
		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	upCenter : function() {
		var startMode = MODES.UP_CENTER_CENTER;

		var nextModeMap = {};
		nextModeMap[MODES.UP_CENTER_CENTER] = MODES.UP_CENTER_FULL;
		nextModeMap[MODES.UP_CENTER_FULL] = MODES.UP_CENTER_CENTER;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	upRight : function() {
		var startMode = MODES.UP_RIGHT_HALF;

		var nextModeMap = {};
		nextModeMap[MODES.UP_RIGHT_HALF] = MODES.UP_RIGHT_ONE_THIRD;
		nextModeMap[MODES.UP_RIGHT_ONE_THIRD] = MODES.UP_RIGHT_TWO_THIRD;
		nextModeMap[MODES.UP_RIGHT_TWO_THIRD] = MODES.UP_RIGHT_HALF;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	left : function() {
		var startMode = MODES.LEFT_HALF;

		var nextModeMap = {};
		nextModeMap[MODES.LEFT_HALF] = MODES.LEFT_ONE_THIRD;
		nextModeMap[MODES.LEFT_ONE_THIRD] = MODES.LEFT_TWO_THIRD;
		nextModeMap[MODES.LEFT_TWO_THIRD] = MODES.LEFT_HALF;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	center : function() {
		var startMode = MODES.CENTER_FULL;

		var nextModeMap = {};
		nextModeMap[MODES.CENTER_FULL] = MODES.CENTER_CENTER;
		nextModeMap[MODES.CENTER_CENTER] = MODES.CENTER_FULL;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	right : function() {
		var startMode = MODES.RIGHT_HALF;

		var nextModeMap = {};
		nextModeMap[MODES.RIGHT_HALF] = MODES.RIGHT_ONE_THIRD;
		nextModeMap[MODES.RIGHT_ONE_THIRD] = MODES.RIGHT_TWO_THIRD;
		nextModeMap[MODES.RIGHT_TWO_THIRD] = MODES.RIGHT_HALF;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	downLeft : function() {
		var startMode = MODES.DOWN_LEFT_HALF;

		var nextModeMap = {};
		nextModeMap[MODES.DOWN_LEFT_HALF] = MODES.DOWN_LEFT_ONE_THIRD;
		nextModeMap[MODES.DOWN_LEFT_ONE_THIRD] = MODES.DOWN_LEFT_TWO_THIRD;
		nextModeMap[MODES.DOWN_LEFT_TWO_THIRD] = MODES.DOWN_LEFT_HALF;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	downCenter : function() {
		var startMode = MODES.DOWN_CENTER_CENTER;

		var nextModeMap = {};
		nextModeMap[MODES.DOWN_CENTER_CENTER] = MODES.DOWN_CENTER_FULL;
		nextModeMap[MODES.DOWN_CENTER_FULL] = MODES.DOWN_CENTER_CENTER;

		BQT.updateWindowPosition(startMode, nextModeMap);
	},

	downRight : function() {
		var startMode = MODES.DOWN_RIGHT_HALF;

		var nextModeMap = {};
		nextModeMap[MODES.DOWN_RIGHT_HALF] = MODES.DOWN_RIGHT_ONE_THIRD;
		nextModeMap[MODES.DOWN_RIGHT_ONE_THIRD] = MODES.DOWN_RIGHT_TWO_THIRD;
		nextModeMap[MODES.DOWN_RIGHT_TWO_THIRD] = MODES.DOWN_RIGHT_HALF;

		BQT.updateWindowPosition(startMode, nextModeMap);
	}
};

//Starting script
Torge Kummerow's avatar
Torge Kummerow committed
BQT.init();