view gui/src/octave-gui.cc @ 15137:16a6b0a6855d gui

GUI: support for octave arguments and integrate with run-octave. * src/octave.h (octave_initialize_interpreter, octave_execute_interpreter): New functions. (octave_cmdline_argc, octave_cmdline_argv, octave_embedded): New variables. * src/octave.cc (octave_cmdline_argc, octave_cmdline_argv, octave_embedded): New variables. (octave_initialize_interpreter, octave_execute_interpreter): New functions. (octave_main): Rewrite using them. * run-octave.in (octave_executable): New variable. (-gui): New option flag. * gui/src/octave-adapter/octave-main-thread.cc (octave_main_thread::run): Use octave_execute_interpreter. * gui/src/octave-gui.cc (dissociate_terminal): New function. (main): Use it. Also use octave_initialize_interpreter.
author John W. Eaton <jwe@octave.org>
date Sun, 05 Aug 2012 16:15:58 -0400
parents d02b229ce693
children bfc220d1de67
line wrap: on
line source

/* OctaveGUI - A graphical user interface for Octave
 * Copyright (C) 2011 Jacob Dawid (jacob.dawid@googlemail.com)
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#include <QtGui/QApplication>
#include <QTranslator>
#include <QSettings>
#include "welcome-wizard.h"
#include "resource-manager.h"
#include "main-window.h"

// Dissociate from the controlling terminal, if any.

static void
dissociate_terminal (void)
{
#if ! defined (Q_OS_WIN32) || defined (Q_OS_CYGWIN)
  pid_t pid = fork ();

  if (pid < 0)
    {
      std::cerr << "fork failed!" << std::endl;;
      exit (1);
    }
  else if (pid == 0)
    {
      // Child.

      if (setsid () < 0)
        {
          std::cerr << "setsid error" << std::endl;
          exit (1);
        }
    }
  else
    exit (0);
#endif
}

int
main (int argc, char *argv[])
{
  octave_initialize_interpreter (argc, argv, 0);

  dissociate_terminal ();

  QApplication application (argc, argv);

  while (true)
    {
      if (resource_manager::instance ()->is_first_run ())
        {
          welcome_wizard welcomeWizard;
          welcomeWizard.exec ();
          resource_manager::instance ()->reload_settings ();
        }
      else
        {
          QSettings *settings = resource_manager::instance ()->get_settings ();
          QString language = settings->value ("language").toString ();

          QString translatorFile = resource_manager::instance ()->find_translator_file (language);
          QTranslator translator;
          translator.load (translatorFile);
          application.installTranslator (&translator);

          resource_manager::instance ()->update_network_settings ();

          main_window w;
          w.show ();
          return application.exec ();
        }
    }
}