static bool RunMuxing(const std::string& dest_path, const std::string& args) { Gtk::Dialog dlg(BF_("Muxing \"%1%\"") % fs::name_str(dest_path) % bf::stop); SetDialogStrict(dlg, 400, -1); Gtk::TextView& txt_view = NewManaged<Gtk::TextView>(); Execution::Data edat; Gtk::ProgressBar& prg_bar = NewManaged<Gtk::ProgressBar>(); { Gtk::VBox& box = *dlg.get_vbox(); PackStart(box, prg_bar); Gtk::Expander& expdr = PackStart(box, NewManaged<Gtk::Expander>(_("Show/_hide Details"), true)); txt_view.set_editable(false); txt_view.set_size_request(0, 200); expdr.add(PackDetails(txt_view)); dlg.get_action_area()->set_layout(Gtk::BUTTONBOX_CENTER); dlg.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); dlg.signal_response().connect(bb::bind(&OnResponse, boost::ref(edat), _1)); dlg.show_all(); } //dlg.run(); ExitData ed; { Execution::Pulse pls(prg_bar); std::string cmd = boost::format("mplex -f 8 -o %1% %2%") % dest_path % args % bf::stop; AppendCommandText(txt_view, cmd); ed = ExecuteAsync(0, cmd.c_str(), TextViewAppender(txt_view), &edat.pid); } if( !ed.IsGood() && !edat.userAbort ) { MessageBox(_("Muxing error"), Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, BF_("The reason is \"%1%\" (see Details)") % ExitDescription(ed) % bf::stop); dlg.run(); } return ed.IsGood(); }
void OnNewProject(ConstructorApp& app, bool on_startup) { bool is_pal = Prefs().isPAL; Gtk::Dialog new_prj_dlg(_("New Project"), app.win, true, true); new_prj_dlg.set_name("NewProject"); new_prj_dlg.set_resizable(false); Gtk::VBox& dlg_box = *new_prj_dlg.get_vbox(); PackStart(dlg_box, NewManaged<Gtk::Image>(DataDirPath("cap400.png"))); Gtk::VBox& vbox = Add(PackStart(dlg_box, NewPaddingAlg(10, 40, 20, 20)), NewManaged<Gtk::VBox>()); PackStart(vbox, NewManaged<Gtk::Label>(_("Please select a Television standard for your project:"), 0.0, 0.5, true)); { Gtk::VBox& vbox2 = Add(PackStart(vbox, NewPaddingAlg(10, 10, 0, 0)), NewManaged<Gtk::VBox>()); Gtk::RadioButtonGroup grp; PackStart(vbox2, TVSelectionButton(is_pal, true, grp)); PackStart(vbox2, TVSelectionButton(is_pal, false, grp)); } Gtk::CheckButton r_btn(_("Remember my choice")); if( on_startup ) { // :TRICKY: в отличие от GtkAssistant, action_area в диалоге - // GtkButtonBox, который все свои виджеты делает одинаковыми, // не смотря на опции shrink, fill, padding (т.е. GtkButtonBox // заведомо хуже GtkBox в плане гибкости) //PackStart(*new_prj_dlg.get_action_area(), r_btn); PackStart(vbox, r_btn); new_prj_dlg.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); } else AddCancelOKButtons(new_prj_dlg); dlg_box.show_all(); if( Gtk::RESPONSE_OK == new_prj_dlg.run() ) { NewProject(); AData().SetPalTvSystem(is_pal); SetAppTitle(); if( on_startup && r_btn.get_active() ) { Prefs().isPAL = is_pal; // :TRICKY: если будут запросы обратно в false вернуть, то // добавим "очищающую" кнопку PackCompositeWdgButton() в диалог настроек Prefs().remMyTVChoice = true; SavePrefs(); } } }
Box *Box::PackStart(const WidgetSet &set) { for (size_t i = 0; i < set.numWidgets; ++i) PackStart(set.widgets[i]); return this; }
Box *Box::PackStart(const WidgetSet &set, Uint32 flags) { for (int i = 0; i < set.numWidgets; ++i) PackStart(set.widgets[i], flags); return this; }
bool MuxStreams(std::string& dest_fname, const std::string& src_fname) { Gtk::Dialog dlg(_("Mux streams")); SetDialogStrict(dlg, 400, -1); SaveChooser& sc = NewManaged<SaveChooser>(SMCLN_("Output")); Gtk::FileChooserButton& v_btn = NewManaged<Gtk::FileChooserButton>(_("Select elementary video"), Gtk::FILE_CHOOSER_ACTION_OPEN); Gtk::FileChooserButton& a_btn = NewManaged<Gtk::FileChooserButton>(_("Select audio"), Gtk::FILE_CHOOSER_ACTION_OPEN); { DialogVBox& vbox = AddHIGedVBox(dlg); AppendWithLabel(vbox, v_btn, SMCLN_("Video")); { Gtk::FileFilter f; f.set_name(_("MPEG2 elementary video (m2v)")); f.add_pattern("*.m2v"); v_btn.add_filter(f); } AppendWithLabel(vbox, a_btn, SMCLN_("Audio")); { Gtk::FileFilter f; f.set_name(_("Audio for DVD") + std::string(" (mp2/mpa, ac3, dts or 16bit lpcm)")); FillSoundFilter(f); a_btn.add_filter(f); } PackStart(vbox, sc); CompleteDialog(dlg); } v_btn.signal_selection_changed().connect(bb::bind(&OnVideoSelected, boost::ref(v_btn), boost::ref(a_btn), boost::ref(sc))); if( !src_fname.empty() ) { if( get_extension(src_fname) == "m2v" ) v_btn.set_filename(src_fname); else a_btn.set_filename(src_fname); } bool res = false; for( ; res = Gtk::RESPONSE_OK == dlg.run(), res; ) { dest_fname = GetFilename(sc); if( v_btn.get_filename().empty() ) ErrorBox(_("Elementary video file is not selected.")); else if( a_btn.get_filename().empty() ) ErrorBox(_("Audio file is not selected.")); else if( dest_fname.empty() ) ErrorBox(_("Output file name is empty.")); else if( CheckKeepOrigin(dest_fname) ) ; else break; } if( res ) { dlg.hide(); res = RunMuxing(dest_fname, boost::format("%1% %2%") % v_btn.get_filename() % a_btn.get_filename() % bf::stop ); } return res; }