2 // Armadillo File Manager
3 // Copyright (c) 2010, Robert Sesek <http://www.bluestatic.org>
5 // This program is free software: you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free Software
7 // Foundation, either version 3 of the License, or any later version.
10 goog
.provide('armadillo.Actor');
12 goog
.require('goog.array');
13 goog
.require('goog.dom');
14 goog
.require('goog.events');
15 goog
.require('goog.positioning.ClientPosition');
16 goog
.require('goog.positioning.Corner');
17 goog
.require('goog.ui.Popup');
20 * The Actor is a popup that displays the various actions that can be performed
22 * @param {armadillo.File} file The file to act on.
25 armadillo
.Actor
= function(file
) {
26 goog
.Disposable
.call(this);
28 this.element_
= this.createElement_();
29 this.popup_
= new goog
.ui
.Popup(this.element_
);
30 armadillo
.Actor
.actors_
.push(this);
32 goog
.inherits(armadillo
.Actor
, goog
.Disposable
);
35 * An array of all the Actors that have been created.
37 armadillo
.Actor
.actors_
= new Array();
40 * The different options that the Actor can perform.
42 armadillo
.Actor
.options_
= {
50 * String values for the options.
52 armadillo
.Actor
.optionStrings_
= {
60 * A global property that should be checked to see if an actor is present,
61 * creating a modal session.
63 armadillo
.Actor
.isModal
= function() {
64 var isVisible
= false;
65 goog
.array
.forEach(armadillo
.Actor
.actors_
, function (e
) {
66 isVisible
|= e
.popup_
.isVisible();
75 armadillo
.Actor
.prototype.disposeInternal
= function() {
76 armadillo
.Actor
.superClass_
.disposeInternal
.call(this);
78 // Unlisten the tiles.
79 var tiles
= goog
.dom
.getElementsByClassName('tile', this.element_
);
80 goog
.array
.forEach(tiles
, function (tile
) {
81 goog
.events
.unlistenByKey(tile
.actorListener
);
84 // Remove the actor display element.
85 goog
.dom
.removeNode(this.element_
);
89 this.popup_
.dispose();
92 // Remove the actor from the list.
93 goog
.array
.remove(armadillo
.Actor
.actors_
, this);
100 * @param {int} x The X position to show at
101 * @param {int} y The Y position to show at
103 armadillo
.Actor
.prototype.show
= function(x
, y
) {
104 if (armadillo
.Actor
.isModal())
106 var firstBodyElement
= goog
.dom
.getFirstElementChild(document
.body
);
107 goog
.dom
.insertSiblingBefore(this.element_
, firstBodyElement
);
108 this.popup_
.setPinnedCorner(goog
.positioning
.Corner
.TOP_LEFT
);
109 this.popup_
.setPosition(new goog
.positioning
.ClientPosition(x
, y
));
110 this.popup_
.setHideOnEscape(true);
111 this.popup_
.setVisible(true);
117 armadillo
.Actor
.prototype.hide
= function() {
118 this.popup_
.setVisible(false);
122 * Creates the DOM Element that is inserted into the popup.
125 armadillo
.Actor
.prototype.createElement_
= function() {
126 var root
= goog
.dom
.createDom('div', 'actor');
127 for (var option
in armadillo
.Actor
.options_
) {
128 var tile
= goog
.dom
.createDom('div', 'tile');
129 var value
= armadillo
.Actor
.options_
[option];
130 var title
= goog
.dom
.createDom('span', 'title',
131 armadillo
.Actor
.optionStrings_
[value]);
132 goog
.dom
.appendChild(tile
, title
);
133 goog
.dom
.appendChild(root
, tile
);
134 tile
.actorOption
= value
;
135 tile
.actorListener
= goog
.events
.listen(tile
, goog
.events
.EventType
.CLICK
,
136 this.tileClickHandler_
, false, this);
142 * Click handler for individual tiles.
145 armadillo
.Actor
.prototype.tileClickHandler_
= function(e
) {
146 if (e
.target
.actorOption
== armadillo
.Actor
.options_
.DELETE
) {
147 console
.log("DELETE DELETE DELETE " + this.file_
.getName());
149 console
.log('You clicked ' + e
.target
.actorOption
);