Blame src/main.c

Packit 1e8aac
/*
Packit 1e8aac
 * Copyright (C) 2001 Ximian, Inc.
Packit 1e8aac
 *
Packit 1e8aac
 * This program is free software; you can redistribute it and/or modify
Packit 1e8aac
 * it under the terms of the GNU General Public License as
Packit 1e8aac
 * published by the Free Software Foundation; either version 2 of the
Packit 1e8aac
 * License, or (at your option) any later version.
Packit 1e8aac
 *
Packit 1e8aac
 * This program is distributed in the hope that it will be useful,
Packit 1e8aac
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 1e8aac
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 1e8aac
 * GNU General Public License for more details.
Packit 1e8aac
 *
Packit 1e8aac
 * You should have received a copy of the GNU General Public License
Packit 1e8aac
 * along with this program; if not, write to the Free Software
Packit 1e8aac
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit 1e8aac
 *
Packit 1e8aac
 * Authors:
Packit 1e8aac
 *   Chema Celorio <chema@celorio.com>
Packit 1e8aac
 *   Vincent Geddes <vgeddes@gnome.org>
Packit 1e8aac
 */
Packit 1e8aac
Packit 1e8aac
#include <config.h>
Packit 1e8aac
Packit 1e8aac
#include "glade-window.h"
Packit 1e8aac
#include "glade-resources.h"
Packit 1e8aac
Packit 1e8aac
#include <gladeui/glade.h>
Packit 1e8aac
#include <gladeui/glade-app.h>
Packit 1e8aac
#include <gladeui/glade-debug.h>
Packit 1e8aac
Packit 1e8aac
#include <stdlib.h>
Packit 1e8aac
#include <locale.h>
Packit 1e8aac
#include <glib.h>
Packit 1e8aac
#include <glib/gi18n.h>
Packit 1e8aac
#include <gmodule.h>
Packit 1e8aac
Packit 1e8aac
#ifdef G_OS_WIN32
Packit 1e8aac
#  include <windows.h>
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
#define APPLICATION_NAME (_("Glade"))
Packit 1e8aac
Packit 1e8aac
Packit 1e8aac
/* Application arguments */
Packit 1e8aac
static gboolean version = FALSE, without_devhelp = FALSE;
Packit 1e8aac
static gchar **files = NULL;
Packit 1e8aac
Packit 1e8aac
static GOptionEntry option_entries[] = {
Packit 1e8aac
  {"version", '\0', 0, G_OPTION_ARG_NONE, &version,
Packit 1e8aac
   N_("Output version information and exit"), NULL},
Packit 1e8aac
Packit 1e8aac
  {"without-devhelp", '\0', 0, G_OPTION_ARG_NONE, &without_devhelp,
Packit 1e8aac
   N_("Disable Devhelp integration"), NULL},
Packit 1e8aac
Packit 1e8aac
  {G_OPTION_REMAINING, '\0', 0, G_OPTION_ARG_FILENAME_ARRAY, &files,
Packit 1e8aac
   NULL, N_("[FILE...]")},
Packit 1e8aac
Packit 1e8aac
  {NULL}
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
/* Debugging arguments */
Packit 1e8aac
static gboolean verbose = FALSE;
Packit 1e8aac
Packit 1e8aac
static GOptionEntry debug_option_entries[] = {
Packit 1e8aac
  {"verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, N_("be verbose"), NULL},
Packit 1e8aac
  {NULL}
Packit 1e8aac
};
Packit 1e8aac
Packit 1e8aac
int
Packit 1e8aac
main (int argc, char *argv[])
Packit 1e8aac
{
Packit 1e8aac
  GladeWindow *window;
Packit 1e8aac
  GOptionContext *option_context;
Packit 1e8aac
  GOptionGroup *option_group;
Packit 1e8aac
  GError *error = NULL;
Packit 1e8aac
  GTimer *timer = NULL;
Packit 1e8aac
Packit 1e8aac
#ifdef ENABLE_NLS
Packit 1e8aac
  setlocale (LC_ALL, "");
Packit 1e8aac
  bindtextdomain (GETTEXT_PACKAGE, glade_app_get_locale_dir ());
Packit 1e8aac
  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
Packit 1e8aac
  textdomain (GETTEXT_PACKAGE);
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
  /* Set up option groups */
Packit 1e8aac
  option_context = g_option_context_new (NULL);
Packit 1e8aac
Packit 1e8aac
  g_option_context_set_summary (option_context,
Packit 1e8aac
                                N_("Create or edit user interface designs for GTK+ or GNOME applications."));
Packit 1e8aac
  g_option_context_set_translation_domain (option_context, GETTEXT_PACKAGE);
Packit 1e8aac
Packit 1e8aac
  option_group = g_option_group_new ("glade",
Packit 1e8aac
                                     N_("Glade options"),
Packit 1e8aac
                                     N_("Glade options"), NULL, NULL);
Packit 1e8aac
  g_option_group_add_entries (option_group, option_entries);
Packit 1e8aac
  g_option_context_set_main_group (option_context, option_group);
Packit 1e8aac
  g_option_group_set_translation_domain (option_group, GETTEXT_PACKAGE);
Packit 1e8aac
Packit 1e8aac
  option_group = g_option_group_new ("debug",
Packit 1e8aac
                                     N_("Glade debug options"),
Packit 1e8aac
                                     N_("Show Glade debug options"),
Packit 1e8aac
                                     NULL, NULL);
Packit 1e8aac
  g_option_group_add_entries (option_group, debug_option_entries);
Packit 1e8aac
  g_option_group_set_translation_domain (option_group, GETTEXT_PACKAGE);
Packit 1e8aac
  g_option_context_add_group (option_context, option_group);
Packit 1e8aac
Packit 1e8aac
  /* Add Gtk option group */
Packit 1e8aac
  g_option_context_add_group (option_context, gtk_get_option_group (FALSE));
Packit 1e8aac
Packit 1e8aac
  /* Parse command line */
Packit 1e8aac
  if (!g_option_context_parse (option_context, &argc, &argv, &error))
Packit 1e8aac
    {
Packit 1e8aac
      g_option_context_free (option_context);
Packit 1e8aac
Packit 1e8aac
      if (error)
Packit 1e8aac
        {
Packit 1e8aac
          g_print ("%s\n", error->message);
Packit 1e8aac
          g_error_free (error);
Packit 1e8aac
        }
Packit 1e8aac
      else
Packit 1e8aac
        g_print ("An unknown error occurred\n");
Packit 1e8aac
Packit 1e8aac
      return -1;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  g_option_context_free (option_context);
Packit 1e8aac
  option_context = NULL;
Packit 1e8aac
Packit 1e8aac
  if (version != FALSE)
Packit 1e8aac
    {
Packit 1e8aac
      /* Print version information and exit */
Packit 1e8aac
      g_print ("%s\n", PACKAGE_STRING);
Packit 1e8aac
      return 0;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  /* Pass NULL here since we parsed the gtk+ args already...
Packit 1e8aac
   * from this point on we need a DISPLAY variable to be set.
Packit 1e8aac
   */
Packit 1e8aac
  gtk_init (NULL, NULL);
Packit 1e8aac
Packit 1e8aac
  /* Check for gmodule support */
Packit 1e8aac
  if (!g_module_supported ())
Packit 1e8aac
    {
Packit 1e8aac
      g_warning (_("gmodule support not found. gmodule support is required "
Packit 1e8aac
                   "for glade to work"));
Packit 1e8aac
      return -1;
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  g_set_application_name (APPLICATION_NAME);
Packit 1e8aac
  gtk_window_set_default_icon_name ("glade");
Packit 1e8aac
Packit 1e8aac
  glade_setup_log_handlers ();
Packit 1e8aac
Packit 1e8aac
  window = GLADE_WINDOW (glade_window_new ());
Packit 1e8aac
Packit 1e8aac
  if (without_devhelp == FALSE)
Packit 1e8aac
    glade_window_check_devhelp (window);
Packit 1e8aac
Packit 1e8aac
  gtk_widget_show (GTK_WIDGET (window));
Packit 1e8aac
Packit 1e8aac
  /* Update UI before loading files */
Packit 1e8aac
  while (gtk_events_pending ()) gtk_main_iteration ();
Packit 1e8aac
Packit 1e8aac
  if (verbose) timer = g_timer_new ();
Packit 1e8aac
  
Packit 1e8aac
  /* load files specified on commandline */
Packit 1e8aac
  if (files != NULL)
Packit 1e8aac
    {
Packit 1e8aac
      guint i;
Packit 1e8aac
Packit 1e8aac
      for (i = 0; files[i]; ++i)
Packit 1e8aac
        {
Packit 1e8aac
          if (verbose) g_timer_start (timer);
Packit 1e8aac
          
Packit 1e8aac
          if (g_file_test (files[i], G_FILE_TEST_EXISTS) != FALSE)
Packit 1e8aac
	    glade_window_open_project (window, files[i]);
Packit 1e8aac
          else
Packit 1e8aac
            g_warning (_("Unable to open '%s', the file does not exist.\n"),
Packit 1e8aac
                       files[i]);
Packit 1e8aac
Packit 1e8aac
          if (verbose)
Packit 1e8aac
            {
Packit 1e8aac
              g_timer_stop (timer);
Packit 1e8aac
              g_message ("Loading '%s' took %lf seconds", files[i],
Packit 1e8aac
                         g_timer_elapsed (timer, NULL));
Packit 1e8aac
            }
Packit 1e8aac
        }
Packit 1e8aac
      g_strfreev (files);
Packit 1e8aac
    }
Packit 1e8aac
Packit 1e8aac
  if (verbose) g_timer_destroy (timer);
Packit 1e8aac
Packit 1e8aac
  glade_window_registration_notify_user (window);
Packit 1e8aac
  
Packit 1e8aac
  gtk_main ();
Packit 1e8aac
Packit 1e8aac
  return 0;
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
#ifdef G_OS_WIN32
Packit 1e8aac
Packit 1e8aac
/* In case we build this as a windowed application. */
Packit 1e8aac
Packit 1e8aac
#ifdef __GNUC__
Packit 1e8aac
#  ifndef _stdcall
Packit 1e8aac
#    define _stdcall  __attribute__((stdcall))
Packit 1e8aac
#  endif
Packit 1e8aac
#endif
Packit 1e8aac
Packit 1e8aac
int _stdcall
Packit 1e8aac
WinMain (struct HINSTANCE__ *hInstance,
Packit 1e8aac
         struct HINSTANCE__ *hPrevInstance, char *lpszCmdLine, int nCmdShow)
Packit 1e8aac
{
Packit 1e8aac
  return main (__argc, __argv);
Packit 1e8aac
}
Packit 1e8aac
Packit 1e8aac
#endif