Prompter now prevents blank strings or unaltered names & now has a horizontal orientation. Rename marker now uses the ArdourPrompter.

git-svn-id: svn://localhost/trunk/ardour2@463 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Nick Mainsbridge 2006-04-22 15:28:59 +00:00
parent f81f877adf
commit dcd4c89f34
14 changed files with 54 additions and 24 deletions

View File

@ -470,6 +470,7 @@ ARDOUR_UI::ask_about_saving_session (const string & what)
prompt_label.set_text (prompt);
prompt_label.set_name (X_("PrompterLabel"));
prompt_label.set_alignment(ALIGN_LEFT, ALIGN_TOP);
dhbox.set_homogeneous (false);
dhbox.pack_start (*dimage, true, false, 5);
dhbox.pack_start (prompt_label, true, false, 5);
window.get_vbox()->pack_start (dhbox);
@ -1532,6 +1533,7 @@ ARDOUR_UI::snapshot_session ()
prompter.set_name ("Prompter");
prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.set_prompt (_("Name of New Snapshot"));
prompter.set_initial_text (now);
@ -1681,7 +1683,8 @@ ARDOUR_UI::save_template ()
prompter.set_prompt (_("Name for mix template:"));
prompter.set_initial_text(session->name() + _("-template"));
prompter.add_button (Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
switch (prompter.run()) {
case RESPONSE_ACCEPT:
prompter.get_result (name);

View File

@ -835,6 +835,7 @@ AudioTimeAxisView::rename_current_playlist ()
prompter.set_prompt (_("Name for playlist"));
prompter.set_initial_text (pl->name());
prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
switch (prompter.run ()) {
case Gtk::RESPONSE_ACCEPT:
@ -869,6 +870,7 @@ AudioTimeAxisView::use_copy_playlist (bool prompt)
prompter.set_prompt (_("Name for Playlist"));
prompter.set_initial_text (name);
prompter.add_button (Gtk::Stock::NEW, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.show_all ();
switch (prompter.run ()) {
@ -908,6 +910,7 @@ AudioTimeAxisView::use_new_playlist (bool prompt)
prompter.set_prompt (_("Name for Playlist"));
prompter.set_initial_text (name);
prompter.add_button (Gtk::Stock::NEW, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
switch (prompter.run ()) {
case Gtk::RESPONSE_ACCEPT:

View File

@ -34,6 +34,7 @@
#include "gui_thread.h"
#include "simplerect.h"
#include "actions.h"
#include "prompter.h"
#include "i18n.h"
@ -807,10 +808,10 @@ Editor::marker_menu_rename ()
if (!loc) return;
Dialog dialog;
Entry entry;
HBox dhbox;
Label dlabel (_("New Name:"));
ArdourPrompter dialog (true);
string txt;
dialog.set_prompt (_("New Name:"));
if (loc->is_mark()) {
dialog.set_title (_("ardour: rename mark"));
@ -821,20 +822,12 @@ Editor::marker_menu_rename ()
dialog.set_name ("MarkRenameWindow");
dialog.set_size_request (250, -1);
dialog.set_position (Gtk::WIN_POS_MOUSE);
dialog.set_modal (true);
dhbox.pack_start (dlabel, true, false, 10);
dhbox.pack_start (entry, true, false, 10);
dialog.get_vbox()->pack_start (dhbox, true, false, 10);
dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL);
dialog.add_button (_("Rename"), RESPONSE_ACCEPT);
dialog.set_default_response (RESPONSE_ACCEPT);
dialog.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
dialog.set_initial_text (loc->name());
entry.set_text (loc->name());
entry.set_name ("MarkerNameDisplay");
dialog.show_all ();
entry.grab_focus ();
dialog.show ();
switch (dialog.run ()) {
case RESPONSE_ACCEPT:
@ -846,7 +839,8 @@ Editor::marker_menu_rename ()
begin_reversible_command ( _("rename marker") );
session->add_undo( session->locations()->get_memento() );
loc->set_name (entry.get_text());
dialog.get_result(txt);
loc->set_name (txt);
session->add_redo_no_execute( session->locations()->get_memento() );
commit_reversible_command ();

View File

@ -4607,6 +4607,7 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
prompter.set_prompt (_("Name for region:"));
prompter.set_initial_text (clicked_regionview->region.name());
prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.show_all ();
switch (prompter.run ()) {
case Gtk::RESPONSE_ACCEPT:

View File

@ -109,6 +109,7 @@ Editor::name_selection ()
p.set_prompt (_("Name for Chunk:"));
p.add_button (Gtk::Stock::NEW, Gtk::RESPONSE_ACCEPT);
p.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
p.change_labels (_("Create Chunk"), _("Forget it"));
p.show_all ();

View File

@ -221,6 +221,7 @@ MeterBridgeStrip::label_button_press_release (GdkEventButton *ev)
prompter.set_prompt (_("New Name for Meter:"));
prompter.set_initial_text (label.get_text());
prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.show_all();
switch (prompter.run ()) {

View File

@ -64,7 +64,7 @@ PluginSelector::PluginSelector (PluginManager *mgr)
amodel = Gtk::ListStore::create(acols);
added_list.set_model (amodel);
added_list.append_column (_("Plugins to be Applied to Channel"), acols.text);
added_list.append_column (_("Plugins to be Connected to Insert"), acols.text);
added_list.set_headers_visible (true);
added_list.set_reorderable (false);
@ -114,7 +114,7 @@ PluginSelector::PluginSelector (PluginManager *mgr)
table->attach(ascroller, 0, 7, 7, 9);
add_button (Stock::CANCEL, RESPONSE_CANCEL);
add_button (Stock::APPLY, RESPONSE_APPLY);
add_button (Stock::CONNECT, RESPONSE_APPLY);
set_default_response (RESPONSE_APPLY);
get_vbox()->pack_start (*table);

View File

@ -862,6 +862,7 @@ PlugUIBase::save_plugin_setting ()
ArdourPrompter prompter (true);
prompter.set_prompt(_("Name of New Preset:"));
prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
prompter.show_all();

View File

@ -746,6 +746,7 @@ RedirectBox::rename_redirect (Redirect* redirect)
name_prompter.set_prompt (_("rename redirect"));
name_prompter.set_initial_text (redirect->name());
name_prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
name_prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
name_prompter.show_all ();
switch (name_prompter.run ()) {

View File

@ -727,9 +727,10 @@ RouteUI::route_rename ()
{
ArdourPrompter name_prompter (true);
string result;
name_prompter.set_prompt (_("new name: "));
name_prompter.set_prompt (_("New Name: "));
name_prompter.set_initial_text (_route.name());
name_prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
name_prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
name_prompter.show_all ();
switch (name_prompter.run ()) {

View File

@ -236,6 +236,7 @@ SoundFileBox::add_field_clicked ()
prompter.set_prompt (_("Name for Field"));
prompter.add_button (Gtk::Stock::ADD, Gtk::RESPONSE_ACCEPT);
prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
switch (prompter.run ()) {
case Gtk::RESPONSE_ACCEPT:

View File

@ -323,6 +323,7 @@ VisualTimeAxis::start_time_axis_rename()
name_prompter.set_prompt (_("new name: ")) ;
name_prompter.add_button (_("Rename"), Gtk::RESPONSE_ACCEPT);
name_prompter.set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
name_prompter.show_all() ;
switch (name_prompter.run ()) {

View File

@ -54,13 +54,14 @@ class Prompter : public Gtk::Dialog
void change_labels (std::string ok, std::string cancel);
void get_result (std::string &str, bool strip=true);
bool maybe_allow_response (GdkEventKey* );
protected:
Gtk::Entry& the_entry() { return entry; }
private:
Gtk::Entry entry;
Gtk::VBox entryBox;
Gtk::HBox entryBox;
Gtk::Label entryLabel;
void init ();

View File

@ -48,14 +48,15 @@ Prompter::init ()
set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
set_position (Gtk::WIN_POS_MOUSE);
set_name ("Prompter");
set_default_response (Gtk::RESPONSE_ACCEPT);
add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
/*
Alas a generic 'affirmative' button seems a bit useless sometimes.
You will have to add your own.
After adding, use :
set_response_sensitive (Gtk::RESPONSE_ACCEPT, false)
to prevent the RESPONSE_ACCEPT button from permitting blank strings.
*/
entryLabel.set_line_wrap (true);
@ -69,7 +70,7 @@ Prompter::init ()
get_vbox()->pack_start (entryBox);
show_all_children();
entry.signal_key_release_event().connect (mem_fun (*this, &Prompter::maybe_allow_response));
entry.signal_activate().connect (bind (mem_fun (*this, &Prompter::response), Gtk::RESPONSE_ACCEPT));
}
@ -88,3 +89,23 @@ Prompter::get_result (string &str, bool strip)
strip_whitespace_edges (str);
}
}
bool
Prompter::maybe_allow_response (GdkEventKey* ev)
{
/*
This is set up so that entering text in the entry
field makes the RESPONSE_ACCEPT button active.
Of course if you haven't added a RESPONSE_ACCEPT
button, nothing will happen at all.
*/
if (entry.get_text() != "") {
set_response_sensitive (Gtk::RESPONSE_ACCEPT, true);
set_default_response (Gtk::RESPONSE_ACCEPT);
} else {
set_response_sensitive (Gtk::RESPONSE_ACCEPT, false);
}
return true;
}