diff options
Diffstat (limited to 'gtk2_ardour/library_ui.h')
-rw-r--r-- | gtk2_ardour/library_ui.h | 307 |
1 files changed, 307 insertions, 0 deletions
diff --git a/gtk2_ardour/library_ui.h b/gtk2_ardour/library_ui.h new file mode 100644 index 0000000000..ae40aac2d7 --- /dev/null +++ b/gtk2_ardour/library_ui.h @@ -0,0 +1,307 @@ +/* + Copyright (C) 1999-2002 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. + +*/ + +#ifndef __ardour_library_ui_h__ +#define __ardour_library_ui_h__ + +#include <map> +#include <string> +#include <list> +#include <sys/stat.h> +#include <sys/types.h> + +#include <sigc++/signal_system.h> +#include <gtk--.h> +#include <gtkmmext/selector.h> + +#include <ardour/region.h> + +#include "ardour_dialog.h" + +using std::string; +using std::map; + +struct RowTaggedString { + RowTaggedString (int r, string s) + : row (r), str (s) {} + + int32_t row; + string str; +}; + +class SoundFileBox : public Gtk::VBox +{ + public: + /** + @variable uri is the path name of string. + @variable metadata whether to show the user-added fields from sfdb. + */ + SoundFileBox (string uri, bool metadata); + ~SoundFileBox (); + + SigC::Signal2<void, string, bool> file_chosen; + + private: + string uri; + bool metadata; + SF_INFO* sf_info; + + char* playcmd; + pid_t current_pid; + + Gtk::Label label; + Gtk::Label path; + Gtk::Entry path_entry; + Gtk::Label length; + Gtk::Label format; + Gtk::Label channels; + Gtk::Label samplerate; + + Gtkmmext::Selector fields; + string selected_field; + + Gtk::Frame border_frame; + + Gtk::VBox main_box; + Gtk::HBox top_box; + Gtk::HBox bottom_box; + + Gtk::Button play_btn; + Gtk::Button stop_btn; + Gtk::Button add_field_btn; + Gtk::Button remove_field_btn; + + static void _fields_refiller (Gtk::CList &list, void* arg); + void fields_refiller (Gtk::CList &clist); + int setup_labels (string uri); + void setup_fields (); + + void play_btn_clicked (); + void stop_btn_clicked (); + void add_field_clicked (); + void remove_field_clicked (); + + void field_selected (Gtkmmext::Selector *selector, + Gtkmmext::SelectionResult *re); + void field_chosen (Gtkmmext::Selector *selector, + Gtkmmext::SelectionResult *re); + void audition_status_changed (bool state); +}; + +class SearchSounds : public ArdourDialog +{ + public: + SearchSounds (); + ~SearchSounds (); + + SigC::Signal2<void, string, bool> file_chosen; + + private: + Gtk::Button find_btn; + + Gtk::RadioButton and_rbtn; + Gtk::RadioButton or_rbtn; + + Gtkmmext::Selector fields; + string selected_field; + + Gtk::VBox main_box; + Gtk::HBox rbtn_box; + Gtk::HBox bottom_box; + + static void _fields_refiller (Gtk::CList &list, void* arg); + void fields_refiller (Gtk::CList &clist); + void setup_fields (); + + void field_selected (Gtkmmext::Selector *selector, + Gtkmmext::SelectionResult *re); + + void find_btn_clicked (); + + void file_found (string uri, bool multi); +}; + +class SearchResults : public ArdourDialog +{ + public: + SearchResults (map<string,string> field_values, bool and_search); + ~SearchResults (); + + SigC::Signal2<void, string, bool> file_chosen; + + private: + map<string,string> search_info; + bool search_and; + string selection; + + Gtk::VBox main_box; + Gtk::HBox hbox; + Gtk::HBox import_box; + + Gtk::Button import_btn; + Gtk::CheckButton multichan_check; + + SoundFileBox* info_box; + + Gtkmmext::Selector results; + static void _results_refiller (Gtk::CList &list, void* arg); + void results_refiller (Gtk::CList &clist); + + void import_clicked (); + + void result_chosen (Gtkmmext::Selector *selector, + Gtkmmext::SelectionResult *re); +}; + +class LibraryTree : public Gtk::VBox +{ + public: + LibraryTree (); + ~LibraryTree (); + + SigC::Signal2<void, string, bool> file_chosen; + SigC::Signal0<void> group_selected; + SigC::Signal1<void, string> member_selected; + SigC::Signal0<void> member_deselected; + SigC::Signal0<void> deselected; + + list<string> selection; + void clear_selection (); + + private: + map<string, Gtk::TreeItem*> uri_mapping; + map<string, string> uri_parent; // this ugly, but necessary + + string current_member; + string current_group; + + Gtk::HBox hbox; + Gtk::VBox framed_box; + Gtk::HBox btn_box_top; + Gtk::HBox btn_box_bottom; + + Gtk::ScrolledWindow scroll; + Gtk::Tree tree; + + Gtk::Button add_btn; + Gtk::Button remove_btn; + Gtk::Button find_btn; + Gtk::Button folder_btn; + + Gtk::FileSelection files_select; + + void file_ok_clicked (); + void file_cancel_clicked (); + + void add_btn_clicked (); + void folder_btn_clicked (); + void remove_btn_clicked (); + void find_btn_clicked (); + + void file_found (string uri, bool multi); + + void cb_group_select (Gtk::TreeItem* item, string uri); + void cb_member_select (Gtk::TreeItem* item, string uri); + void cb_member_deselect (Gtk::TreeItem* item, string uri); + + void populate (); + void subpopulate (Gtk::Tree*, string group); + + void added_group (string, string); + void removed_group (string); + void added_member (string, string); + void removed_member (string); + + void cancel_import_clicked (); +}; + +class SoundFileBrowser : public Gtk::VBox { + public: + SoundFileBrowser (); + ~SoundFileBrowser (); + + SigC::Signal0<void> group_selected; + SigC::Signal1<void, string> member_selected; + SigC::Signal0<void> member_deselected; + SigC::Signal0<void> deselected; + + list<RowTaggedString> selection; + void clear_selection (); + + private: + string current_member; + string current_group; + Gtk::FileSelection fs_selector; + Gtk::CList* file_list; + + void dir_list_selected(gint row, gint col, GdkEvent* ev); + void file_list_selected(gint row, gint col, GdkEvent* ev); + void file_list_deselected(gint row, gint col, GdkEvent* ev); + + string safety_check_file(string file); +}; + +class SoundFileSelector : public ArdourDialog { + public: + /** + @variable action the name given to the action button + @variable import is action button sensitive + @variable multi does splitting the region by channel make sense here + @variable persist should this LibraryTree be hidden or deleted when closed + */ + SoundFileSelector (); + ~SoundFileSelector (); + + void run (string action, bool split_makes_sense, bool hide_after_action = false); + void get_result (vector<string>& paths, bool& split); + void hide_import_stuff(); + + SigC::Signal2<void,vector<string>,bool> Action; + + private: + bool multiable; + bool hide_after_action; + bool sfdb; + + void import_btn_clicked (); + void sfdb_group_selected(); + void browser_group_selected(); + void member_selected(string member, bool sfdb); + void member_deselected(bool sfdb); + void sfdb_deselected(); + void page_switched(Gtk::Notebook_Helpers::Page* page, guint page_num); + + Gtk::HBox main_box; + Gtk::VBox vbox; + Gtk::Notebook notebook; + Gtk::Label sfdb_label; + Gtk::Label fs_label; + + SoundFileBrowser sf_browser; + LibraryTree sfdb_tree; + + Gtk::HBox import_box; + Gtk::Button import_btn; + Gtk::CheckButton split_channels; + Gtk::CheckButton resample_check; + + SoundFileBox* info_box; +}; + +#endif // __ardour_library_ui_h__ |