00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "config.h"
00038 #include "window2.hh"
00039 #include "window2.hh"
00040 #include "wmp_config.h"
00041
00042 #include "core/include/frames.h"
00043 #include "core/interface/Msg.h"
00044 #include "math.h"
00045 #include "wmp_specific.hh"
00046 #include "bridge.hh"
00047 #include "main_window.hh"
00048 #include <sstream>
00049 #include <gtkmm/dialog.h>
00050 #include <gtkmm/stock.h>
00051 #include <gtkmm/filechooserdialog.h>
00052 #include "statistics.h"
00053
00054 void window2::on_button10_clicked() {
00055 Glib::RefPtr<Gtk::Clipboard> refClipboard = Gtk::Clipboard::get();
00056 refClipboard->set_text(oss.str().c_str());
00057 std::ostringstream fn;
00058 Gtk::FileChooserDialog dialog("Please choose a Filename",
00059 Gtk::FILE_CHOOSER_ACTION_SAVE);
00060 dialog.set_transient_for(*this);
00061 dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
00062 dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
00063 Gtk::FileFilter filter_vis;
00064 filter_vis.set_name("log files (*.wlg)");
00065 filter_vis.add_pattern("*.wlg");
00066 dialog.add_filter(filter_vis);
00067 int result = dialog.run();
00068 if (result == Gtk::RESPONSE_CANCEL)
00069 return;
00070 FILE * f = fopen(dialog.get_filename().c_str(), "w+");
00071
00072 fclose(f);
00073 }
00074
00075 void window2::on_button11_clicked() {
00076 show_statistics_from_values();
00077 }
00078
00079 void window2::on_button12_clicked() {
00080 range_setted = 0;
00081 hide();
00082 }
00083 #include "icon.h"
00084 window2::window2(main_window* mw) :
00085 window2_glade() {
00086 set_icon(Gdk::Pixbuf::create_from_xpm_data(icon));
00087 this->mw = mw;
00088 button10->hide();
00089 set_size_request(600, 600);
00090 treeview2->signal_cursor_changed().connect(sigc::mem_fun(*this,
00091 &window2::on_cursor_changed));
00092 m_refTreeModel = Gtk::TreeStore::create(m_Columns);
00093 treeview2->set_model(m_refTreeModel);
00094 treeview2->append_column("Message ",
00095 m_Columns.m_col_name);
00096 treeview2->append_column("Value", m_Columns.m_col_value);
00097 set_keep_above(true);
00098 range_setted = 0;
00099
00100 Gtk::Menu::MenuList& menulist = m_Menu_Popup.items();
00101 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Write to file", sigc::mem_fun(
00102 *this, &window2::write_to_file)));
00103 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Time Graph", sigc::mem_fun(
00104 *this, &window2::time_graph)));
00105 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Distribution Graph (Auto)", sigc::mem_fun(
00106 *this, &window2::dist_graph)));
00107 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Distribution Graph (1000 bin)", sigc::mem_fun(
00108 *this, &window2::dist_graph_1000)));
00109 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Distribution Graph (100 bin)", sigc::mem_fun(
00110 *this, &window2::dist_graph_100)));
00111 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Distribution Graph (10 bin)", sigc::mem_fun(
00112 *this, &window2::dist_graph_10)));
00113 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Distribution Graph (50% Auto)", sigc::mem_fun(
00114 *this, &window2::dist_graph_a5)));
00115 menulist.push_back(Gtk::Menu_Helpers::MenuElem("_Distribution Graph (50% 100 bin)", sigc::mem_fun(
00116 *this, &window2::dist_graph_100_5)));
00117
00118
00119 m_Menu_Popup.accelerate(*this);
00120
00121 }
00122 void window2::write_to_file(){
00123 stat_write_to_file(rowSelected);
00124 }
00125 void window2::time_graph(){
00126 stat_plot_tg(rowSelected);
00127 }
00128 void window2::dist_graph(){
00129 stat_plot_hist(rowSelected,0,1);
00130 }
00131 void window2::dist_graph_1000(){
00132 stat_plot_hist(rowSelected,1000,1);
00133 }
00134 void window2::dist_graph_100(){
00135 stat_plot_hist(rowSelected,100,1);
00136 }
00137 void window2::dist_graph_10(){
00138 stat_plot_hist(rowSelected,10,1);
00139 }
00140 void window2::dist_graph_a5(){
00141 stat_plot_hist(rowSelected,0,0.5);
00142 }
00143 void window2::dist_graph_100_5(){
00144 stat_plot_hist(rowSelected,100,0.5);
00145 }
00146
00147 void window2::row_append(int id, const char* txt, int value,const char* uni){
00148 long long llvalue=value;
00149 row_append(id,txt, llvalue, uni);
00150 }
00151
00152 void window2::row_append(int id, const char* txt, long long value, const char*uni) {
00153 char v[64];
00154 sprintf(v, "%lld %s", value, uni);
00155 row = *(m_refTreeModel->append());
00156 row[m_Columns.m_col_id] = id;
00157 row[m_Columns.m_col_name] = txt;
00158 row[m_Columns.m_col_value] = v;
00159 oss << "\n" << txt << " " << v << "\n";
00160 }
00161
00162 void window2::row_append(int id, const char* txt, const char*uni) {
00163 char v[64];
00164 sprintf(v, "%s", uni);
00165 row = *(m_refTreeModel->append());
00166 row[m_Columns.m_col_id] = id;
00167 row[m_Columns.m_col_name] = txt;
00168 row[m_Columns.m_col_value] = v;
00169 oss << "\n" << txt << " " << v << "\n";
00170 }
00171
00172
00173 void window2::on_button22_clicked() {
00174 int nnodes = 1;
00175 fprintf(stderr,"bgn:%d end:%d\n", 22, 22);
00176
00177
00178 if (nnodes > 0) {
00179 int n = (int) to_sb->get_value();
00180 int from = (int) from_sb->get_value();
00181
00182
00183 io_go_to(from);
00184 io_create_tmp_file();
00185 char data[2500];
00186 for (int i = from; i < n; i++) {
00187 int bytes = io_read_next_sim_data(&data[0]);
00188 if (bytes <= 0 || !io_write_on_tmp_file(data,bytes)){
00189 fprintf(stderr, "File End...\n");
00190 break;
00191 }
00192 }
00193 io_close_tmp_file();
00194 }
00195 char cmd[256];
00196 sprintf(cmd, "cp tmp.vis %s", this->filename);
00197
00198 if (system(cmd) == -1){
00199 fprintf(stderr, "*** WARNING: Unable to execute 'cp tmp.vis %s'\n", this->filename);
00200 }
00201 mw->reset();
00202 range_setted = 0;
00203 this->show_statistics(0);
00204 }
00205
00206 void window2::row_child_append(int id, const char* txt, int value,const char* uni){
00207 long long llvalue=value;
00208 row_child_append(id, txt, llvalue, uni);
00209 }
00210 void window2::row_child_append(int type, int id, const char* txt, int value, const char*uni){
00211 long long llvalue=value;
00212 row_child_append(type,id,txt,llvalue,uni);
00213 }
00214
00215 void window2::row_child_append(int id, const char* txt, long long value, const char*uni) {
00216 row_child_append(NONE, id, txt, value, uni);
00217 }
00218
00219 void window2::row_child_child_append(int id, const char* txt, long long value, const char*uni) {
00220 char v[64];
00221 sprintf(v, "%lld %s", value, uni);
00222 Gtk::TreeModel::iterator iter_child = m_refTreeModel->append(
00223 subrow.children());
00224 (*iter_child)[m_Columns.m_col_id] = id;
00225 (*iter_child)[m_Columns.m_col_type] = NONE;
00226 (*iter_child)[m_Columns.m_col_name] = txt;
00227 (*iter_child)[m_Columns.m_col_value] = v;
00228 }
00229
00230 void window2::row_child_append(int type, int id, const char* txt, long long value, const char*uni) {
00231 char v[64];
00232 if (uni != NULL) {
00233 sprintf(v, "%lld %s", value, uni);
00234 }else{
00235 sprintf(v, "%lld", value);
00236 }
00237 Gtk::TreeModel::iterator iter_child =
00238 m_refTreeModel->append(row.children());
00239 subrow = (*iter_child);
00240 (*iter_child)[m_Columns.m_col_id] = id;
00241 (*iter_child)[m_Columns.m_col_type] = type;
00242 (*iter_child)[m_Columns.m_col_name] = txt;
00243 (*iter_child)[m_Columns.m_col_value] = v;
00244 if (uni != NULL) {
00245 oss << txt << " " << v << "\n";
00246 }
00247 }
00248
00249 void window2::row_append(int id, const char* txt, float value, const char*uni) {
00250 char v[64];
00251 sprintf(v, "%5.3f %s", value, uni);
00252 row = *(m_refTreeModel->append());
00253 row[m_Columns.m_col_id] = id;
00254 row[m_Columns.m_col_name] = txt;
00255 row[m_Columns.m_col_value] = v;
00256 oss << "\n" << txt << " " << v << "\n---------------\n";
00257 }
00258
00260
00261
00262 void window2::row_child_append(int id, const char* txt, float value, const char*uni) {
00263 char v[64];
00264 sprintf(v, "%5.3f %s", value, uni);
00265 Gtk::TreeModel::iterator iter_child =
00266 m_refTreeModel->append(row.children());
00267 subrow = *iter_child;
00268 (*iter_child)[m_Columns.m_col_id] = id;
00269 (*iter_child)[m_Columns.m_col_name] = txt;
00270 (*iter_child)[m_Columns.m_col_value] = v;
00271 oss << txt << " " << v << "\n";
00272 }
00273
00274 void window2::show_statistics(char * filename) {
00275 statistics_init();
00276 m_refTreeModel->clear();
00277 int bgn = -1, end = -1;
00278 if (filename != NULL){
00279 strcpy(this->filename, filename);
00280 }
00281 statistics_from_file(this->filename, bgn, end);
00282 statistics_publish(this);
00283 from_sb->set_value(bgn);
00284 to_sb->set_value(end);
00285 }
00286
00287 void window2::show_statistics_from_values() {
00288 statistics_init();
00289 m_refTreeModel->clear();
00290 int bgn = from_sb->get_value();
00291 int end = to_sb->get_value();
00292 statistics_from_file(this->filename, bgn, end);
00293 statistics_publish(this);
00294 }
00295 char * window2::getFileName(){
00296 return filename;
00297 }
00298 void window2::on_cursor_changed() {
00299
00300 Glib::RefPtr<Gtk::TreeSelection> refTreeSelection =
00301 treeview2->get_selection();
00302 Gtk::TreeModel::iterator iter = refTreeSelection->get_selected();
00303
00304 if (iter) {
00305 Gtk::TreeModel::Row row = *iter;
00306 selected = row[m_Columns.m_col_id];
00307
00308 if (row[m_Columns.m_col_type] == MIN_V) {
00309 from_sb->set_value(selected);
00310 }
00311 if (row[m_Columns.m_col_type] == MAX_V) {
00312 to_sb->set_value(selected);
00313 }
00314 if (selected >= 0)
00315 mw->notify_selection(selected);
00316
00317 std::string exp_name((Glib::ustring(row[m_Columns.m_col_name])).c_str());
00318 rowSelected=row[m_Columns.m_col_uid];
00319 }
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330 }
00331
00332
00333
00334
00335 bool window2::on_treeview2_button_press_event(GdkEventButton *ev) {
00336 if ((ev->type == GDK_BUTTON_PRESS) && (ev->button == 3)) {
00337 if (stat_ask_plotter(rowSelected)){
00338 m_Menu_Popup.popup(ev->button, ev->time);
00339 }
00340 }
00341
00342 return false;
00343 }
00344
00345 void window2::on_button21_clicked() {
00346 int a,b;
00347 statistics_get_fez(a, b);
00348 from_sb->set_value(a);
00349 to_sb->set_value(b);
00350 show_statistics_from_values();
00351 }
00352
00353 void window2::on_button20_clicked() {
00354 show_statistics();
00355 }
00356
00357
00359
00360 void window2::root() {
00361 level = 0;
00362 xrow_name.clear();
00363 }
00364
00365 void window2::subSectionBegin() {
00366 level ++;
00367 }
00368
00369 void window2::subSectionEnd() {
00370 level --;
00371 xrow_name.erase(xrow_name.end());
00372 }
00373
00374 void window2::row_create(std::string txt1, std::string txt2, int pos, int uid) {
00375 if (level == 0){
00376 xrow = row_level[0] = *(m_refTreeModel->append());
00377 }else{
00378 xrow = row_level[level] = *(m_refTreeModel->append(row_level[level-1].children()));
00379 }
00380 xrow[m_Columns.m_col_id] = pos;
00381 xrow[m_Columns.m_col_uid] = uid;
00382 xrow[m_Columns.m_col_name] = txt1;
00383 xrow[m_Columns.m_col_value] = txt2;
00384 xrow_name.resize(level+1);
00385 xrow_name.at(level) = txt1;
00386 }
00387
00388 std::string window2::getCurrentRowName(){
00389 std::string s = "";
00390 for (int i= 0 ; i< level;i++){
00391 if (i!=0){
00392 s+= "::";
00393 }
00394 s+= xrow_name.at(i);
00395 }
00396
00397 return s;
00398 }
00399