~ubuntu-branches/debian/squeeze/gmsh/squeeze

« back to all changes in this revision

Viewing changes to Fltk/Main.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme
  • Date: 2009-02-17 10:12:27 UTC
  • mfrom: (1.2.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20090217101227-mdrolkldak2pgd2i
Tags: 2.3.0.dfsg-1
* New upstream release
  + major graphics and GUI code refactoring; 
  + new full-quad/hexa subdivision algorithm (removed 
    Mesh.RecombineAlgo);
  + improved automatic transfinite corner selection (now also 
    for volumes); 
  + improved visibility browser; new automatic adaptive visualization
    for high-order simplices;
  + modified arrow size, clipping planes and transform options; many
    improvements and
  + bug fixes all over the place.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Gmsh - Copyright (C) 1997-2008 C. Geuzaine, J.-F. Remacle
 
1
// Gmsh - Copyright (C) 1997-2009 C. Geuzaine, J.-F. Remacle
2
2
//
3
3
// See the LICENSE.txt file for license information. Please report all
4
4
// bugs and problems to <gmsh@geuz.org>.
5
5
 
6
6
#include <string>
7
 
#include <time.h>
8
7
#include "GUI.h"
 
8
#include "menuWindow.h"
9
9
#include "Gmsh.h"
10
 
#include "GmshUI.h"
11
10
#include "GmshMessage.h"
12
11
#include "Draw.h"
13
12
#include "Context.h"
24
23
 
25
24
extern Context_T CTX;
26
25
 
27
 
GUI *WID = 0;
28
 
 
29
26
int main(int argc, char *argv[])
30
27
{
31
 
  // Log some info
32
 
  time_t now;
33
 
  time(&now);
34
 
  std::string currtime(ctime(&now));
35
 
  currtime[currtime.size() - 1] = '\0';
36
 
  std::string cmdline;
37
 
  for(int i = 0; i < argc; i++){
38
 
    if(i) cmdline += " ";
39
 
    cmdline += argv[i];
40
 
  }
 
28
  // Create a new model
 
29
  new GModel();
41
30
 
42
31
  // Hack to generate automatic documentation (before getting
43
32
  // user-defined options)
44
33
  if(argc == 2 && std::string(argv[1]) == "-doc"){
45
34
    Init_Options(0);
46
35
    GMSH_PluginManager::instance()->registerDefaultPlugins();
47
 
    GModel *dummy = new GModel;
48
36
    Print_OptionsDoc();
49
 
    delete dummy;
50
37
    exit(0);
51
38
  }
52
39
 
53
40
  // Initialize static stuff (parser symbols, options)
54
41
  GmshInitialize(argc, argv);
55
42
 
56
 
  // Always print info on terminal for non-interactive execution
57
 
  if(CTX.batch) CTX.terminal = 1;
58
 
 
59
 
  // Create a new model
60
 
  new GModel;
61
 
 
62
43
  // Non-interactive Gmsh
63
44
  if(CTX.batch) {
64
 
    Msg::Info("'%s' started on %s", cmdline.c_str(), currtime.c_str());
 
45
    CTX.terminal = 1;
65
46
    GmshBatch();
66
47
    GmshFinalize();
67
48
    Msg::Exit(0);
68
49
  }
69
50
 
70
 
  // Interactive Gmsh
71
 
  CTX.batch = -1; // The GUI is not ready yet for interactivity
72
 
 
73
51
  // Create the GUI
74
 
  WID = new GUI(argc, argv);
 
52
  GUI::instance(argc, argv);
75
53
 
76
54
  // Set all previously defined options in the GUI
77
55
  Init_Options_GUI(0);
78
56
 
79
 
  // The GUI is ready
80
 
  CTX.batch = 0;
81
 
 
82
57
  // Say welcome!
83
58
  Msg::StatusBar(1, false, "Geometry");
84
59
  Msg::StatusBar(2, false, "Gmsh %s", Get_GmshVersion());
91
66
  Msg::Info("Build date     : %s", Get_GmshBuildDate());
92
67
  Msg::Info("Build host     : %s", Get_GmshBuildHost());
93
68
  Msg::Info("Packager       : %s", Get_GmshPackager());
94
 
  Msg::Info("Home directory : %s", CTX.home_dir);
95
 
  Msg::Info("Launch date    : %s", currtime.c_str());
96
 
  Msg::Info("Command line   : %s", cmdline.c_str());
 
69
  Msg::Info("Home directory : %s", CTX.home_dir.c_str());
 
70
  Msg::Info("Launch date    : %s", Msg::GetLaunchDate().c_str());
 
71
  Msg::Info("Command line   : %s", Msg::GetCommandLine().c_str());
97
72
  Msg::Info("-------------------------------------------------------");
98
73
 
99
74
  // Display the GUI immediately to have a quick "a la Windows" launch time
100
 
  WID->check();
 
75
  GUI::instance()->check();
101
76
 
102
77
  // Open project file and merge all other input files
103
 
  OpenProject(CTX.filename);
 
78
  OpenProject(GModel::current()->getFileName());
104
79
  for(unsigned int i = 1; i < CTX.files.size(); i++){
105
 
    if(CTX.files[i] == "-new")
106
 
      new GModel;
 
80
    if(CTX.files[i] == "-new"){
 
81
      GModel::current()->setVisibility(0);
 
82
      new GModel();
 
83
    }
107
84
    else
108
 
      MergeFile(CTX.files[i].c_str());
 
85
      MergeFile(CTX.files[i]);
109
86
  }
110
87
  
111
88
  if(CTX.post.combine_time){
112
89
    PView::combine(true, 2, CTX.post.combine_remove_orig);
113
 
    WID->update_views();
 
90
    GUI::instance()->updateViews();
114
91
  }
115
92
 
116
93
  // Init first context
117
94
  switch (CTX.initial_context) {
118
 
  case 1: WID->set_context(menu_geometry, 0); break;
119
 
  case 2: WID->set_context(menu_mesh, 0); break;
120
 
  case 3: WID->set_context(menu_solver, 0); break;
121
 
  case 4: WID->set_context(menu_post, 0); break;
 
95
  case 1: GUI::instance()->menu->setContext(menu_geometry, 0); break;
 
96
  case 2: GUI::instance()->menu->setContext(menu_mesh, 0); break;
 
97
  case 3: GUI::instance()->menu->setContext(menu_solver, 0); break;
 
98
  case 4: GUI::instance()->menu->setContext(menu_post, 0); break;
122
99
  default: // automatic
123
100
    if(PView::list.size())
124
 
      WID->set_context(menu_post, 0);
 
101
      GUI::instance()->menu->setContext(menu_post, 0);
125
102
    else
126
 
      WID->set_context(menu_geometry, 0);
 
103
      GUI::instance()->menu->setContext(menu_geometry, 0);
127
104
    break;
128
105
  }
129
106
 
130
 
  // Read background mesh on disk
131
 
  if(CTX.bgm_filename) {
 
107
  // Read background mesh if any
 
108
  if(!CTX.bgm_filename.empty()) {
132
109
    MergeFile(CTX.bgm_filename);
133
110
    if(PView::list.size())
134
111
      GModel::current()->getFields()->set_background_mesh(PView::list.size() - 1);
143
120
  if(CTX.solver.listen) Solver(-1, NULL);
144
121
 
145
122
  // loop
146
 
  return WID->run();
 
123
  return GUI::instance()->run();
147
124
}