Пример #1
0
ApplicationSettings get_settings_cmdline(int argc, char *argv[])
{
    ApplicationSettings settings;
    settings.input_path = LIGHT_DETECTION_FILENAME;
    settings.output_path = VIDEO_OUTPUT_PATH;
    settings.light_seconds = LIGHT_DETECTION_SECONDS;
    settings.audio_device = AUDIO_DEVICE;
    settings.video_bitrate = VIDEO_BITRATE;
    settings.video_caps = VIDEO_CAPS;
    settings.video_speedpreset = VIDEO_SPEEDPRESET;
    settings.video_device = VIDEO_DEVICE;
    settings.streaming_enable = STREAMING_ENABLE;
    settings.streaming_port = STREAMING_PORT;
    settings.invert_value = INVERT_VALUE;

    Glib::OptionGroup pathesGroup("settings", "application settings");
    Glib::OptionEntry pathDetector;
    pathDetector.set_short_name('i');
    pathDetector.set_long_name("input-path");
    Glib::OptionEntry pathOutput;
    pathOutput.set_short_name('o');
    pathOutput.set_long_name("output-path");
    Glib::OptionEntry lightSeconds;
    lightSeconds.set_short_name('s');
    lightSeconds.set_long_name("light-seconds");
    Glib::OptionEntry audioDevice;
    audioDevice.set_short_name('a');
    audioDevice.set_long_name("alsa-device");
    Glib::OptionEntry videoBitrate;
    videoBitrate.set_short_name('r');
    videoBitrate.set_long_name("video-bitrate");
    Glib::OptionEntry videoCaps;
    videoCaps.set_short_name('c');
    videoCaps.set_long_name("video-caps");
    Glib::OptionEntry videoDevice;
    videoDevice.set_short_name('v');
    videoDevice.set_long_name("v4l-device");
    Glib::OptionEntry videoSpeedPreset;
    videoSpeedPreset.set_short_name('p');
    videoSpeedPreset.set_long_name("video-speed-preset");
    Glib::OptionEntry streamingEnable;
    streamingEnable.set_long_name("enable-streaming");
    Glib::OptionEntry streamingPort;
    streamingPort.set_long_name("streaming-port");
    Glib::OptionEntry invertValue;
    invertValue.set_long_name("invert-value");

    pathesGroup.add_entry_filename(pathDetector, settings.input_path);
    pathesGroup.add_entry_filename(pathOutput, settings.output_path);
    pathesGroup.add_entry(lightSeconds, settings.light_seconds);
    pathesGroup.add_entry(audioDevice, settings.audio_device);
    pathesGroup.add_entry(videoBitrate, settings.video_bitrate);
    pathesGroup.add_entry(videoCaps, settings.video_caps);
    pathesGroup.add_entry(videoDevice, settings.video_device);
    pathesGroup.add_entry(videoSpeedPreset, settings.video_speedpreset);
    pathesGroup.add_entry(streamingEnable, settings.streaming_enable);
    pathesGroup.add_entry(streamingPort, settings.streaming_port);
    pathesGroup.add_entry(invertValue, settings.invert_value);

    Glib::OptionContext context;

    context.set_help_enabled(true);
    context.set_main_group(pathesGroup);

    context.parse(argc, argv);

    return settings;
}
Пример #2
0
int main(int argc, char * argv[])
{
  bool bShowVersion = false;
  Glib::OptionGroup::vecustrings listRemaining;

#ifdef ENABLE_NLS
  setlocale(LC_ALL, "");
  bindtextdomain("gvbam", LOCALEDIR);
  textdomain("gvbam");
#endif // ENABLE_NLS

  Glib::set_application_name(_("VBA-M"));

  Gtk::Main oKit(argc, argv);

#ifdef USE_OPENGL
  Gtk::GL::init(argc, argv);
#endif // USE_OPENGL

  Glib::OptionContext oContext;
  Glib::OptionGroup oGroup("main_group", _("Main VBA-M options"));

  Glib::OptionEntry oVersion;
  oVersion.set_long_name("version");
  oVersion.set_short_name('v');
  oVersion.set_description(_("Output version information."));
  oGroup.add_entry(oVersion, bShowVersion);

  Glib::OptionEntry oFileName;
  oFileName.set_long_name(G_OPTION_REMAINING);
  oFileName.set_description(G_OPTION_REMAINING);
  oGroup.add_entry(oFileName, listRemaining);

  oContext.set_main_group(oGroup);

  try
  {
    oContext.parse(argc, argv);
  }
  catch (const Glib::Error& e)
  {
    Gtk::MessageDialog oDialog(e.what(),
                               false,
                               Gtk::MESSAGE_ERROR,
                               Gtk::BUTTONS_OK);
    oDialog.run();
    return 1;
  }

  if (bShowVersion)
  {
    g_print(_("VisualBoyAdvance version %s [GTK+]\n"), VERSION);
    exit(0);
  }

  Gtk::Window::set_default_icon_name("vbam");

  std::string sGtkBuilderFile = VBA::Window::sGetUiFilePath("vbam.ui");

  Glib::RefPtr<Gtk::Builder> poXml;
  try
  {
    poXml = Gtk::Builder::create();
    poXml->add_from_file(sGtkBuilderFile, "accelgroup1");
    poXml->add_from_file(sGtkBuilderFile, "MainWindow");
  }
  catch (const Gtk::BuilderError & e)
  {
    Gtk::MessageDialog oDialog(e.what(),
                               false,
                               Gtk::MESSAGE_ERROR,
                               Gtk::BUTTONS_OK);
    oDialog.run();
    return 1;
  }

  VBA::Window * poWindow = NULL;
  poXml->get_widget_derived<VBA::Window>("MainWindow", poWindow);

  if (listRemaining.size() == 1)
  {
    // Display the window before loading the file
    poWindow->show();
    while (Gtk::Main::events_pending())
    {
      Gtk::Main::iteration();
    }

    poWindow->bLoadROM(listRemaining[0]);
  }

  Gtk::Main::run(*poWindow);
  delete poWindow;

  return 0;
}