home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2006 June / PCpro_2006_06.ISO / files / freeware / openvip.exe / {app} / OutputSettingsDialog.py < prev    next >
Encoding:
Python Source  |  2004-01-30  |  11.9 KB  |  230 lines

  1. #
  2. # This file is part of OpenVIP (http://openvip.sourceforge.net)
  3. #
  4. # Copyright (C) 2002-2003
  5. # Michal Dvorak, Jiri Sedlar, Antonin Slavik, Vaclav Slavik, Jozef Smizansky
  6. #
  7. # This program is licensed under GNU General Public License version 2;
  8. # see file COPYING in the top level directory for details.
  9. #
  10. # $Id: OutputSettingsDialog.py,v 1.13 2004/01/26 22:13:04 tony_slavik Exp $
  11. #
  12.  
  13. from wxPython.wx import *
  14. import globals, worker, openvip
  15.  
  16. ID_PLUGIN = wxNewId()
  17. ID_OUTFILE = wxNewId()
  18. ID_ENABLEAUDIO = wxNewId()
  19. ID_ENABLEVIDEO = wxNewId()
  20. ID_VIEWER = wxNewId()
  21.  
  22. class   OutputSettingsDialog(wxDialog):
  23.         """Dialog with rendering options. It includes some basic settings
  24.            such as filename, width, height etc. In addition it displays
  25.            output-plugin-specific panel for setting its parameters."""
  26.         def __init__(self, *args,   **kwds):
  27.                 # begin wxGlade: OutputSettingsDialog.__init__
  28.                 kwds["style"] = wxDEFAULT_DIALOG_STYLE
  29.                 wxDialog.__init__(self, *args, **kwds)
  30.                 self.label_6_copy = wxStaticText(self, -1, "Output filename")
  31.                 self.output_filename = wxTextCtrl(self, -1, "")
  32.                 self.select_filename = wxButton(self, ID_OUTFILE, "...")
  33.                 self.render_radio = wxRadioBox(self, -1, "Render ...", choices=["Whole timeline", "Only selection"], majorDimension=0, style=wxRA_SPECIFY_COLS)
  34.                 self.use_viewer = wxCheckBox(self, -1, "External viewer")
  35.                 self.viewer = wxTextCtrl(self, -1, "")
  36.                 self.viewer_select = wxButton(self, ID_VIEWER, "...")
  37.                 self.static_line_1_copy = wxStaticLine(self, -1)
  38.                 self.enable_video = wxCheckBox(self, ID_ENABLEVIDEO, "Enable video track")
  39.                 self.video_dims = wxStaticText(self, -1, "Video dimensions")
  40.                 self.video_width = wxSpinCtrl(self, -1, "320", min=1, max=10000)
  41.                 self.video_height = wxSpinCtrl(self, -1, "180", min=1, max=10000)
  42.                 self.label_6_copy_1_copy = wxStaticText(self, -1, "Video FPS")
  43.                 self.video_fps = wxSpinCtrl(self, -1, "24", min=1, max=100, style=wxSP_ARROW_KEYS)
  44.                 self.enable_audio = wxCheckBox(self, ID_ENABLEAUDIO, "Enable audio track")
  45.                 self.label_6_copy_2 = wxStaticText(self, -1, "Audio channels")
  46.                 self.channels_choice = wxChoice(self, -1, choices=["mono", "stereo"])
  47.                 self.audio_samplerate_text = wxStaticText(self, -1, "Audio sample rate [Hz] ")
  48.                 self.audio_samplerate = wxComboBox(self, -1, choices=["11025", "22050", "44100"], style=wxCB_DROPDOWN)
  49.                 self.static_line_1 = wxStaticLine(self, -1)
  50.                 self.label_6 = wxStaticText(self, -1, "Select output plugin")
  51.                 self.plugin_choice = wxChoice(self, ID_PLUGIN, choices=["choice 1"])
  52.                 self.panel = wxPanel(self, -1)
  53.                 self.ok = wxButton(self, wxID_OK, "OK")
  54.                 self.cancel = wxButton(self, wxID_CANCEL, "Cancel")
  55.  
  56.                 self.__set_properties()
  57.                 self.__do_layout()
  58.                 # end wxGlade
  59.                 lib = globals.core
  60.                 self.plugins_list = lib.enum_plugins(openvip.PLUGIN_OUTPUT)
  61.                 self.plugin_choice.Clear()
  62.                 for p   in self.plugins_list:
  63.                     self.plugin_choice.Append(p.name)
  64.                 ff=self.plugin_choice.FindString('FFMpeg')
  65.                 if ff!=wxNOT_FOUND:
  66.                     self.plugin_choice.SetSelection(ff)
  67.                 else:
  68.                     self.plugin_choice.SetSelection(0)
  69.                 self.LoadContent(self.plugin_choice.GetStringSelection()+'Output')
  70.                 EVT_CHOICE(self,ID_PLUGIN,self.OnChange)
  71.                 EVT_BUTTON(self,ID_OUTFILE,self.OnFilename)
  72.                 EVT_BUTTON(self,ID_VIEWER,self.OnViewer)
  73.                 EVT_CHECKBOX(self, ID_ENABLEAUDIO, self.OnEnableAudio)
  74.                 EVT_CHECKBOX(self, ID_ENABLEVIDEO, self.OnEnableVideo)
  75.  
  76.         def __set_properties(self):
  77.                 # begin wxGlade: OutputSettingsDialog.__set_properties
  78.                 self.SetTitle("Output plugin settings")
  79.                 self.select_filename.SetSize((20,20))
  80.                 self.render_radio.SetSelection(0)
  81.                 self.viewer.SetSize((130, -1))
  82.                 self.viewer_select.SetSize((20,20))
  83.                 self.enable_video.SetValue(1)
  84.                 self.video_width.SetSize((70, 20))
  85.                 self.video_height.SetSize((70, 20))
  86.                 self.video_fps.SetSize((70, 20))
  87.                 self.enable_audio.SetValue(1)
  88.                 self.channels_choice.SetSelection(1)
  89.                 self.audio_samplerate.SetSelection(1)
  90.                 self.plugin_choice.SetSelection(0)
  91.                 self.ok.SetDefault()
  92.                 # end wxGlade
  93.  
  94.         def __do_layout(self):
  95.                 # begin wxGlade: OutputSettingsDialog.__do_layout
  96.                 sizer_4 = wxBoxSizer(wxVERTICAL)
  97.                 sizer_7 = wxBoxSizer(wxHORIZONTAL)
  98.                 sizer_2 = wxBoxSizer(wxHORIZONTAL)
  99.                 sizer_8 = wxBoxSizer(wxHORIZONTAL)
  100.                 sizer_8_copy_1_copy_copy = wxBoxSizer(wxHORIZONTAL)
  101.                 sizer_8_copy_2 = wxBoxSizer(wxHORIZONTAL)
  102.                 sizer_1_copy = wxBoxSizer(wxHORIZONTAL)
  103.                 sizer_8_copy_1_copy = wxBoxSizer(wxHORIZONTAL)
  104.                 sizer_8_copy_1 = wxBoxSizer(wxHORIZONTAL)
  105.                 sizer_1 = wxBoxSizer(wxHORIZONTAL)
  106.                 sizer_8_copy_copy = wxBoxSizer(wxHORIZONTAL)
  107.                 sizer_8_copy = wxBoxSizer(wxHORIZONTAL)
  108.                 sizer_8_copy.Add(self.label_6_copy, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  109.                 sizer_8_copy.Add(self.output_filename, 0, wxALIGN_CENTER_VERTICAL, 0)
  110.                 sizer_8_copy.Add(self.select_filename, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  111.                 sizer_4.Add(sizer_8_copy, 0, wxTOP|wxBOTTOM|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 20)
  112.                 sizer_4.Add(self.render_radio, 0, wxLEFT|wxRIGHT|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 20)
  113.                 sizer_8_copy_copy.Add(self.use_viewer, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  114.                 sizer_8_copy_copy.Add(self.viewer, 0, wxALIGN_CENTER_VERTICAL, 0)
  115.                 sizer_8_copy_copy.Add(self.viewer_select, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  116.                 sizer_4.Add(sizer_8_copy_copy, 0, wxBOTTOM, 20)
  117.                 sizer_4.Add(self.static_line_1_copy, 0, wxBOTTOM|wxEXPAND, 10)
  118.                 sizer_1.Add(self.enable_video, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 20)
  119.                 sizer_4.Add(sizer_1, 0, wxBOTTOM, 10)
  120.                 sizer_8_copy_1.Add(self.video_dims, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  121.                 sizer_8_copy_1.Add(self.video_width, 0, wxALIGN_CENTER_VERTICAL, 0)
  122.                 sizer_8_copy_1.Add(self.video_height, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  123.                 sizer_4.Add(sizer_8_copy_1, 0, wxBOTTOM|wxALIGN_CENTER_VERTICAL, 10)
  124.                 sizer_8_copy_1_copy.Add(self.label_6_copy_1_copy, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  125.                 sizer_8_copy_1_copy.Add(self.video_fps, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  126.                 sizer_4.Add(sizer_8_copy_1_copy, 0, wxBOTTOM|wxALIGN_CENTER_VERTICAL, 20)
  127.                 sizer_1_copy.Add(self.enable_audio, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 20)
  128.                 sizer_4.Add(sizer_1_copy, 0, wxBOTTOM, 10)
  129.                 sizer_8_copy_2.Add(self.label_6_copy_2, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  130.                 sizer_8_copy_2.Add(self.channels_choice, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  131.                 sizer_4.Add(sizer_8_copy_2, 0, wxBOTTOM|wxALIGN_CENTER_VERTICAL, 10)
  132.                 sizer_8_copy_1_copy_copy.Add(self.audio_samplerate_text, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  133.                 sizer_8_copy_1_copy_copy.Add(self.audio_samplerate, 0, wxRIGHT, 20)
  134.                 sizer_4.Add(sizer_8_copy_1_copy_copy, 0, wxBOTTOM|wxALIGN_CENTER_VERTICAL, 10)
  135.                 sizer_4.Add(self.static_line_1, 0, wxEXPAND, 0)
  136.                 sizer_8.Add(self.label_6, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  137.                 sizer_8.Add(self.plugin_choice, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 20)
  138.                 sizer_4.Add(sizer_8, 0, wxTOP|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 10)
  139.                 sizer_2.Add(self.panel, 0, wxLEFT|wxRIGHT|wxALIGN_CENTER_HORIZONTAL, 20)
  140.                 sizer_4.Add(sizer_2, 1, wxTOP|wxBOTTOM|wxEXPAND, 20)
  141.                 sizer_7.Add(self.ok, 0, wxLEFT|wxRIGHT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 20)
  142.                 sizer_7.Add(self.cancel, 0, wxRIGHT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 20)
  143.                 sizer_4.Add(sizer_7, 0, wxBOTTOM|wxALIGN_CENTER_HORIZONTAL, 20)
  144.                 self.SetAutoLayout(1)
  145.                 self.SetSizer(sizer_4)
  146.                 sizer_4.Fit(self)
  147.                 sizer_4.SetSizeHints(self)
  148.                 self.Layout()
  149.                 # end wxGlade
  150.  
  151.         def OnEnableAudio(self, event):
  152.             e=self.enable_audio.IsChecked()
  153.             self.audio_samplerate.Enable(e)
  154.             self.channels_choice.Enable(e)
  155.             
  156.         def OnEnableVideo(self, event):
  157.             e=self.enable_video.IsChecked()
  158.             self.video_width.Enable(e)
  159.             self.video_height.Enable(e)
  160.             self.video_fps.Enable(e)
  161.  
  162.         def LoadContent(self,   plugin):
  163.             """Loads the plugin-specific panel. These panels are located in
  164.                settings_dlgs directory and denominated <classname>.py."""
  165.             try:
  166.                 exec 'import settings_dlgs.%s' % plugin
  167.             except ImportError:
  168.                     wxLogError("No settings available   for '%s'." % plugin)
  169.                     return False
  170.             try:
  171.                     panel   =   eval('settings_dlgs.%s.getPanel(self,self.panel)'   %   plugin)
  172.             except NameError:
  173.                     wxLogError("No settings available   for '%s'." % plugin)
  174.                     return False
  175.             psizer = wxBoxSizer(wxHORIZONTAL)
  176.             psizer.Add(panel,   1, wxEXPAND)
  177.             self.panel.SetAutoLayout(1)
  178.             self.panel.SetSizer(psizer)
  179.             psizer.Fit(self.panel)
  180.             psizer.SetSizeHints(self.panel)
  181.             self.panel.Layout()
  182.             self.__do_layout()
  183.             self.SetTitle('Output plugin settings: %s' % (self.plugin_choice.GetStringSelection()))
  184.             self.plugin =   plugin
  185.             self.plugin_panel   =   panel
  186.             return True
  187.  
  188.         def OnChange(self, event):
  189.             self.LoadContent(self.plugin_choice.GetStringSelection()+'Output')
  190.  
  191.         def OnFilename(self, event):
  192.             ret = wxFileSelector('Render to ...', flags=wxSAVE|wxOVERWRITE_PROMPT)
  193.             if ret == '':
  194.                 return
  195.             self.output_filename.SetValue(ret)
  196.             
  197.         def OnViewer(self, event):
  198.             ret = wxFileSelector('Select viewer application ...', flags=wxFILE_MUST_EXIST)
  199.             if ret == '':
  200.                 return
  201.             self.viewer.SetValue(ret)
  202.             
  203.         def GetParams(self):
  204.             return self.plugin_panel.GetParams()
  205.  
  206. # The following methods return a boolean value indicating whether we are
  207. # saving video and/or audio stream. The output plugin must support this stream
  208. # and the corresponding checkbox must be toggled on.
  209.  
  210.         def HasAudio(self):
  211.             return self.enable_audio.IsChecked()
  212.  
  213.         def HasVideo(self):
  214.             return self.enable_video.IsChecked()
  215.  
  216. #   end of class OutputSettingsDialog
  217.  
  218.  
  219. #   ---------------- testing code   -----------------
  220. if __name__ == '__main__':
  221.         import sys
  222.         class   MyApp(wxApp):
  223.                 def OnInit(self):
  224.                         dlg =   OutputSettingsDialog(None, -1, "")
  225.                         dlg.ShowModal()
  226.                         return False
  227.         wxInitAllImageHandlers()
  228.         app =   MyApp(0)
  229.         app.MainLoop()
  230.