summaryrefslogtreecommitdiff
path: root/gtk2_ardour/imageframe_socket_handler.h
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/imageframe_socket_handler.h
parente4b9aed743fc765219ac775905a221c017c88fba (diff)
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/imageframe_socket_handler.h')
-rw-r--r--gtk2_ardour/imageframe_socket_handler.h705
1 files changed, 705 insertions, 0 deletions
diff --git a/gtk2_ardour/imageframe_socket_handler.h b/gtk2_ardour/imageframe_socket_handler.h
new file mode 100644
index 0000000000..93a82b63bb
--- /dev/null
+++ b/gtk2_ardour/imageframe_socket_handler.h
@@ -0,0 +1,705 @@
+/*
+ Copyright (C) 2003 Paul Davis
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id$
+*/
+
+#ifndef __ardour_gtk_imageframe_socket_handler_h__
+#define __ardour_gtk_imageframe_socket_handler_h__
+
+#include <string>
+#include <gtk--.h>
+#include <list>
+#include "editor.h"
+#include "ardour_image_compositor_socket.h"
+
+class TimeAxisViewItem ;
+class ImageFrameView ;
+class MarkerView ;
+class ImageFrameTimeAxisGroup ;
+
+/**
+ * ImageFrameSocketHandler defines the handler between Ardour and an Image Compositor
+ * As this is purely visual, we do all processing within the main gtk loop via
+ * message passing through a socket.
+ *
+ */
+class ImageFrameSocketHandler : public SigC::Object
+{
+ public:
+ /**
+ * Constructs a new ImageFrameSocketHandler to handle communication between Ardour and the Image Compositor
+ *
+ * @param ed the PublicEditor
+ */
+ ImageFrameSocketHandler(PublicEditor& ed) ;
+
+ /**
+ * Descructor
+ * this will shutdown the socket if open
+ */
+ virtual ~ImageFrameSocketHandler() ;
+
+ /**
+ * Returns the instance of the ImageFrameSocketHandler
+ * the instance should first be created with createInstance
+ *
+ * @return the instance of the ImageFrameSocketHandler
+ */
+ static ImageFrameSocketHandler* get_instance() ;
+
+ /**
+ * call back to handle doing the processing work
+ * This method is added to the gdk main loop and called when there is data
+ * upon the socket.
+ *
+ */
+ static void image_socket_callback(void *arg, int32_t fd, GdkInputCondition cond) ;
+
+ /**
+ * Attempt to connect to the image compositor on the specified host and port
+ *
+ * @param hostIp the ip address of the image compositor host
+ * @param port the oprt number to attemp the connection on
+ * @return true if the connection was a succees
+ * false otherwise
+ */
+ bool connect(std::string hostIp, int32_t port) ;
+
+ /**
+ * Closes the connection to th Image Compositor
+ *
+ */
+ void close_connection() ;
+ /**
+ * Returns true if this ImagFrameSocketHandler is currently connected to rthe image compositor
+ *
+ * @return true if connected to the image compositor
+ */
+ bool is_connected() ;
+
+ /**
+ * Sets the tag used to describe this input within gtk
+ * this is returned when gdk_input_add is called and is required to remove the input
+ *
+ * @param tag the gdk input tag of this input
+ */
+ void set_gdk_input_tag(int tag) ;
+
+ /**
+ * Returns the gdk input tag of this input
+ *
+ * @return the gdk input tag of this input
+ * @see setGdkInputTag
+ */
+ int get_gdk_input_tag() ;
+
+
+ /**
+ * Returns the socket file descriptor
+ *
+ * @return the Sockt file descriptor
+ */
+ int get_socket_descriptor() ;
+
+
+ //---------------------------------------------------------------------------------------//
+ // Handle Sending messages to the Image Compositor
+
+ //----------------------------
+ // ImageFrameTimeAxis Messages
+
+ /**
+ * Sends a message stating that the named image frame time axis has been removed
+ *
+ * @param track_id the unique id of the removed image frame time axis
+ * @param src the identity of the object that initiated the change
+ */
+ void send_imageframe_time_axis_removed(std::string track_id, void* src) ;
+
+ /**
+ * Sends a message indicating that an ImageFrameTimeAxis has been renamed
+ *
+ * @param new_id the new name, or Id, of the track
+ * @param old_id the old name, or Id, of the track
+ * @param src the identity of the object that initiated the change
+ * @param time_axis the time axis that has changed
+ */
+ void send_imageframe_time_axis_renamed(std::string new_id, std::string old_id, void* src, ImageFrameTimeAxis* time_axis) ;
+
+ //------------------------
+ // MarkerTimeAxis Messages
+
+ /**
+ * Sends a message stating that the named marker time axis has been removed
+ *
+ * @param track_id the unique id of the removed image frame time axis
+ * @param src the identity of the object that initiated the change
+ */
+ void send_marker_time_axis_removed(std::string track_id, void* src) ;
+
+ /**
+ * Sends a message indicating that an MarkerTimeAxis has been renamed
+ *
+ * @param new_id the new name, or Id, of the track
+ * @param old_id the old name, or Id, of the track
+ * @param src the identity of the object that initiated the change
+ * @param time_axis the time axis that has changed
+ */
+ void send_marker_time_axis_renamed(std::string new_id, std::string old_id, void* src, MarkerTimeAxis* time_axis) ;
+
+
+ //---------------------------------
+ // ImageFrameTimeAxisGroup Messages
+
+ /**
+ * Sends a message stating that the group has been removed
+ *
+ * @param group_id the unique id of the removed image frame time axis
+ * @param src the identity of the object that initiated the change
+ * @param group the group that has changed
+ */
+ void send_imageframe_time_axis_group_removed(std::string group_id, void* src, ImageFrameTimeAxisGroup* group) ;
+
+ /**
+ * Send a message indicating that an ImageFrameTimeAxisGroup has been renamed
+ *
+ * @param new_id the new name, or Id, of the group
+ * @param old_id the old name, or Id, of the group
+ * @param src the identity of the object that initiated the change
+ * @param group the group that has changed
+ */
+ void send_imageframe_time_axis_group_renamed(std::string new_id, std::string old_id, void* src, ImageFrameTimeAxisGroup* group) ;
+
+
+ //---------------------------------
+ // ImageFrameView Messages
+
+ /**
+ * Send an Image Frame View Item position changed message
+ *
+ * @param pos the new position value
+ * @param src the identity of the object that initiated the change
+ * @param item the time axis item whos position has changed
+ */
+ void send_imageframe_view_position_change(jack_nframes_t pos, void* src, ImageFrameView* item) ;
+
+ /**
+ * Send a Image Frame View item duration changed message
+ *
+ * @param dur the the new duration value
+ * @param src the identity of the object that initiated the change
+ * @param item the item which has had a duration change
+ */
+ void send_imageframe_view_duration_change(jack_nframes_t dur, void* src, ImageFrameView* item) ;
+
+ /**
+ * Send a message indicating that an ImageFrameView has been renamed
+ *
+ * @param item the ImageFrameView which has been renamed
+ * @param src the identity of the object that initiated the change
+ * @param item the renamed item
+ */
+ void send_imageframe_view_renamed(std::string new_id, std::string old_id, void* src, ImageFrameView* item) ;
+
+ /**
+ * Send a message indicating that an ImageFrameView item has been removed message
+ *
+ * @param item_id the id of the item that was removed
+ * @param src the identity of the object that initiated the change
+ * @param item the removed item
+ */
+ void send_imageframe_view_removed(std::string item_id, void* src, ImageFrameView* item) ;
+
+ //---------------------------------
+ // MarkerView Messages
+
+ /**
+ * Send a Marker View Item position changed message
+ *
+ * @param pos the new position value
+ * @param src the identity of the object that initiated the change
+ * @param item the time axis item whos position has changed
+ */
+ void send_marker_view_position_change(jack_nframes_t pos, void* src, MarkerView* item) ;
+
+ /**
+ * Send a Marker View item duration changed message
+ *
+ * @param dur the new duration value
+ * @param src the identity of the object that initiated the change
+ * @param item the time axis item whos position has changed
+ */
+ void send_marker_view_duration_change(jack_nframes_t dur, void* src, MarkerView* item) ;
+
+ /**
+ * Send a message indicating that a MarkerView has been renamed
+ *
+ * @param new_id the new_id of the object
+ * @param old_id the old_id of the object
+ * @param src the identity of the object that initiated the change
+ * @param item the MarkerView which has been renamed
+ */
+ void send_marker_view_renamed(std::string new_id, std::string old_id, void* src, MarkerView* item) ;
+
+ /**
+ * Send a message indicating that a MarkerView item has been removed message
+ *
+ * @param item_id the id of the item that was removed
+ * @param src the identity of the object that initiated the change
+ * @param item the MarkerView which has been removed
+ */
+ void send_marker_view_removed(std::string item_id, void* src, MarkerView* item) ;
+
+
+ //---------------------------------------------------------------------------------------//
+ // Emitted Signals
+
+ /** Emitted if the socket connection is shutdown at the other end */
+ SigC::Signal0<void> CompositorSocketShutdown ;
+
+ /** Emitted as a generic error is captured from the socket connection to the animatic compositor */
+ SigC::Signal0<void> CompositorSocketError ;
+
+
+ protected:
+
+
+ private:
+ /* I dont like friends :-( */
+ friend class Editor;
+
+ /**
+ * Create an new instance of the ImageFrameSocketHandler, if one does not already exist
+ *
+ * @param ed the Ardour PublicEditor
+ */
+ static ImageFrameSocketHandler* create_instance(PublicEditor& ed) ;
+
+ //---------------------------------------------------------------------------------------//
+ // Message breakdown ie avoid a big if...then...else
+
+ /**
+ * Handle insert item requests
+ *
+ * @param msg the received message
+ */
+ void handle_insert_message(const char* msg) ;
+
+ /**
+ * Handle remove item requests
+ *
+ * @param msg the received message
+ */
+ void handle_remove_message(const char* msg) ;
+
+ /**
+ * Handle rename item requests
+ *
+ * @param msg the received message
+ */
+ void handle_rename_message(const char* msg) ;
+
+ /**
+ * Handle a request for session information
+ *
+ * @param msg the received message
+ */
+ void handle_request_data(const char* msg) ;
+
+ /**
+ * Handle the update of a particular item
+ *
+ * @param msg the received message
+ */
+ void handle_item_update_message(const char* msg) ;
+
+ /**
+ * Handle the selection of an Item
+ *
+ * @param msg the received message
+ */
+ void handle_item_selected(const char* msg) ;
+
+ /**
+ * Handle s session action message
+ *
+ * @param msg the received message
+ */
+ void handle_session_action(const char* msg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for specific insert procedures
+
+ /**
+ * Handle the insertion of a new ImaegFrameTimeAxis
+ *
+ * @param msg the received message
+ */
+ void handle_insert_imageframe_time_axis(const char* msg) ;
+
+ /**
+ * Handle the insertion of a new MarkerTimeAxis
+ *
+ * @param msg the received message
+ */
+ void handle_insert_marker_time_axis(const char* msg) ;
+
+ /**
+ * Handle the insertion of a time axis group (a scene)
+ *
+ * @param msg the received message
+ */
+ void handle_insert_imageframe_group(const char* msg) ;
+
+ /**
+ * Handle the insertion of a new ImageFrameItem
+ *
+ * @param msg the received message
+ */
+ void handle_insert_imageframe_view(const char* msg) ;
+
+ /**
+ * Handle the insertion of a new MarkerItem
+ *
+ * @param msg the received message
+ */
+ void handle_insert_marker_view(const char* msg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for specific removal procedures
+
+ /**
+ * Handle the removal of an ImageTimeAxis
+ *
+ * @param msg the received message
+ */
+ void handle_remove_imageframe_time_axis(const char* msg) ;
+
+ /**
+ * Handle the removal of an MarkerTimeAxis
+ *
+ * @param msg the received message
+ */
+ void handle_remove_marker_time_axis(const char* msg) ;
+
+ /**
+ * Handle the removal of an ImageFrameTimeAxisGroup
+ *
+ * @param msg the received message
+ */
+ void handle_remove_imageframe_time_axis_group(const char* msg) ;
+
+ /**
+ * Handle the removal of an ImageFrameItem
+ *
+ * @param msg the received message
+ */
+ void handle_remove_imageframe_view(const char* msg) ;
+
+ /**
+ * Handle the removal of an MarkerItem
+ *
+ * @param msg the received message
+ */
+ void handle_remove_marker_view(const char* msg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for the specific rename procedures
+
+ /**
+ * Handle the renaming of an ImageTimeAxis
+ *
+ * @param msg the received message
+ */
+ void handle_rename_imageframe_time_axis(const char* msg) ;
+
+ /**
+ * Handle the renaming of an MarkerTimeAxis
+ *
+ * @param msg the received message
+ */
+ void handle_rename_marker_time_axis(const char* msg) ;
+
+ /**
+ * Handle the renaming of an ImageFrameItem
+ *
+ * @param msg the received message
+ */
+ void handle_rename_imageframe_time_axis_group(const char* msg) ;
+
+ /**
+ * Handle the renaming of an ImageFrameItem
+ *
+ * @param msg the received message
+ */
+ void handle_rename_imageframe_view(const char* msg) ;
+
+ /**
+ * Handle the renaming of an Marker
+ *
+ * @param msg the received message
+ */
+ void handle_rename_marker_view(const char* msg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for data request
+
+ /**
+ * Handle a request for the sessnio naem fo the current session
+ * We return a failure state if no session is open
+ *
+ * @param msg the received message
+ */
+ void handle_session_name_request(const char* msg) ;
+
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for specific item update changes
+
+ /**
+ * Handle ImageFrameView positional changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_view_position_update(const char* msg) ;
+
+ /**
+ * Handle ImageFrameView Duration changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_view_duration_update(const char* msg) ;
+
+ /**
+ * Handle ImageFrameView Position Lock Constraint changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_position_lock_update(const char* msg) ;
+
+ /**
+ * Handle ImageFrameView Maximum Duration changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_view_max_duration_update(const char* msg) ;
+
+ /**
+ * Handle image frame max duration enable constraint changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_view_max_duration_enable_update(const char* msg) ;
+
+ /**
+ * Handle ImageFrameView Minimum Duration changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_view_min_duration_update(const char* msg) ;
+
+ /**
+ * Handle image frame min duration enable constraint changes
+ *
+ * @param msg the received message
+ */
+ void handle_imageframe_view_min_duration_enable_update(const char* msg) ;
+
+
+ /**
+ * Handle MarkerView position changes
+ *
+ * @param msg the received message
+ */
+ void handle_marker_view_position_update(const char* msg) ;
+
+ /**
+ * Handle MarkerView duration changes
+ *
+ * @param msg the received message
+ */
+ void handle_marker_view_duration_update(const char* msg) ;
+
+ /**
+ * Handle MarkerView Position Lock Constraint changes
+ *
+ * @param msg the received message
+ */
+ void handle_marker_view_position_lock_update(const char* msg) ;
+
+ /**
+ * Handle MarkerView maximum duration changes
+ *
+ * @param msg the received message
+ */
+ void handle_marker_view_max_duration_update(const char* msg) ;
+
+ /**
+ * Handle MarkerView minimum duration changes
+ *
+ * @param msg the received message
+ */
+ void handle_marker_view_min_duration_update(const char* msg) ;
+
+
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for Session Actions
+
+ /**
+ * Handle the opening of a named audio session
+ *
+ * @param msg the received message
+ */
+ void handle_open_session(const char* msg) ;
+
+ /**
+ * Handle the closing of a named audio session
+ *
+ * @param msg the received message
+ */
+ void handle_closed_session(const char* msg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // handlers for the shutdown of the Image Compositor
+
+ /**
+ * Handle the shutdown message from the image compositor
+ *
+ * @param msg the received message
+ */
+ void handle_shutdown(const char* msg) ;
+
+
+ //---------------------------------------------------------------------------------------//
+ // convenince methods to break up messages
+
+ /**
+ * Returns part of the received message as a std::string
+ *
+ * @param start the start character
+ * @param num_chars the number of characters to read
+ * @param the message to break apart
+ * @return the sub string of the message
+ */
+ std::string get_message_part(int start, int32_t num_chars, const char* msg) ;
+
+
+ /**
+ * break up am image item description message
+ * we break the mesage up into the parent Image Track id and size,
+ * the parent group id and size, and the image id and size
+ *
+ * @param track_id
+ * @param track_id_size
+ * @param scene_id
+ * @param scene_id_size
+ * @param item_id
+ * @param item_id_size
+ */
+ void decompose_imageframe_item_desc(const char* msg, int& position, std::string& track_id, int& track_id_size, std::string& scene_id, int& scene_id_size, std::string& item_id, int& item_id_size) ;
+
+ /**
+ * Compose a description of the specified image frame view
+ * The description consists of the parent track name size and name,
+ * the parent group name size and name, and the item name size and name
+ *
+ * @param ifv the item to compose a description of
+ * @param buffer the buffer to write the description
+ */
+ void compose_imageframe_item_desc(ImageFrameView* ifv, std::ostringstream& buffer) ;
+
+ /**
+ * Compose a description of the specified marker view
+ * The description consists of the parent track name size and name,
+ * and the item name size and name
+ *
+ * @param mv the item to compose a description of
+ * @param buffer the buffer to write the description
+ */
+ void compose_marker_item_desc(MarkerView* mv, std::ostringstream& buffer) ;
+
+
+ /**
+ * Returns the ImageFrameView from the specified description
+ * The errcode parameter is used to indicate the item which caused
+ * an error on failure of this method
+ * 0 = suces
+ * 1 = the track item was not found
+ * 2 = the group item was not found
+ * 3 = the imageframe item was not found
+ *
+ * @paran track_id the track on which the item is placed
+ * @param group_id the group in which the item is a member
+ * @param item_id the id of the item
+ * @param int32_t reference used for error codes on failure
+ * @param errmsg populated with a description of the error on failure
+ * @return the described item on success, 0 otherwise
+ */
+ ImageFrameView* get_imageframe_view_from_desc(const std::string& track_id, const std::string& group_ud, const std::string& item_id, int& errcode, std::string& errmsg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // Convenince Message Send Methods
+
+ /**
+ * Sends a message throught the socket
+ *
+ * @param msg the message to send
+ * @return the return value of the socket call
+ */
+ int send_message(const std::string& msg) ;
+
+ /**
+ * Reads a message from the Socket
+ *
+ * @param msg a string to populate with the received message
+ * @return the return value from the socket call
+ */
+ int read_message(std::string& msg) ;
+
+ /**
+ * Convenience method to compose and send a success messasge back to the Image Compositor
+ *
+ */
+ void send_return_success() ;
+
+ /**
+ * Convenience method to compose and send a failure messasge back to the Image Compositor
+ *
+ * @param msg the failure message
+ */
+ void send_return_failure(const std::string& msg) ;
+
+ //---------------------------------------------------------------------------------------//
+ // Memebr Data
+
+ /** Our instance of the socket handler, singleton */
+ static ImageFrameSocketHandler* _instance ;
+
+ /** The Ardour PublicEditor */
+ PublicEditor& thePublicEditor ;
+
+ /** the socket file descriptor */
+ int theArdourToCompositorSocket ;
+
+ /** This stores the 'tag' returned from gdk_input_add, which is required for removing the input */
+ int theGdkInputTag ;
+
+} ; /* class ImageFrameSocketHandler */
+
+#endif /* __ardour_gtk_imageframe_socket_handler_h__ */