From af2d680fc71d16363f7f7fb7e602cb0c30015ee5 Mon Sep 17 00:00:00 2001 From: Good Guy Date: Mon, 30 Jan 2017 14:19:59 -0700 Subject: [PATCH] textbox/suggestion fixups, update to lossless, canvas scaling --- cinelerra-5.1/cinelerra/asset.C | 6 +- cinelerra-5.1/cinelerra/batchrender.C | 31 +-- cinelerra-5.1/cinelerra/batchrender.h | 1 - cinelerra-5.1/cinelerra/formattools.C | 26 +- cinelerra-5.1/cinelerra/formattools.h | 2 - cinelerra-5.1/cinelerra/indexfile.C | 4 +- cinelerra-5.1/cinelerra/recordbatches.C | 32 +-- cinelerra-5.1/cinelerra/recordbatches.h | 1 - cinelerra-5.1/cinelerra/resourcepixmap.C | 8 +- cinelerra-5.1/cinelerra/swindow.C | 14 +- cinelerra-5.1/cinelerra/swindow.h | 1 - cinelerra-5.1/ffmpeg/format/bluray | 1 + cinelerra-5.1/guicast/bctextbox.C | 309 +++++++---------------- cinelerra-5.1/guicast/bctextbox.h | 5 +- 14 files changed, 111 insertions(+), 330 deletions(-) diff --git a/cinelerra-5.1/cinelerra/asset.C b/cinelerra-5.1/cinelerra/asset.C index fd17a142..3133649b 100644 --- a/cinelerra-5.1/cinelerra/asset.C +++ b/cinelerra-5.1/cinelerra/asset.C @@ -332,11 +332,13 @@ int Asset::equivalent(Asset &asset, int test_audio, int test_video, EDL *edl) if( out_path ) { if( *apath != '/' ) { char *cp = cstrcat(2, out_path, apath); - delete [] apath; apath = cp; + delete [] apath; apath = FileSystem::basepath(cp); + delete [] cp; } if( *tpath != '/' ) { char *cp = cstrcat(2, out_path, tpath); - delete [] tpath; tpath = cp; + delete [] tpath; tpath = FileSystem::basepath(cp); + delete [] cp; } } if( strcmp(apath, tpath) ) result = 1; diff --git a/cinelerra-5.1/cinelerra/batchrender.C b/cinelerra-5.1/cinelerra/batchrender.C index bbd66d47..bea451ce 100644 --- a/cinelerra-5.1/cinelerra/batchrender.C +++ b/cinelerra-5.1/cinelerra/batchrender.C @@ -203,7 +203,6 @@ BatchRenderThread::BatchRenderThread(MWindow *mwindow) preferences = 0; warn = 1; render = 0; - file_entries = 0; batch_path[0] = 0; } @@ -219,7 +218,6 @@ BatchRenderThread::BatchRenderThread() preferences = 0; warn = 1; render = 0; - file_entries = 0; batch_path[0] = 0; } @@ -229,10 +227,6 @@ BatchRenderThread::~BatchRenderThread() delete boot_defaults; delete preferences; delete render; - if( file_entries ) { - file_entries->remove_all_objects(); - delete file_entries; - } } void BatchRenderThread::reset(const char *path) @@ -245,10 +239,6 @@ void BatchRenderThread::reset(const char *path) rendering_job = -1; delete default_job; default_job = 0; jobs.remove_all_objects(); - if(file_entries) { - file_entries->remove_all_objects(); - delete file_entries; file_entries = 0; - } } void BatchRenderThread::handle_close_event(int result) @@ -264,23 +254,6 @@ BC_Window* BatchRenderThread::new_gui() current_start = 0.0; current_end = 0.0; default_job = new BatchRenderJob(mwindow->preferences); - - - if(!file_entries) - { - file_entries = new ArrayList; - FileSystem fs; - char string[BCTEXTLEN]; - // Load current directory - fs.update(getcwd(string, BCTEXTLEN)); - for(int i = 0; i < fs.total_files(); i++) - { - file_entries->append( - new BC_ListBoxItem( - fs.get_entry(i)->get_name())); - } - } - load_jobs(batch_path, mwindow->preferences); load_defaults(mwindow->defaults); this->gui = new BatchRenderGUI(mwindow, @@ -1051,9 +1024,7 @@ BatchRenderEDLPath::BatchRenderEDLPath(BatchRenderThread *thread, int BatchRenderEDLPath::handle_event() { -// Suggestions - calculate_suggestions(thread->file_entries); - + calculate_suggestions(); strcpy(thread->get_current_edl(), get_text()); thread->gui->create_list(1); return 1; diff --git a/cinelerra-5.1/cinelerra/batchrender.h b/cinelerra-5.1/cinelerra/batchrender.h index 09d98052..356ebf7e 100644 --- a/cinelerra-5.1/cinelerra/batchrender.h +++ b/cinelerra-5.1/cinelerra/batchrender.h @@ -137,7 +137,6 @@ public: int rendering_job; int is_rendering; int warn; - ArrayList *file_entries; }; diff --git a/cinelerra-5.1/cinelerra/formattools.C b/cinelerra-5.1/cinelerra/formattools.C index 60295e4b..d3d5ca29 100644 --- a/cinelerra-5.1/cinelerra/formattools.C +++ b/cinelerra-5.1/cinelerra/formattools.C @@ -68,7 +68,6 @@ FormatTools::FormatTools(MWindow *mwindow, channels_title = 0; channels_button = 0; multiple_files = 0; - file_entries = 0; w = window->get_w(); recording = 0; @@ -104,12 +103,6 @@ SET_TRACE if(vparams_thread) delete vparams_thread; SET_TRACE if(channels_tumbler) delete channels_tumbler; -SET_TRACE - if(file_entries) - { - file_entries->remove_all_objects(); - delete file_entries; - } } void FormatTools::create_objects(int &init_x, @@ -141,19 +134,6 @@ void FormatTools::create_objects(int &init_x, this->prompt_video_compression = prompt_video_compression; this->strategy = strategy; - - file_entries = new ArrayList; - FileSystem fs; - char string[BCTEXTLEN]; -// Load current directory - fs.update(getcwd(string, BCTEXTLEN)); - for(int i = 0; i < fs.total_files(); i++) - { - file_entries->append( - new BC_ListBoxItem( - fs.get_entry(i)->get_name())); - } - //printf("FormatTools::create_objects 1\n"); // Modify strategy depending on render farm @@ -749,11 +729,7 @@ FormatPathText::~FormatPathText() } int FormatPathText::handle_event() { -// Suggestions - calculate_suggestions(format->file_entries); - - - + calculate_suggestions(); strcpy(format->asset->path, get_text()); format->handle_event(); return 1; diff --git a/cinelerra-5.1/cinelerra/formattools.h b/cinelerra-5.1/cinelerra/formattools.h index 3929bbff..d471db8b 100644 --- a/cinelerra-5.1/cinelerra/formattools.h +++ b/cinelerra-5.1/cinelerra/formattools.h @@ -116,8 +116,6 @@ public: FormatMultiple *multiple_files; -// Suggestions for the textbox - ArrayList *file_entries; ArrayList *plugindb; MWindow *mwindow; const char *locked_compressor; diff --git a/cinelerra-5.1/cinelerra/indexfile.C b/cinelerra-5.1/cinelerra/indexfile.C index dfb5d6b2..b62379b2 100644 --- a/cinelerra-5.1/cinelerra/indexfile.C +++ b/cinelerra-5.1/cinelerra/indexfile.C @@ -738,9 +738,7 @@ SET_TRACE int prev_y2 = center_pixel; int first_frame = 1; int zoom_y = mwindow->edl->local_session->zoom_y, zoom_y2 = zoom_y / 2; - int max_y = canvas->get_h(); - int zmax_y = center_pixel + zoom_y2 - 1; - if( zmax_y < max_y ) max_y = zmax_y; + int max_y = center_pixel + zoom_y2 - 1; SET_TRACE for(int bufferposition = 0; diff --git a/cinelerra-5.1/cinelerra/recordbatches.C b/cinelerra-5.1/cinelerra/recordbatches.C index 861538c4..df576ed1 100644 --- a/cinelerra-5.1/cinelerra/recordbatches.C +++ b/cinelerra-5.1/cinelerra/recordbatches.C @@ -354,21 +354,10 @@ RecordBatchesGUI::Dir:: int RecordBatchesGUI::Dir:: handle_event() { - strncpy(directory, get_text(),sizeof(directory)); - char *bp, *cp, *dp = &directory[0]; - if( *dp ) { - if( dp[0] != '~' || dp[1] != 0 ) { - for( cp=dp; *cp; ++cp ) { - if( *cp != '/' ) continue; - for( bp=cp; *bp=='/'; ++bp ); - if( *bp ) dp = cp; - } - if( *--cp != '/' ) return 1; - while( cp>dp && *cp=='/' ) *cp-- = 0; - } - load_dirs(directory); - calculate_suggestions(dir_entries); - } + char *path = FileSystem::basepath(directory); + load_dirs(path); + calculate_suggestions(dir_entries); + delete [] path; return 1; } @@ -392,28 +381,17 @@ Path(RecordBatches &batches, int x, int y) : BC_TextBox(x, y, 200, 1, batches.get_editing_batch()->asset->path), batches(batches) { - file_entries = new ArrayList; - FileSystem fs; char string[BCTEXTLEN]; -// Load current directory - fs.update(getcwd(string, BCTEXTLEN)); - int total_files = fs.total_files(); - for(int i = 0; i < total_files; i++) { - const char *name = fs.get_entry(i)->get_name(); - file_entries->append(new BC_ListBoxItem(name)); - } } RecordBatchesGUI::Path:: ~Path() { - file_entries->remove_all_objects(); - delete file_entries; } int RecordBatchesGUI::Path:: handle_event() { - calculate_suggestions(file_entries); + calculate_suggestions(); Batch *batch = batches.gui->get_editing_batch(); strcpy(batch->asset->path, get_text()); batches.gui->update_batches(); diff --git a/cinelerra-5.1/cinelerra/recordbatches.h b/cinelerra-5.1/cinelerra/recordbatches.h index fffb5366..b0a4be2b 100644 --- a/cinelerra-5.1/cinelerra/recordbatches.h +++ b/cinelerra-5.1/cinelerra/recordbatches.h @@ -95,7 +95,6 @@ public: class Path : public BC_TextBox { public: RecordBatches &batches; - ArrayList *file_entries; int handle_event(); diff --git a/cinelerra-5.1/cinelerra/resourcepixmap.C b/cinelerra-5.1/cinelerra/resourcepixmap.C index f184e2fe..61b94523 100644 --- a/cinelerra-5.1/cinelerra/resourcepixmap.C +++ b/cinelerra-5.1/cinelerra/resourcepixmap.C @@ -617,9 +617,7 @@ void ResourcePixmap::draw_audio_source(TrackCanvas *canvas, center_pixel += mwindow->theme->get_image("title_bg_data")->get_h(); int64_t scale_y = mwindow->edl->local_session->zoom_y; - int y_max = canvas->get_h(); - int max_y = center_pixel + scale_y / 2 - 1; - if( y_max > max_y ) y_max = max_y; + int y_max = center_pixel + scale_y / 2 - 1; // Single sample zoom if(mwindow->edl->local_session->zoom_sample == 1) { @@ -984,9 +982,7 @@ void ResourcePixmap::draw_subttl_resource(TrackCanvas *canvas, int x0 = edit_x; if( x0 < 0 ) x0 = -x0; int x1 = (int)(pixmap_x - x0 + x); - int y_max = canvas->get_h(); - int max_y = center_pixel + scale_y / 2 - 1; - if( y_max > max_y ) y_max = max_y; + int y_max = center_pixel + scale_y / 2 - 1; int font = MEDIUMFONT, color = WHITE; canvas->set_font(font); canvas->set_color(color); diff --git a/cinelerra-5.1/cinelerra/swindow.C b/cinelerra-5.1/cinelerra/swindow.C index a4315b50..423dd55d 100644 --- a/cinelerra-5.1/cinelerra/swindow.C +++ b/cinelerra-5.1/cinelerra/swindow.C @@ -76,27 +76,15 @@ SWindowLoadPath::SWindowLoadPath(SWindowGUI *gui, int x, int y, char *path) : BC_TextBox(x, y, 200, 1, path) { this->sw_gui = gui; - - file_entries = new ArrayList; - FileSystem fs; char string[BCTEXTLEN]; -// Load current directory - fs.update(getcwd(string, BCTEXTLEN)); - int total_files = fs.total_files(); - for(int i = 0; i < total_files; i++) { - const char *name = fs.get_entry(i)->get_name(); - file_entries->append(new BC_ListBoxItem(name)); - } } SWindowLoadPath::~SWindowLoadPath() { - file_entries->remove_all_objects(); - delete file_entries; } int SWindowLoadPath::handle_event() { - calculate_suggestions(file_entries); + calculate_suggestions(); strcpy(sw_gui->script_path, get_text()); return 1; } diff --git a/cinelerra-5.1/cinelerra/swindow.h b/cinelerra-5.1/cinelerra/swindow.h index 8ba4e744..04e08b55 100644 --- a/cinelerra-5.1/cinelerra/swindow.h +++ b/cinelerra-5.1/cinelerra/swindow.h @@ -57,7 +57,6 @@ class SWindowLoadPath : public BC_TextBox { public: SWindowGUI *sw_gui; - ArrayList *file_entries; SWindowLoadPath(SWindowGUI *gui, int x, int y, char *path); ~SWindowLoadPath(); diff --git a/cinelerra-5.1/ffmpeg/format/bluray b/cinelerra-5.1/ffmpeg/format/bluray index 292b00cf..10cc4cd1 100644 --- a/cinelerra-5.1/ffmpeg/format/bluray +++ b/cinelerra-5.1/ffmpeg/format/bluray @@ -1,5 +1,6 @@ mpegts mpegts_m2ts_mode=2 +mpegts_start_pid=1024 mpegts_pmt_start_pid=256 sdt_period=-1 packetsize 2048 diff --git a/cinelerra-5.1/guicast/bctextbox.C b/cinelerra-5.1/guicast/bctextbox.C index 5a9cac03..52aa85d3 100644 --- a/cinelerra-5.1/guicast/bctextbox.C +++ b/cinelerra-5.1/guicast/bctextbox.C @@ -314,143 +314,91 @@ void BC_TextBox::set_precision(int precision) } // Compute suggestions for a path -int BC_TextBox::calculate_suggestions(ArrayList *entries) +int BC_TextBox::calculate_suggestions(ArrayList *entries, const char *filter) { // Let user delete suggestion - if(get_last_keypress() != BACKSPACE) - { - + if(get_last_keypress() != BACKSPACE) { // Compute suggestions FileSystem fs; ArrayList suggestions; const char *current_text = get_text(); - + int suggestion_column = 0; + char dirname[BCTEXTLEN]; dirname[0] = 0; + if( current_text[0] == '/' || current_text[0] == '~' ) + strncpy(dirname, current_text, sizeof(dirname)); + else if( !entries ) + getcwd(dirname, sizeof(dirname)); // If directory, tabulate it - if(current_text[0] == '/' || - current_text[0] == '~') - { -//printf("BC_TextBox::calculate_suggestions %d\n", __LINE__); - char string[BCTEXTLEN]; - strncpy(string, current_text, sizeof(string)); - char *ptr = strrchr(string, '/'); - if(!ptr) ptr = strrchr(string, '~'); - -//printf("BC_TextBox::calculate_suggestions %d\n", __LINE__); - *(ptr + 1) = 0; - int suggestion_column = ptr + 1 - string; - - fs.set_filter(get_resources()->filebox_filter); -// fs.set_sort_order(filebox->sort_order); -// fs.set_sort_field(filebox->column_type[filebox->sort_column]); - - -//printf("BC_TextBox::calculate_suggestions %d %c %s\n", __LINE__, *ptr, string); - if(current_text[0] == '~' && *ptr != '/') - { - fs.update("/home"); - } - else - { - fs.parse_tildas(string); - fs.update(string); - } -//printf("BC_TextBox::calculate_suggestions %d %d\n", __LINE__, fs.total_files()); - - -// Accept only entries with matching trailing characters - ptr = strrchr((char*)current_text, '/'); - if(!ptr) ptr = strrchr((char*)current_text, '~'); - if(ptr) ptr++; -//printf("BC_TextBox::calculate_suggestions %d %s %p\n", __LINE__, current_text, ptr); - - - if(ptr && *ptr) - { - for(int i = 0; i < fs.total_files(); i++) - { - char *current_name = fs.get_entry(i)->name; - if(!strncmp(ptr, current_name, strlen(ptr))) - { - suggestions.append(current_name); - //printf("BC_TextBox::calculate_suggestions %d %s\n", __LINE__, current_name); - } - } - } - else - // Accept all entries - for(int i = 0; i < fs.total_files(); i++) - { - //printf("BC_TextBox::calculate_suggestions %d %s\n", __LINE__, fs.get_entry(i)->name); - suggestions.append(fs.get_entry(i)->name); + if( dirname[0] ) { + if( filter ) fs.set_filter(filter); + char *prefix, *cp; + strncpy(dirname, current_text, sizeof(dirname)); + if( (cp=strrchr(dirname, '/')) || + (cp=strrchr(dirname, '~')) ) *++cp = 0; + fs.parse_tildas(dirname); + fs.update(dirname); + cp = (char *)current_text; + if( (prefix=strrchr(cp, '/')) || + (prefix=strrchr(cp, '~')) ) ++prefix; + suggestion_column = !prefix ? 0 : prefix - cp; + int prefix_len = prefix ? strlen(prefix) : 0; +// only include items where the filename matches the basename prefix + for(int i = 0; i < fs.total_files(); i++) { + char *current_name = fs.get_entry(i)->name; + if( prefix_len>0 && strncmp(prefix, current_name, prefix_len) ) continue; + suggestions.append(current_name); } -//printf("BC_TextBox::calculate_suggestions %d\n", __LINE__); - -// Add 1 to column to keep / - set_suggestions(&suggestions, suggestion_column); -//printf("BC_TextBox::calculate_suggestions %d\n", __LINE__); } - else -// Get entries from current listbox with matching trailing characters - if(entries) - { -// printf("BC_TextBox::calculate_suggestions %d %d\n", -// __LINE__, -// entries->size()); - for(int i = 0; i < entries->size(); i++) - { + else if(entries) { + char *prefix = (char *)current_text; + int prefix_len = strlen(prefix); + for(int i = 0; i < entries->size(); i++) { char *current_name = entries->get(i)->get_text(); - -//printf("BC_TextBox::calculate_suggestions %d %s %s\n", __LINE__, current_text, current_name); - if(!strncmp(current_text, current_name, strlen(current_text))) - { - suggestions.append(current_name); - } + if( prefix_len>0 && strncmp(prefix, current_name, prefix_len) ) continue; + suggestions.append(current_name); } - - set_suggestions(&suggestions, 0); } + set_suggestions(&suggestions, suggestion_column); } return 1; } +void BC_TextBox::no_suggestions() +{ + if( suggestions_popup ) { + delete suggestions_popup; + suggestions_popup = 0; + activate(); + } +} + void BC_TextBox::set_suggestions(ArrayList *suggestions, int column) { // Copy the array this->suggestions->remove_all_objects(); this->suggestion_column = column; - if(suggestions) - { - for(int i = 0; i < suggestions->size(); i++) - { + if(suggestions) { + for(int i = 0; i < suggestions->size(); i++) { this->suggestions->append(new BC_ListBoxItem(suggestions->get(i))); } // Show the popup without taking focus - if(suggestions->size() > 1) - { - if(!suggestions_popup) - { - - get_parent()->add_subwindow(suggestions_popup = - new BC_TextBoxSuggestions(this, x, y)); + if( suggestions->size() > 1 ) { + if( !suggestions_popup ) { + suggestions_popup = new BC_TextBoxSuggestions(this, x, y); + get_parent()->add_subwindow(suggestions_popup); suggestions_popup->set_is_suggestions(1); - suggestions_popup->activate(0); } - else - { - suggestions_popup->update(this->suggestions, - 0, - 0, - 1); - suggestions_popup->activate(0); + else { + suggestions_popup->update(this->suggestions, 0, 0, 1); } + suggestions_popup->activate(0); } else // Show the highlighted text - if(suggestions->size() == 1) - { + if( suggestions->size() == 1 ) { highlight_letter1 = wtext_update(); text_update(wtext,wlen, text,tsize); char *current_suggestion = suggestions->get(0); @@ -458,22 +406,18 @@ void BC_TextBox::set_suggestions(ArrayList *suggestions, int column) if( col < 0 ) col = 0; char *cur = current_suggestion + col; tstrcat(cur); + draw(0); // update positions highlight_letter2 = wtext_update(); //printf("BC_TextBox::set_suggestions %d %d\n", __LINE__, suggestion_column); draw(1); - - delete suggestions_popup; - suggestions_popup = 0; + no_suggestions(); } } // Clear the popup - if(!suggestions || !this->suggestions->size()) - { - delete suggestions_popup; - suggestions_popup = 0; - } + if( !suggestions || !this->suggestions->size() ) + no_suggestions(); } void BC_TextBox::wset_selection(int char1, int char2, int ibeam) @@ -554,10 +498,8 @@ void BC_TextBox::disable() { if(enabled) { enabled = 0; - if(top_level) { - if(active) top_level->deactivate(); - draw(1); - } + deactivate(); + draw(1); } } @@ -811,7 +753,10 @@ int BC_TextBox::cursor_enter_event() if(top_level->event_win == win && enabled) { tooltip_done = 0; - + if( !active ) { + top_level->deactivate(); + activate(); + } if(!highlighted) { highlighted = 1; @@ -829,8 +774,9 @@ int BC_TextBox::cursor_leave_event() highlighted = 0; draw_border(); hide_tooltip(); - flash(1); } + if( !suggestions_popup ) + deactivate(); return 0; } @@ -948,28 +894,12 @@ int BC_TextBox::button_press_event() return 1; } else - if(active && (!yscroll || !yscroll->is_event_win())) + if(active && suggestions_popup && (!yscroll || !yscroll->is_event_win())) { -//printf("BC_TextBox::button_press_event %d\n", __LINE__); -// Suggestion popup is not active but must be deactivated. - if(suggestions_popup) - { - return 0; -// printf("BC_TextBox::button_press_event %d\n", __LINE__); -// // Pass event to suggestions popup -// if(!suggestions_popup->button_press_event()) -// { -// printf("BC_TextBox::button_press_event %d\n", __LINE__); -// top_level->deactivate(); -// } - } - else - { - top_level->deactivate(); - } + if( suggestions_popup->button_press_event() ) + return suggestions_popup->handle_event(); } - return 0; } @@ -1047,27 +977,22 @@ int BC_TextBox::cursor_motion_event() int BC_TextBox::activate() { - top_level->active_subwindow = this; - active = 1; + if( !active ) { + active = 1; + top_level->set_active_subwindow(this); + top_level->set_repeat(top_level->get_resources()->blink_rate); + } draw(1); - top_level->set_repeat(top_level->get_resources()->blink_rate); return 0; } int BC_TextBox::deactivate() { -//printf("BC_TextBox::deactivate %d suggestions_popup=%p\n", __LINE__, suggestions_popup); - active = 0; - top_level->unset_repeat(top_level->get_resources()->blink_rate); - if(suggestions_popup) - { -// Must deactivate instead of delete since this is called from BC_ListBox::button_press_event -// suggestions_popup->deactivate(); - - delete suggestions_popup; - suggestions_popup = 0; + if( active ) { + active = 0; + top_level->set_active_subwindow(0); + top_level->unset_repeat(top_level->get_resources()->blink_rate); } - draw(1); return 0; } @@ -1193,15 +1118,11 @@ int BC_TextBox::repeat_event(int64_t duration) void BC_TextBox::default_keypress(int &dispatch_event, int &result) { - if( (top_level->get_keypress() == RETURN) || - (top_level->get_keypress() > 30 && top_level->get_keypress() <= 255)) { - int len; - wchar_t *temp_string = top_level->get_wkeystring(&len); - if(top_level->get_keypress() == RETURN) { - temp_string[0] = '\n'; temp_string[1] = 0; - len = 1; - } - insert_text(temp_string, len); + int key = top_level->get_keypress(), len; + if( (key == RETURN) || ( key >= 32 && key <= 255 ) ) { + wchar_t *wkeys = top_level->get_wkeystring(&len); + if( key == RETURN ) { wkeys[0] = '\n'; wkeys[1] = 0; len = 1; } + insert_text(wkeys, len); find_ibeam(1); draw(1); dispatch_event = 1; @@ -1289,9 +1210,8 @@ int BC_TextBox::keypress_event() switch(last_keypress) { case ESC: { // Deactivate the suggestions - if(suggestions && suggestions_popup) { - delete suggestions_popup; - suggestions_popup = 0; + if( suggestions_popup ) { + no_suggestions(); result = 1; } else { @@ -1302,6 +1222,8 @@ int BC_TextBox::keypress_event() case RETURN: { if( rows == 1 ) { + highlight_letter1 = highlight_letter2 = 0; + ibeam_letter = wtext_update(); top_level->deactivate(); dispatch_event = 1; result = 0; @@ -1405,7 +1327,7 @@ int BC_TextBox::keypress_event() break; } case UP: { - if(suggestions && suggestions_popup) { + if( suggestions && suggestions_popup ) { // Pass to suggestions popup //printf("BC_TextBox::keypress_event %d\n", __LINE__); suggestions_popup->activate(1); @@ -1492,7 +1414,7 @@ int BC_TextBox::keypress_event() // __LINE__, // suggestions, // suggestions_popup); - if(suggestions && suggestions_popup) { + if( suggestions && suggestions_popup ) { // Pass to suggestions popup suggestions_popup->activate(1); suggestions_popup->keypress_event(); @@ -1578,8 +1500,7 @@ int BC_TextBox::keypress_event() break; } case END: { - delete suggestions_popup; - suggestions_popup = 0; + no_suggestions(); int old_ibeam_letter = ibeam_letter; @@ -1611,8 +1532,7 @@ int BC_TextBox::keypress_event() break; } case HOME: { - delete suggestions_popup; - suggestions_popup = 0; + no_suggestions(); int old_ibeam_letter = ibeam_letter; @@ -1650,10 +1570,7 @@ int BC_TextBox::keypress_event() break; } case BACKSPACE: { - if(suggestions_popup) { - delete suggestions_popup; - suggestions_popup = 0; - } + no_suggestions(); if(highlight_letter1 == highlight_letter2) { if(ibeam_letter > 0) { @@ -2149,20 +2066,9 @@ int BC_TextBox::get_rows() -BC_TextBoxSuggestions::BC_TextBoxSuggestions(BC_TextBox *text_box, - int x, - int y) - : BC_ListBox(x, - y, - text_box->get_w(), - 200, - LISTBOX_TEXT, - text_box->suggestions, - 0, - 0, - 1, - 0, - 1) +BC_TextBoxSuggestions::BC_TextBoxSuggestions(BC_TextBox *text_box, int x, int y) + : BC_ListBox(x, y, text_box->get_w(), 200, LISTBOX_TEXT, + text_box->suggestions, 0, 0, 1, 0, 1) { this->text_box = text_box; set_use_button(0); @@ -2173,35 +2079,6 @@ BC_TextBoxSuggestions::~BC_TextBoxSuggestions() { } -int BC_TextBoxSuggestions::selection_changed() -{ -#if 0 -//printf("BC_TextBoxSuggestions::selection_changed %d\n", __LINE__); - BC_ListBoxItem *item = get_selection(0, 0); -//printf("BC_TextBoxSuggestions::selection_changed %d\n", __LINE__); - - if(item) - { - char *current_suggestion = item->get_text(); -//printf("BC_TextBoxSuggestions::selection_changed %d\n", __LINE__); -// int text_box_len = strlen(text_box->text); -//printf("BC_TextBoxSuggestions::selection_changed %d\n", __LINE__); - strcpy(text_box->text + text_box->suggestion_column, current_suggestion); -//printf("BC_TextBoxSuggestions::selection_changed %d\n", __LINE__); - *(text_box->text + text_box->suggestion_column + strlen(current_suggestion)) = 0; - -//printf("BC_TextBoxSuggestions::selection_changed %d\n", __LINE__); - text_box->draw(1); - text_box->handle_event(); - } - - return 1; -#else - return 0; -#endif -} - - int BC_TextBoxSuggestions::handle_event() { char *current_suggestion = 0; diff --git a/cinelerra-5.1/guicast/bctextbox.h b/cinelerra-5.1/guicast/bctextbox.h index b7632ec5..f7d38094 100644 --- a/cinelerra-5.1/guicast/bctextbox.h +++ b/cinelerra-5.1/guicast/bctextbox.h @@ -133,7 +133,7 @@ public: // Compute suggestions for a path // If entries is null, just search absolute paths - int calculate_suggestions(ArrayList *entries); + int calculate_suggestions(ArrayList *entries=0, const char *filter=0); // User computes suggestions after handle_event. @@ -141,6 +141,7 @@ public: // A highlighted extension is added if 1 suggestion or a popup appears // if multiple suggestions. // column - starting column to replace + void no_suggestions(); void set_suggestions(ArrayList *suggestions, int column); BC_ScrollTextBoxYScroll *yscroll; @@ -217,10 +218,8 @@ public: BC_TextBoxSuggestions(BC_TextBox *text_box, int x, int y); virtual ~BC_TextBoxSuggestions(); - int selection_changed(); int handle_event(); - BC_TextBox *text_box; }; -- 2.26.2