Module: synfig
Branch: genete_master
Commit: f2a5ca9cf3c770c4eb236d0c5c1ae7ecab242787
URL:    
http://synfig.git.sourceforge.net/git/gitweb.cgi?p=synfig;a=commit;h=f2a5ca9cf3c770c4eb236d0c5c1ae7ecab242787

Author: Carlos Lopez <car...@pcnuevo.(none)>
Date:   Mon Jun 22 20:08:36 2009 +0200

Add Play/Stop button to the Frame Dial.

---

 synfig-studio/trunk/src/gtkmm/canvasview.cpp |   35 +++++++++++++++++++++++--
 synfig-studio/trunk/src/gtkmm/canvasview.h   |    4 +++
 synfig-studio/trunk/src/gtkmm/framedial.cpp  |    9 ++++--
 synfig-studio/trunk/src/gtkmm/framedial.h    |   12 ++++++---
 4 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/synfig-studio/trunk/src/gtkmm/canvasview.cpp 
b/synfig-studio/trunk/src/gtkmm/canvasview.cpp
index 32530cd..7c3aa0a 100644
--- a/synfig-studio/trunk/src/gtkmm/canvasview.cpp
+++ b/synfig-studio/trunk/src/gtkmm/canvasview.cpp
@@ -99,7 +99,6 @@
 #include "preview.h"
 #include "audiocontainer.h"
 #include "widget_timeslider.h"
-#include "framedial.h"
 #include "keyframedial.h"
 
 #include <synfigapp/main.h>
@@ -997,13 +996,16 @@ CanvasView::create_time_bar()
        current_time_widget->show();
 
        //Setup the FrameDial widget
-       FrameDial *framedial = manage(new class FrameDial());
+       framedial = manage(new class FrameDial());
        framedial->signal_seek_begin().connect(
                        sigc::bind(sigc::mem_fun(*canvas_interface().get(), 
&synfigapp::CanvasInterface::seek_time), Time::begin())
        );
        framedial->signal_seek_prev_frame().connect(
                        sigc::bind(sigc::mem_fun(*canvas_interface().get(), 
&synfigapp::CanvasInterface::seek_frame), -1)
        );
+       framedial->signal_play_stop().connect(
+                       sigc::mem_fun(*this, 
&studio::CanvasView::on_play_stop_pressed)
+       );
        framedial->signal_seek_next_frame().connect(
                        sigc::bind(sigc::mem_fun(*canvas_interface().get(), 
&synfigapp::CanvasInterface::seek_frame), 1)
        );
@@ -3154,8 +3156,8 @@ CanvasView::play()
                        return;
                }
        }
+       on_play_stop_pressed();
        is_playing_=false;
-
        time_adjustment().set_value(endtime);
        time_adjustment().value_changed();
 }
@@ -3919,3 +3921,30 @@ CanvasView::on_delete_event(GdkEventAny* event 
__attribute__ ((unused)))
 
        return true;
 }
+
+//! Modify the play stop button apearence and play stop the animation
+void
+CanvasView::on_play_stop_pressed()
+{
+       Gtk::Image *icon;
+       Gtk::Button *stop_button;
+       stop_button=framedial->get_play_button();
+       bool play_flag;
+       if(!is_playing())
+       {
+               icon = manage(new Gtk::Image(Gtk::Stock::MEDIA_STOP, 
Gtk::IconSize::from_name("synfig-small_icon")));
+               stop_button->set_relief(Gtk::RELIEF_NORMAL);
+               play_flag=true;
+       }
+       else
+       {
+               icon = manage(new Gtk::Image(Gtk::Stock::MEDIA_PLAY, 
Gtk::IconSize::from_name("synfig-small_icon")));
+               stop_button->set_relief(Gtk::RELIEF_NONE);
+               play_flag=false;
+       }
+       stop_button->remove();
+       stop_button->add(*icon);
+       icon->set_padding(0, 0);
+       icon->show();
+       if(play_flag) play(); else stop();
+}
diff --git a/synfig-studio/trunk/src/gtkmm/canvasview.h 
b/synfig-studio/trunk/src/gtkmm/canvasview.h
index 6f1f87e..844a57f 100644
--- a/synfig-studio/trunk/src/gtkmm/canvasview.h
+++ b/synfig-studio/trunk/src/gtkmm/canvasview.h
@@ -65,6 +65,7 @@
 
 #include "dialog_waypoint.h"
 #include "dialog_keyframe.h"
+#include "framedial.h"
 
 #include "duckmatic.h"
 #include <gtkmm/scale.h>
@@ -263,6 +264,7 @@ private:
        Gtk::Widget *timebar;
        Gtk::Button *animatebutton;
        Gtk::Button *keyframebutton;
+       FrameDial *framedial;
 
 
        //! Shows current time and allows edition
@@ -679,6 +681,8 @@ private:
        //void on_audio_play();
        bool on_audio_scrub();
 
+       void on_play_stop_pressed();
+
 protected:
        bool close_instance_when_safe();
        bool on_delete_event(GdkEventAny* event);
diff --git a/synfig-studio/trunk/src/gtkmm/framedial.cpp 
b/synfig-studio/trunk/src/gtkmm/framedial.cpp
index a361bd3..0392f4b 100644
--- a/synfig-studio/trunk/src/gtkmm/framedial.cpp
+++ b/synfig-studio/trunk/src/gtkmm/framedial.cpp
@@ -49,7 +49,7 @@ using namespace studio;
 
 /* === M E T H O D S ======================================================= */
 
-FrameDial::FrameDial(): Gtk::Table(3, 1, false)
+FrameDial::FrameDial(): Gtk::Table(5, 1, false)
 {
        Gtk::IconSize iconsize = Gtk::IconSize::from_name("synfig-small_icon");
 
@@ -57,6 +57,8 @@ FrameDial::FrameDial(): Gtk::Table(3, 1, false)
                                        _("Seek to Begin"));
        seek_prev_frame = create_icon(iconsize, Gtk::Stock::MEDIA_REWIND,
                                        _("Previous Frame"));
+       play_stop = create_icon(iconsize, Gtk::Stock::MEDIA_PLAY,
+                                       _("Play"));
        seek_next_frame = create_icon(iconsize, Gtk::Stock::MEDIA_FORWARD,
                                        _("Next Frame"));
        seek_end = create_icon(iconsize, Gtk::Stock::MEDIA_NEXT,
@@ -64,8 +66,9 @@ FrameDial::FrameDial(): Gtk::Table(3, 1, false)
 
        attach(*seek_begin, 0, 1, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        attach(*seek_prev_frame, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
-       attach(*seek_next_frame, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
-       attach(*seek_end, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
+       attach(*play_stop, 2, 3, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
+       attach(*seek_next_frame, 3, 4, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
+       attach(*seek_end, 4, 5, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
 }
 
 Gtk::Button *
diff --git a/synfig-studio/trunk/src/gtkmm/framedial.h 
b/synfig-studio/trunk/src/gtkmm/framedial.h
index 01f2be0..89dfac3 100644
--- a/synfig-studio/trunk/src/gtkmm/framedial.h
+++ b/synfig-studio/trunk/src/gtkmm/framedial.h
@@ -50,6 +50,7 @@ class FrameDial : public Gtk::Table
 
        Gtk::Button *seek_begin;
        Gtk::Button *seek_prev_frame;
+       Gtk::Button *play_stop;
        Gtk::Button *seek_next_frame;
        Gtk::Button *seek_end;
 
@@ -59,10 +60,13 @@ class FrameDial : public Gtk::Table
 public:
        FrameDial();
 
-       Glib::SignalProxy0<void> signal_seek_begin()       { return 
seek_begin->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_prev_frame()  { return 
seek_prev_frame->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_next_frame()  { return 
seek_next_frame->signal_clicked(); }
-       Glib::SignalProxy0<void> signal_seek_end()         { return 
seek_end->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_begin()            { return 
seek_begin->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_prev_frame()       { return 
seek_prev_frame->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_play_stop()                     { 
return play_stop->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_next_frame()       { return 
seek_next_frame->signal_clicked(); }
+       Glib::SignalProxy0<void> signal_seek_end()                      { 
return seek_end->signal_clicked(); }
+
+       Gtk::Button *get_play_button() { return play_stop; }
 
 }; // END of class FrameDial
 


------------------------------------------------------------------------------
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to