Руководство по программированию с wxWidgets (9. Перетаскивание)

Jan Bodnar, “ The wxWidgets programming tutorial (9. Drag and Drop)”, public translation into Russian from English More about this translation.

Translate into another language.

Перетаскивание (драг-н-дроп)

Википедия: в GUI драг-н-дроп - это действие (или поддержка действия) при котором кликаешь на виртуальном объекте и тащишь его в другое место, или в другой виртуальный объект. В основном, это используется для вызова различных типов действий, или для создания различных типов связей между абстрактными объектами.

Функциональность драг-н-дроп - это одна из наиболее очевидных сторон GUI. Драг-н-дроп позволяет выполнять множество сложных действий практически интуитивно.

Выполняя перетаскивание мы, по существу, передаём данные из источника в приёмник. Итак, нам нужно следующее:

* Data object (объект данных)

* Data source (источник данных)

* Data target (приёмник данных)

Для перетаскивания текста в wxWidgets есть встроенный класс wx TextDropTarget.

В следующем примере, мы реализуем возможность перетаскивать имена файлов из верхнего списка в нижний.

В нашем примере мы имеем окно разделённое на три части. Это сделано с помощью виджета wxSplitterWindow. В левой части окна находится общий список директорий. Мы отображаем все директории доступные в файловой системе. В правой части мы имеем два окна. Первое отображает все файлы в выбранной директории. Второе используется для перетаскивания файлов.

MyTextDropTarget *mdt = new MyTextDropTarget(m_lc2);

m_lc2->SetDropTarget(mdt);

Здесь мы определяем приёмник для перетаскиваемого текста.

wxString text = m_lc1->GetItemText(event.GetIndex());

wxTextDataObject tdo(text);

wxDropSource tds(tdo, m_lc1);

tds.DoDragDrop(wxDrag_CopyOnly);

В методе OnDragInit() мы определили объект текстовых данных и объект источника для перетаскивания. Мы вызываем метод DoDragDrop(). Константа wxDrag_CopyOnly позволяет только копировать данные.

bool MyTextDropTarget::OnDropText(wxCoord x, wxCoord y,

const wxString& data)

{

m_owner->InsertItem(0, data);

return true;

}

Итак, выполняя операцию перетаскивания, мы добавляем текстовые данные в список.

Original (English): The wxWidgets programming tutorial (9. Drag and Drop)

Translation: © ber113 .

translated.by crowd

Like this translation? Share it or bookmark!