diff options
author | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
---|---|---|
committer | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
commit | 209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch) | |
tree | 9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/imageframe_socket_handler.h | |
parent | e4b9aed743fc765219ac775905a221c017c88fba (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.h | 705 |
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__ */ |