2015-01-07 4 views
1

В некоторых случаях, мы хотели бы, чтобы текст в Fl_Text_Editor неизменяемая (например, когда пользователь загружает файл только для чтения Ясно, что Fl_Text_Display также может быть. используется в этих случаях)FLTK: Как включить скроллбар в отключенной Fl_Text_Editor

В настоящее время мы достигаем этого, вызывая деактивацию() на виджнере Fl_Text_Editor, и это правильно отключает виджет, и он становится серым. Однако это также отключает полосы прокрутки, и пользователь не может прокручивать виджет, чтобы прочитать оставшуюся часть текста.

Я попытался переопределить функцию деактивации Fl_Text_Editor и после этого активировать свою полосу прокрутки, но это не сработало. Видимо, виджет активен, когда все его родители также активны.

Любые мысли о том, как я могу использовать полосы прокрутки дезактивированного Fl_Text_Editor, будут очень благодарны.

ответ

2

Поскольку основное отличие между Fl_Text_Editor и Fl_Text_Display - это функция дескриптора, проще всего создать свой собственный класс, который решает, какой дескриптор использовать. Попробуйте добавить в свой код следующее:

class TextEditor: public Fl_Text_Editor 
{ 
    bool m_readonly; 
    Fl_Color grey; 
    Fl_Color normal; 
public: 
    TextEditor(int x, int y, int w, int h, const char* l = 0) 
     :Fl_Text_Editor(x, y, w, h, l) 
     , m_readonly(false) 
    { 
     grey = FL_BACKGROUND_COLOR; 
     normal = FL_BACKGROUND2_COLOR; 
    } 

    int handle(int e) 
    { 
     int rv = 0; 
     if (m_readonly) 
     rv = Fl_Text_Display::handle(e); 
     else 
     rv = Fl_Text_Editor::handle(e); 
     return rv; 
    } 

    void Readonly(bool in_set) 
    { 
     m_readonly = in_set; 
     color(m_readonly? grey: normal); 
    } 
}; 

Используйте TextEditor вместо Fl_Text_Editor. Если вы хотите деактивировать, просто вызовите Readonly (true);

Настройка цвета - это просто добавленная дополнительная возможность сделать дисплей незаписанным.

+0

Отлично работает и гораздо более изящное решение, чем мое (переопределяет событие ручки Fl_Text_Editor и игнорирует ключевые события). Tnx! – Ben

 Смежные вопросы

  • Нет связанных вопросов^_^