/* * medit-app.c * * Copyright (C) 2004-2006 by Yevgen Muntyan * * 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 2 of the License, or * (at your option) any later version. * * See COPYING file that comes with this distribution. */ #include "medit-ui.h" #include "THANKS.h" #include #include #include #include #include #if GTK_CHECK_VERSION(2,8,0) && defined(GDK_WINDOWING_X11) #include #define TIMESTAMP (gdk_x11_display_get_user_time (gdk_display_get_default ())) #else #define TIMESTAMP (0) #endif typedef enum { MODE_SIMPLE, MODE_PROJECT } AppMode; int _medit_parse_options (const char *const program_name, const int argc, char **const argv); /******************************************************** * command line parsing code generated by Opag * http://www.zero-based.org/software/opag/ */ %% n new-app "Run new instance of application" m mode "=[simple|project] Use specified mode" reqarg p project "=PROJECT Open project file PROJECT" optarg l line "=LINE Open file and position cursor on line LINE" reqarg log "[=FILE] Show debug output or write it to FILE" optarg version "Display version information and exit" return h help "Display this help text and exit" return %% /* end of generated code ********************************************************/ static void usage (void) { g_print ("Usage: %s [OPTIONS] [FILES]\n", g_get_prgname ()); g_print ("Options:\n%s", STR_HELP); } static void version (void) { g_print ("medit %s\n", MOO_VERSION); } static void check_args (int opt_remain) { if (_medit_opt_help) { usage (); exit (0); } if (opt_remain < 0) { usage (); exit (1); } if (_medit_opt_mode) { if (!_medit_arg_mode || (strcmp (_medit_arg_mode, "simple") && strcmp (_medit_arg_mode, "project"))) { usage (); exit (1); } } if (_medit_opt_project && _medit_arg_mode && strcmp (_medit_arg_mode, "project")) { usage (); exit (1); } if (_medit_opt_version) { version (); exit (0); } } int main (int argc, char *argv[]) { MooApp *app; int opt_remain; MooEditor *editor; char **files; gpointer window; int retval; gboolean new_instance = FALSE; gboolean run_input = TRUE; AppMode mode = MODE_SIMPLE; guint32 stamp; int line = 0; gtk_init (&argc, &argv); stamp = TIMESTAMP; // gdk_window_set_debug_updates (TRUE); opt_remain = _medit_parse_options (g_get_prgname (), argc, argv); check_args (opt_remain); if (_medit_opt_log) { if (_medit_arg_log) moo_set_log_func_file (_medit_arg_log); else moo_set_log_func_window (TRUE); } if (_medit_opt_mode) { if (!strcmp (_medit_arg_mode, "simple")) mode = MODE_SIMPLE; else mode = MODE_PROJECT; } if (_medit_opt_project) mode = MODE_PROJECT; if (_medit_opt_new_app || mode == MODE_PROJECT) new_instance = TRUE; files = moo_filenames_from_locale (argv + opt_remain); app = g_object_new (MOO_TYPE_APP, "argv", argv, "run-input", run_input, "short-name", "medit", "full-name", "medit", "description", "medit is a text editor", "website", "http://mooedit.sourceforge.net/", "website-label", "http://mooedit.sourceforge.net/", "default-ui", MEDIT_UI, "logo", MOO_STOCK_MEDIT, "credits", THANKS, NULL); if ((!new_instance && moo_app_send_files (app, files, stamp)) || !moo_app_init (app)) { gdk_notify_startup_complete (); g_strfreev (files); g_object_unref (app); return 0; } if (mode == MODE_PROJECT) { MooPlugin *plugin; plugin = moo_plugin_lookup ("ProjectManager"); if (!plugin) { g_printerr ("Could not initialize project manager plugin\n"); exit (1); } if (_medit_arg_project && *_medit_arg_project) { char *project = moo_filename_from_locale (_medit_arg_project); g_object_set (plugin, "project", _medit_arg_project, NULL); g_free (project); } moo_plugin_set_enabled (plugin, TRUE); } editor = moo_app_get_editor (app); window = moo_editor_new_window (editor); if (_medit_arg_line) line = strtol (_medit_arg_line, NULL, 10); if (files && *files) { char **p; for (p = files; p && *p; ++p) { if (p == files && _medit_arg_line) moo_editor_open_file_line (editor, *p, line, window); else moo_editor_new_file (editor, window, NULL, *p, NULL); } } g_strfreev (files); g_signal_connect_swapped (editor, "all-windows-closed", G_CALLBACK (moo_app_quit), app); retval = moo_app_run (app); g_object_unref (app); return retval; } #if defined(__WIN32__) && !defined(__GNUC__) #include int __stdcall WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, char *lpszCmdLine, int nCmdShow) { return main (__argc, __argv); } #endif