diff options
author | Paul W. Frields <stickster@gmail.com> | 2009-06-29 00:30:05 +0200 |
---|---|---|
committer | Paul W. Frields <stickster@gmail.com> | 2009-06-29 00:30:05 +0200 |
commit | 9ef29a88256ca25fa2d0e4c16e31382bb22c7043 (patch) | |
tree | 62f52799dbe65b57ba313de1ae9e348fb1879067 | |
parent | 867da5cb30508d81f21ab1bbe29d43172e063ec4 (diff) | |
download | pulsecaster-9ef29a88256ca25fa2d0e4c16e31382bb22c7043.tar.gz pulsecaster-9ef29a88256ca25fa2d0e4c16e31382bb22c7043.tar.xz pulsecaster-9ef29a88256ca25fa2d0e4c16e31382bb22c7043.zip |
Add file chooser dialog and functionality
-rw-r--r-- | data/pulsecaster.glade | 87 | ||||
-rw-r--r-- | pulsecaster/ui.py | 26 |
2 files changed, 107 insertions, 6 deletions
diff --git a/data/pulsecaster.glade b/data/pulsecaster.glade index cade102..d49b1fa 100644 --- a/data/pulsecaster.glade +++ b/data/pulsecaster.glade @@ -166,10 +166,32 @@ <placeholder/> </child> <child> - <widget class="GtkEntry" id="file_entry"> + <widget class="GtkHBox" id="hbox2"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> + <child> + <widget class="GtkEntry" id="file_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + </widget> + <packing> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="open_button"> + <property name="label" translatable="yes">gtk-open</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> </widget> <packing> <property name="position">2</property> @@ -253,4 +275,63 @@ </widget> </child> </widget> + <widget class="GtkFileChooserDialog" id="file_chooser"> + <property name="border_width">5</property> + <property name="modal">True</property> + <property name="destroy_with_parent">True</property> + <property name="type_hint">normal</property> + <property name="has_separator">False</property> + <property name="do_overwrite_confirmation">True</property> + <property name="action">save</property> + <child internal-child="vbox"> + <widget class="GtkVBox" id="dialog-vbox4"> + <property name="visible">True</property> + <property name="orientation">vertical</property> + <property name="spacing">2</property> + <child> + <placeholder/> + </child> + <child internal-child="action_area"> + <widget class="GtkHButtonBox" id="dialog-action_area4"> + <property name="visible">True</property> + <property name="layout_style">end</property> + <child> + <widget class="GtkButton" id="file_chooser_cancel_button"> + <property name="label" translatable="yes">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <widget class="GtkButton" id="file_chooser_save_button"> + <property name="label" translatable="yes">gtk-save</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + <property name="xalign">0.43999999761581421</property> + </widget> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </widget> + <packing> + <property name="expand">False</property> + <property name="pack_type">end</property> + <property name="position">0</property> + </packing> + </child> + </widget> + </child> + </widget> </glade-interface> diff --git a/pulsecaster/ui.py b/pulsecaster/ui.py index 7eabc07..345984e 100644 --- a/pulsecaster/ui.py +++ b/pulsecaster/ui.py @@ -93,8 +93,16 @@ class PulseCasterUI: self.repop_sources() self.listener = PulseCasterListener(self) - self.filesinkpath = os.path.join(os.getenv('HOME'), 'podcast.ogg') self.file_entry = self.xml.get_widget('file_entry') + self.file_chooser = self.xml.get_widget('file_chooser') + self.open_button = self.xml.get_widget('open_button') + self.open_button.connect('button-press-event', self.showFileChooser) + self.file_chooser_cancel_button = self.xml.get_widget('file_chooser_cancel_button') + self.file_chooser_cancel_button.connect('button-press-event', self.hideFileChooser) + self.file_chooser_save_button = self.xml.get_widget('file_chooser_save_button') + self.file_chooser_save_button.connect('button-press-event', self.updateFileSinkPath) + self.filesinkpath = os.path.join(os.getenv('HOME'), 'podcast.ogg') + self.file_chooser.set_filename(self.filesinkpath) self.file_entry.set_text(self.filesinkpath) def repop_sources(self, *args): @@ -121,7 +129,7 @@ class PulseCasterUI: def on_record(self, *args): # Get filename # Check whether filename exists, if so, overwrite? y/n - filesinkpath = self.file_entry.get_text() + filesinkpath = self.file_button.get_file() if filesinkpath is None: return # Set up GStreamer stuff @@ -178,7 +186,19 @@ class PulseCasterUI: def hideAbout(self, *args): self.about.hide() - + + def showFileChooser(self, *args): + self.file_chooser.set_filename(self.filesinkpath) + self.file_chooser.show() + + def hideFileChooser(self, *args): + self.file_chooser.hide() + + def updateFileSinkPath(self, *args): + self.hideFileChooser() + self.filesinkpath = self.file_chooser.get_filename() + self.file_entry.set_text(self.filesinkpath) + class PulseCasterListener: def __init__(self, ui): |