summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul W. Frields <stickster@gmail.com>2009-06-29 00:30:05 +0200
committerPaul W. Frields <stickster@gmail.com>2009-06-29 00:30:05 +0200
commit9ef29a88256ca25fa2d0e4c16e31382bb22c7043 (patch)
tree62f52799dbe65b57ba313de1ae9e348fb1879067
parent867da5cb30508d81f21ab1bbe29d43172e063ec4 (diff)
downloadpulsecaster-9ef29a88256ca25fa2d0e4c16e31382bb22c7043.tar.gz
pulsecaster-9ef29a88256ca25fa2d0e4c16e31382bb22c7043.tar.xz
pulsecaster-9ef29a88256ca25fa2d0e4c16e31382bb22c7043.zip
Add file chooser dialog and functionality
-rw-r--r--data/pulsecaster.glade87
-rw-r--r--pulsecaster/ui.py26
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">&#x25CF;</property>
+ <child>
+ <widget class="GtkEntry" id="file_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">&#x25CF;</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):