main_win.cc
author hegyi
Mon, 21 Nov 2005 18:03:20 +0000
branchgui
changeset 90 e9f8f44f12a3
parent 87 b44281e4cca7
child 94 adfdc2f70548
permissions -rw-r--r--
NewMapWin has become Dialog instead of Window. Therefore it is created dynamically, when there is need for it, instead of keeping one instance in memory. This solution is slower, but more correct than before.
ladanyi@53
     1
#include "main_win.h"
alpar@76
     2
#include "icons/guipixbufs.h"
ladanyi@6
     3
ladanyi@68
     4
MainWin::MainWin() :
hegyi@90
     5
  mapwin("Map Setup", mapstorage, gd_canvas),
hegyi@82
     6
  gd_canvas(mapstorage, mapwin, (Gtk::Window *)this)
ladanyi@6
     7
{
ladanyi@68
     8
  set_title ("unsaved file - " + prog_name);
ladanyi@6
     9
  set_default_size(WIN_WIDTH,WIN_HEIGHT);
ladanyi@6
    10
  add(vbox);
ladanyi@6
    11
ladanyi@60
    12
ladanyi@60
    13
  // custom icons for the toolbar
ladanyi@60
    14
ladanyi@60
    15
  Glib::RefPtr<Gtk::IconFactory> p_icon_factory = Gtk::IconFactory::create();
ladanyi@60
    16
 
ladanyi@61
    17
  Glib::RefPtr<Gdk::Pixbuf> p_move_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    18
      2328, gui_icons_move);
ladanyi@61
    19
  Glib::RefPtr<Gdk::Pixbuf> p_addnode_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    20
      2328, gui_icons_addnode);
ladanyi@61
    21
  Glib::RefPtr<Gdk::Pixbuf> p_addlink_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    22
      2328, gui_icons_addlink);
ladanyi@61
    23
  Glib::RefPtr<Gdk::Pixbuf> p_delete_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    24
      2328, gui_icons_delete);
ladanyi@61
    25
  Glib::RefPtr<Gdk::Pixbuf> p_editlink_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    26
      2328, gui_icons_editlink);
ladanyi@61
    27
  Glib::RefPtr<Gdk::Pixbuf> p_editnode_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    28
      2328, gui_icons_editnode);
ladanyi@61
    29
  Glib::RefPtr<Gdk::Pixbuf> p_newmap_pixbuf = Gdk::Pixbuf::create_from_inline(
ladanyi@61
    30
      2328, gui_icons_newmap);
ladanyi@60
    31
ladanyi@60
    32
  Gtk::IconSource move_icon_source;
ladanyi@61
    33
  move_icon_source.set_pixbuf(p_move_pixbuf);
ladanyi@60
    34
  Gtk::IconSet move_icon_set;
ladanyi@60
    35
  move_icon_set.add_source(move_icon_source);
ladanyi@60
    36
  p_icon_factory->add(Gtk::StockID("gd-move"), move_icon_set);
ladanyi@60
    37
ladanyi@60
    38
  Gtk::IconSource addnode_icon_source;
ladanyi@61
    39
  addnode_icon_source.set_pixbuf(p_addnode_pixbuf);
ladanyi@60
    40
  Gtk::IconSet addnode_icon_set;
ladanyi@60
    41
  addnode_icon_set.add_source(addnode_icon_source);
ladanyi@60
    42
  p_icon_factory->add(Gtk::StockID("gd-addnode"), addnode_icon_set);
ladanyi@60
    43
ladanyi@60
    44
  Gtk::IconSource addlink_icon_source;
ladanyi@61
    45
  addlink_icon_source.set_pixbuf(p_addlink_pixbuf);
ladanyi@60
    46
  Gtk::IconSet addlink_icon_set;
ladanyi@60
    47
  addlink_icon_set.add_source(addlink_icon_source);
ladanyi@60
    48
  p_icon_factory->add(Gtk::StockID("gd-addlink"), addlink_icon_set);
ladanyi@60
    49
ladanyi@60
    50
  Gtk::IconSource delete_icon_source;
ladanyi@61
    51
  delete_icon_source.set_pixbuf(p_delete_pixbuf);
ladanyi@60
    52
  Gtk::IconSet delete_icon_set;
ladanyi@60
    53
  delete_icon_set.add_source(delete_icon_source);
ladanyi@60
    54
  p_icon_factory->add(Gtk::StockID("gd-delete"), delete_icon_set);
ladanyi@60
    55
ladanyi@60
    56
  Gtk::IconSource editlink_icon_source;
ladanyi@61
    57
  editlink_icon_source.set_pixbuf(p_editlink_pixbuf);
ladanyi@60
    58
  Gtk::IconSet editlink_icon_set;
ladanyi@60
    59
  editlink_icon_set.add_source(editlink_icon_source);
ladanyi@60
    60
  p_icon_factory->add(Gtk::StockID("gd-editlink"), editlink_icon_set);
ladanyi@60
    61
ladanyi@60
    62
  Gtk::IconSource editnode_icon_source;
ladanyi@61
    63
  editnode_icon_source.set_pixbuf(p_editnode_pixbuf);
ladanyi@60
    64
  Gtk::IconSet editnode_icon_set;
ladanyi@60
    65
  editnode_icon_set.add_source(editnode_icon_source);
ladanyi@60
    66
  p_icon_factory->add(Gtk::StockID("gd-editnode"), editnode_icon_set);
ladanyi@60
    67
ladanyi@60
    68
  Gtk::IconSource newmap_icon_source;
ladanyi@61
    69
  newmap_icon_source.set_pixbuf(p_newmap_pixbuf);
ladanyi@60
    70
  Gtk::IconSet newmap_icon_set;
ladanyi@60
    71
  newmap_icon_set.add_source(newmap_icon_source);
ladanyi@60
    72
  p_icon_factory->add(Gtk::StockID("gd-newmap"), newmap_icon_set);
ladanyi@60
    73
ladanyi@60
    74
  p_icon_factory->add_default();
ladanyi@60
    75
  
ladanyi@60
    76
ladanyi@6
    77
  ag=Gtk::ActionGroup::create();
ladanyi@6
    78
ladanyi@6
    79
  ag->add( Gtk::Action::create("FileMenu", "_File") );
ladanyi@6
    80
  ag->add( Gtk::Action::create("FileNew", Gtk::Stock::NEW),
ladanyi@6
    81
      sigc::mem_fun(*this, &MainWin::newFile));
ladanyi@6
    82
  ag->add( Gtk::Action::create("FileOpen", Gtk::Stock::OPEN),
ladanyi@6
    83
      sigc::mem_fun(*this, &MainWin::openFile));
ladanyi@6
    84
  ag->add( Gtk::Action::create("FileSave", Gtk::Stock::SAVE),
ladanyi@6
    85
      sigc::mem_fun(*this, &MainWin::saveFile));
ladanyi@6
    86
  ag->add( Gtk::Action::create("FileSaveAs", Gtk::Stock::SAVE_AS),
ladanyi@6
    87
      sigc::mem_fun(*this, &MainWin::saveFileAs));
ladanyi@53
    88
  ag->add( Gtk::Action::create("Close", Gtk::Stock::CLOSE),
ladanyi@53
    89
      sigc::mem_fun(*this, &MainWin::close));
ladanyi@53
    90
  ag->add( Gtk::Action::create("Quit", Gtk::Stock::QUIT),
hegyi@47
    91
      sigc::mem_fun(*this, &MainWin::hide));
ladanyi@6
    92
ladanyi@6
    93
  ag->add( Gtk::Action::create("ViewMenu", "_View") );
ladanyi@6
    94
  ag->add( Gtk::Action::create("ViewZoomIn", Gtk::Stock::ZOOM_IN),
ladanyi@6
    95
      sigc::mem_fun(this->gd_canvas, &GraphDisplayerCanvas::zoomIn));
ladanyi@6
    96
  ag->add( Gtk::Action::create("ViewZoomOut", Gtk::Stock::ZOOM_OUT),
ladanyi@6
    97
      sigc::mem_fun(this->gd_canvas, &GraphDisplayerCanvas::zoomOut));
ladanyi@6
    98
  ag->add( Gtk::Action::create("ViewZoomFit", Gtk::Stock::ZOOM_FIT),
ladanyi@6
    99
      sigc::mem_fun(this->gd_canvas, &GraphDisplayerCanvas::zoomFit));
ladanyi@6
   100
  ag->add( Gtk::Action::create("ViewZoom100", Gtk::Stock::ZOOM_100),
ladanyi@6
   101
      sigc::mem_fun(this->gd_canvas, &GraphDisplayerCanvas::zoom100));
ladanyi@6
   102
  
ladanyi@6
   103
  ag->add( Gtk::Action::create("ShowMenu", "_Show") );
ladanyi@6
   104
  ag->add( Gtk::Action::create("ShowMaps", "_Maps"),
hegyi@47
   105
      sigc::mem_fun(this->mapwin, &MapWin::show));
ladanyi@6
   106
ladanyi@53
   107
  Gtk::RadioAction::Group tool_group;
ladanyi@60
   108
  ag->add( Gtk::RadioAction::create(tool_group, "MoveItem", Gtk::StockID("gd-move"), "Move"),
ladanyi@53
   109
      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 0) );
ladanyi@60
   110
  ag->add( Gtk::RadioAction::create(tool_group, "CreateNode", Gtk::StockID("gd-addnode"), "Create node"),
hegyi@22
   111
      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 1) );
ladanyi@60
   112
  ag->add( Gtk::RadioAction::create(tool_group, "CreateEdge", Gtk::StockID("gd-addlink"), "Create edge"),
hegyi@22
   113
      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 2) );
ladanyi@60
   114
  ag->add( Gtk::RadioAction::create(tool_group, "EraseItem", Gtk::StockID("gd-delete"), "Delete"),
hegyi@22
   115
      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 3) );
ladanyi@60
   116
ladanyi@60
   117
  ag->add( Gtk::RadioAction::create(tool_group, "EditEdgeMap", Gtk::StockID("gd-editlink"), "Edit edge map"),
hegyi@32
   118
      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 4) );
ladanyi@60
   119
  ag->add( Gtk::RadioAction::create(tool_group, "EditNodeMap", Gtk::StockID("gd-editnode"), "Edit node map"),
hegyi@32
   120
      sigc::bind( sigc::mem_fun ( this->gd_canvas, &GraphDisplayerCanvas::changeEditorialTool ), 5) );
ladanyi@60
   121
ladanyi@60
   122
  ag->add( Gtk::Action::create("AddMap", Gtk::StockID("gd-newmap")),
hegyi@90
   123
      sigc::mem_fun (new NewMapWin("NewMapWin", gd_canvas), &NewMapWin::show ) );
hegyi@22
   124
ladanyi@6
   125
  uim=Gtk::UIManager::create();
ladanyi@6
   126
  uim->insert_action_group(ag);
ladanyi@6
   127
  add_accel_group(uim->get_accel_group());
ladanyi@6
   128
ladanyi@6
   129
  try
ladanyi@6
   130
  {
ladanyi@6
   131
ladanyi@6
   132
    Glib::ustring ui_info =
ladanyi@6
   133
      "<ui>"
ladanyi@6
   134
      "  <menubar name='MenuBar'>"
ladanyi@6
   135
      "    <menu action='FileMenu'>"
ladanyi@6
   136
      "      <menuitem action='FileNew'/>"
ladanyi@6
   137
      "      <menuitem action='FileOpen'/>"
ladanyi@6
   138
      "      <menuitem action='FileSave'/>"
ladanyi@6
   139
      "      <menuitem action='FileSaveAs'/>"
ladanyi@53
   140
      "      <menuitem action='Close'/>"
ladanyi@53
   141
      "      <menuitem action='Quit'/>"
ladanyi@6
   142
      "    </menu>"
ladanyi@6
   143
      "    <menu action='ViewMenu'>"
ladanyi@6
   144
      "      <menuitem action='ViewZoomIn' />"
ladanyi@6
   145
      "      <menuitem action='ViewZoomOut' />"
ladanyi@6
   146
      "      <menuitem action='ViewZoom100' />"
ladanyi@87
   147
      "      <menuitem action='ViewZoomFit' />"
ladanyi@6
   148
      "    </menu>"
ladanyi@6
   149
      "    <menu action='ShowMenu'>"
ladanyi@6
   150
      "      <menuitem action='ShowMaps'/>"
ladanyi@6
   151
      "    </menu>"
ladanyi@6
   152
      "  </menubar>"
ladanyi@6
   153
      "  <toolbar name='ToolBar'>"
ladanyi@6
   154
      "    <toolitem action='FileNew' />"
ladanyi@6
   155
      "    <toolitem action='FileOpen' />"
ladanyi@6
   156
      "    <toolitem action='FileSave' />"
ladanyi@53
   157
      "    <toolitem action='Close' />"
ladanyi@6
   158
      "    <separator />"
ladanyi@6
   159
      "    <toolitem action='ViewZoomIn' />"
ladanyi@6
   160
      "    <toolitem action='ViewZoomOut' />"
ladanyi@6
   161
      "    <toolitem action='ViewZoom100' />"
ladanyi@87
   162
      "    <toolitem action='ViewZoomFit' />"
hegyi@22
   163
      "    <separator />"
ladanyi@53
   164
      "    <toolitem action='MoveItem' />"
hegyi@22
   165
      "    <toolitem action='CreateNode' />"
hegyi@22
   166
      "    <toolitem action='CreateEdge' />"
hegyi@22
   167
      "    <toolitem action='EraseItem' />"
hegyi@32
   168
      "    <toolitem action='EditEdgeMap' />"
hegyi@32
   169
      "    <toolitem action='EditNodeMap' />"
ladanyi@60
   170
      "    <separator />"
hegyi@41
   171
      "    <toolitem action='AddMap' />"
ladanyi@6
   172
      "  </toolbar>"
ladanyi@6
   173
      "</ui>";
ladanyi@6
   174
ladanyi@6
   175
    uim->add_ui_from_string(ui_info);
ladanyi@6
   176
ladanyi@6
   177
  }
ladanyi@6
   178
  catch(const Glib::Error& ex)
ladanyi@6
   179
  {
ladanyi@6
   180
    std::cerr << "building menus failed: " <<  ex.what();
ladanyi@6
   181
  }
ladanyi@6
   182
ladanyi@6
   183
  Gtk::Widget* menubar = uim->get_widget("/MenuBar");
ladanyi@6
   184
  if (menubar){
ladanyi@6
   185
    vbox.pack_start(*menubar, Gtk::PACK_SHRINK);
ladanyi@6
   186
  }
ladanyi@6
   187
ladanyi@6
   188
  Gtk::Widget* toolbar = uim->get_widget("/ToolBar");
ladanyi@6
   189
  if (toolbar)
ladanyi@6
   190
  {
ladanyi@6
   191
    static_cast<Gtk::Toolbar*>(toolbar)->set_toolbar_style(Gtk::TOOLBAR_ICONS);
ladanyi@6
   192
    vbox.pack_start(*toolbar, Gtk::PACK_SHRINK);
ladanyi@6
   193
  }
ladanyi@6
   194
ladanyi@6
   195
  Gtk::ScrolledWindow* pScrolledWindow = manage(new Gtk::ScrolledWindow());
ladanyi@87
   196
  pScrolledWindow->set_shadow_type(Gtk::SHADOW_IN);
ladanyi@6
   197
  pScrolledWindow->add(gd_canvas);
ladanyi@6
   198
  vbox.pack_start(*pScrolledWindow);
hegyi@50
   199
hegyi@50
   200
  tooltips.set_tip(*(uim->get_widget("/ToolBar/CreateNode")),"Create Node");
hegyi@50
   201
  tooltips.enable();
ladanyi@6
   202
ladanyi@6
   203
  show_all_children();
ladanyi@6
   204
}
ladanyi@6
   205
ladanyi@57
   206
void MainWin::readFile(const std::string &file)
ladanyi@57
   207
{
ladanyi@57
   208
  mapstorage.readFromFile(file);
ladanyi@57
   209
  mapstorage.file_name = file;
ladanyi@57
   210
  mapstorage.modified = false;
ladanyi@57
   211
  gd_canvas.drawGraph();
ladanyi@57
   212
  mapwin.update();
ladanyi@68
   213
  set_title(Glib::filename_display_basename(file) + " - " + prog_name);
ladanyi@57
   214
}
ladanyi@57
   215
ladanyi@6
   216
void MainWin::newFile()
ladanyi@6
   217
{
ladanyi@53
   218
  if (mapstorage.modified)
ladanyi@53
   219
  {
ladanyi@56
   220
    Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
ladanyi@56
   221
        Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
ladanyi@53
   222
    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
ladanyi@53
   223
    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ladanyi@53
   224
    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
ladanyi@53
   225
    switch (mdialog.run())
ladanyi@53
   226
    {
ladanyi@53
   227
      case Gtk::RESPONSE_CANCEL:
ladanyi@53
   228
        return;
ladanyi@53
   229
      case Gtk::RESPONSE_REJECT:
ladanyi@53
   230
        break;
ladanyi@53
   231
      case Gtk::RESPONSE_ACCEPT:
ladanyi@53
   232
        saveFile();
ladanyi@53
   233
        break;
ladanyi@53
   234
    }
ladanyi@53
   235
  }
ladanyi@53
   236
  gd_canvas.clear();
ladanyi@53
   237
  mapstorage.clear();
ladanyi@53
   238
  mapwin.update();
ladanyi@68
   239
  set_title("unsaved file - " + prog_name);
ladanyi@6
   240
}
ladanyi@6
   241
ladanyi@6
   242
void MainWin::openFile()
ladanyi@6
   243
{
ladanyi@53
   244
  if (mapstorage.modified)
ladanyi@53
   245
  {
ladanyi@56
   246
    Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true, 
ladanyi@56
   247
        Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
ladanyi@53
   248
    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
ladanyi@53
   249
    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ladanyi@53
   250
    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
ladanyi@53
   251
    switch (mdialog.run())
ladanyi@53
   252
    {
ladanyi@53
   253
      case Gtk::RESPONSE_CANCEL:
ladanyi@53
   254
        return;
ladanyi@53
   255
      case Gtk::RESPONSE_REJECT:
ladanyi@53
   256
        break;
ladanyi@53
   257
      case Gtk::RESPONSE_ACCEPT:
ladanyi@53
   258
        saveFile();
ladanyi@53
   259
        break;
ladanyi@53
   260
    }
ladanyi@53
   261
  }
ladanyi@53
   262
  Gtk::FileChooserDialog fcdialog("Open File");
ladanyi@53
   263
  fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ladanyi@53
   264
  fcdialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT);
ladanyi@53
   265
  if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
ladanyi@53
   266
  {
ladanyi@68
   267
    gd_canvas.clear();
ladanyi@68
   268
    mapstorage.clear();
ladanyi@53
   269
    Glib::ustring filename = fcdialog.get_filename();
ladanyi@63
   270
    if (!mapstorage.readFromFile(filename))
ladanyi@63
   271
    {
ladanyi@63
   272
      mapstorage.file_name = filename;
ladanyi@63
   273
      mapstorage.modified = false;
ladanyi@63
   274
      gd_canvas.drawGraph();
ladanyi@63
   275
      mapwin.update();
ladanyi@68
   276
      set_title(Glib::filename_display_basename(filename) + " - " + prog_name);
ladanyi@63
   277
    }
ladanyi@53
   278
  }
ladanyi@6
   279
}
ladanyi@6
   280
ladanyi@6
   281
void MainWin::saveFile()
ladanyi@6
   282
{
ladanyi@53
   283
  if (mapstorage.file_name == "") {
ladanyi@53
   284
    saveFileAs();
ladanyi@53
   285
  }
ladanyi@53
   286
  else
ladanyi@53
   287
  {
ladanyi@53
   288
    mapstorage.writeToFile(mapstorage.file_name);
ladanyi@53
   289
    mapstorage.modified = false;
ladanyi@68
   290
    set_title(Glib::filename_display_basename(mapstorage.file_name) + " - " +
ladanyi@68
   291
        prog_name);
ladanyi@53
   292
  }
ladanyi@6
   293
}
ladanyi@6
   294
ladanyi@6
   295
void MainWin::saveFileAs()
ladanyi@6
   296
{
ladanyi@53
   297
  Gtk::FileChooserDialog fcdialog("Save File", Gtk::FILE_CHOOSER_ACTION_SAVE);
ladanyi@53
   298
  fcdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ladanyi@53
   299
  fcdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
ladanyi@53
   300
  if (fcdialog.run() == Gtk::RESPONSE_ACCEPT)
ladanyi@53
   301
  {
ladanyi@53
   302
    Glib::ustring filename = fcdialog.get_filename();
ladanyi@53
   303
    mapstorage.file_name = filename;
ladanyi@53
   304
    mapstorage.writeToFile(filename);
ladanyi@53
   305
    mapstorage.modified = false;
ladanyi@68
   306
    set_title(Glib::filename_display_basename(filename) + " - " + prog_name);
ladanyi@53
   307
  }
ladanyi@6
   308
}
ladanyi@53
   309
ladanyi@53
   310
void MainWin::close()
ladanyi@53
   311
{
ladanyi@53
   312
  if (mapstorage.modified)
ladanyi@53
   313
  {
ladanyi@56
   314
    Gtk::MessageDialog mdialog("<b>Save changes before closing?</b>", true,
ladanyi@56
   315
        Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE);
ladanyi@53
   316
    mdialog.add_button("Close _without Saving", Gtk::RESPONSE_REJECT);
ladanyi@53
   317
    mdialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
ladanyi@53
   318
    mdialog.add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
ladanyi@53
   319
    switch (mdialog.run())
ladanyi@53
   320
    {
ladanyi@53
   321
      case Gtk::RESPONSE_CANCEL:
ladanyi@53
   322
        return;
ladanyi@53
   323
      case Gtk::RESPONSE_REJECT:
ladanyi@53
   324
        break;
ladanyi@53
   325
      case Gtk::RESPONSE_ACCEPT:
ladanyi@53
   326
        saveFile();
ladanyi@53
   327
        break;
ladanyi@53
   328
    }
ladanyi@53
   329
  }
ladanyi@53
   330
  gd_canvas.clear();
ladanyi@53
   331
  mapstorage.clear();
ladanyi@53
   332
  mapwin.update();
ladanyi@68
   333
  set_title("unsaved file - " + prog_name);
ladanyi@53
   334
}