-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.js
152 lines (134 loc) · 4.95 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
// Defining create window
function create_window(cid, type, width, height, xpos, ypos, attr_array) {
// todo: make a separate way to format the title for OSX
var my_title;
if (type === "pd_canvas") {
my_title = pdbundle.pdgui.format_window_title(
attr_array.name,
attr_array.dirty,
attr_array.args,
attr_array.dir);
} else {
my_title = type;
}
var my_file =
type === "pd_canvas" ? "pd_canvas.html" : "dialog_" + type + ".html";
var eval_string = "register_window_id(" +
JSON.stringify(cid) + ", " +
JSON.stringify(attr_array) + ");";
var pdWindow = function(my_file, params, callback){
var new_window = {params}
new_window.window = window
new_window.window.on = function (event, callback, record) {
if (event == "loaded"){
this.addEventListener('load', callback)
}
}
callback(new_window)
}
function init_pd_window(f, new_win) {
if (new_win === pdbundle.pdgui.get_patchwin(cid)) {
// Add canvas html file
$.get("./components/canvas/"+f, function(data){
$("#canvas-container").append(data)
update_canvas_id(cid);
add_canvas_name(cid, attr_array.name)
register_canvas(cid, attr_array);
});
// flag the window as loaded. We may want to wait until the
// DOM window has finished loading for this.
pdbundle.pdgui.set_window_finished_loading(cid);
}else if(new_win === pdbundle.pdgui.get_dialogwin(cid)){
// Add menu html file
$.get("./components/dialogs/"+f, function(data){
var dialog_div = new_win.window.document.getElementById("dialog-div");
if(dialog_div === null){
dialog_div = new_win.window.document.createElement('div')
dialog_div.id = "dialog-div";
}
// cleaning dialog div
dialog_div.innerHTML = "";
$("#dialog-body").prepend(dialog_div.outerHTML)
$("#dialog-div").prepend(data)
var props_map = {
"dialog_prefs.html": "Pd-L20rk",
"dialog_canvas.html": "Canvas",
"dialog_iemgui.html": "Iemgui",
"dialog_gatom.html": "Atom",
"dialog_font.html": "Font"
};
$("#dialog-title").text(props_map[f] + " Properties");
$("#dialog-modal").modal("show");
// initialize the dialog window
register_dialog(cid,attr_array);
});
}else {
// If the window is no longer loading, we need to go ahead
// and remove the reference to it in the patchwin array.
// Otherwise we get dangling references to closed windowsE vamo
// and other bugs...
if (!pdbundle.pdgui.window_is_loading(cid)) {
if (type === "pd_canvas") {
pdbundle.pdgui.set_patchwin(cid, undefined);
} else {
pdbundle.pdgui.set_dialogwin(cid, undefined);
}
}
new_win.window.close(true);
}
}
pdWindow(my_file, {
title: my_title,
position: "center",
focus: true,
width: width,
// We add 23 as a kludge to account for the menubar at the top of
// the window. Ideally we would just get rid of the canvas menu
// altogether to simplify things. But we'd have to add some kind of
// widget for the "Put" menu.
height: height + 23,
x: xpos,
y: ypos
}, function (new_win) {
if (type === "pd_canvas") {
pdbundle.pdgui.set_patchwin(cid, new_win);
init_pd_window(my_file, new_win);
} else {
pdbundle.pdgui.set_dialogwin(cid, new_win);
init_pd_window(my_file, new_win);
}
});
}
function add_menu(){
// Add menu html file
$.get("./components/menu/menu.html", function (data) {
$("#menu").prepend(data)
create_pd_window_menus(null, window)
});
}
function dsp_toggle(){
// DSP toggle
document.getElementById("dsp_control").addEventListener("click",
function(evt) {
var dsp_state = evt.target.checked ? 1 : 0;
pdbundle.pdgui.pdsend("pd dsp", dsp_state);
}
);
}
function create_pd_window_menus(gui, w) {
var type = "web";
var m = menu_options(type, w);
add_shortcuts();
load_menu_actions();
}
// Init Function
function gui_init(win){
// Init vars
pdbundle.pdgui.set_pd_window(win);
pdbundle.pdgui.set_new_window_fn(create_window);
add_menu();
dsp_toggle();
}
function initialize_webapp() {
gui_init(window);
};