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
|
/* ************************************************************************
Copyright: 2008, OETIKER+PARTNER AG
License: GPL
Authors: Tobias Oetiker
$Id: $
* ************************************************************************ */
/*
#asset(tr/*)
*/
/**
* This is the main application class of your custom application "qx08"
*/
qx.Class.define("tr.Application", {
extend : qx.application.Standalone,
members : {
/**
* This method contains the initial application code and gets called
* during startup of the application
*
* @type member
* @return {void}
*/
main : function() {
// Call super class
this.base(arguments);
// Enable logging in debug variant
if (qx.core.Variant.isSet("qx.debug", "on")) {
qx.log.appender.Native;
qx.log.appender.Console;
}
// if we run with a file:// url make sure
// the app finds the Tr service (tr.cgi)
tr.Server.getInstance().setLocalUrl('http://localhost/~oetiker/tr/');
this.getRoot().add(new tr.ui.CopyBuffer(), {
left : 0,
top : 0
});
this.getRoot().add(new tr.ui.Error(), {
left : 0,
top : 0
});
this.getRoot().add(new tr.ui.Config(), {
left : 0,
top : 0
});
this.getRoot().add(new tr.ui.Link('SmokeTrace 2.4.2', 'http://oss.oetiker.ch/smokeping/', '#b0b0b0', '17px bold sans-serif'), {
right : 7,
top : 5
});
// Document is the application root
var root = new qx.ui.container.Composite(new qx.ui.layout.VBox());
root.setPadding(5);
this.getRoot().add(root, {
left : 0,
top : 0,
right : 0,
bottom : 0
});
var tabs = new qx.ui.tabview.TabView();
root.add(tabs, { flex : 1 });
root.add(new tr.ui.Footer(this.tr("SmokeTrace is part of the of the SmokePing suite created by Tobi Oetiker, Copyright 2008."), 'http://oss.oetiker.ch/smokeping/'));
tabs.add(new tr.ui.TraceTab());
this.__handles = {};
qx.event.message.Bus.subscribe('add_handle',this.__add_handle,this);
},
__handles: null,
__handle_count: 0,
__add_handle: function(m){
var handle = m.getData();
this.__handles[handle]=0;
if (this.__handle_count == 0){
this.__run_poller();
}
},
__run_poller: function(){
var that = this;
tr.Server.getInstance().callAsync(
function(ret,exc,id){that.__process_input(ret,exc,id);},'poll',this.__handles
);
},
__process_input: function(ret,exc,id){
if (exc == null) {
for (var hand in ret){
this.info('got '+hand);
if (hand == 'handles'){
this.__handles = ret[hand];
}
if (ret[hand]['data']){
qx.event.message.Bus.dispatch(hand+'::data', ret[hand]['data']);
}
if (ret[hand]['type']){
qx.event.message.Bus.dispatch(hand+'::status', {type : ret[hand]['type'],
msg : ret[hand]['msg'] });
}
};
}
else {
qx.event.message.Bus.dispatch('error', [ this.tr("Server Error"), '' + exc ]);
}
this.__handle_count = 0;
for(var i in this.__handles){
this.__handle_count ++;
};
if (this.__hanlde_count > 0){
qx.event.Timer.once(this.__run_poller,this,this.__interval);
}
}
}
});
|