Руководство по программированию с wxWidgets (9. Перетаскивание) |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translation complete.
Перетаскивание (драг-н-дроп)
Википедия: в 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;
}
Итак, выполняя операцию перетаскивания, мы добавляем текстовые данные в список.
