// Author: Vadim Zeitlin
// Modified by:
// Created: 04/01/98
-// RCS-ID:
+// RCS-ID: $Id$
// Copyright:
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#include "wx/wxprec.h"
// Define a new application type
// ----------------------------------------------------------------------------
class DnDApp : public wxApp
-{
+{
public:
bool OnInit();
};
// Define a new frame type
// ----------------------------------------------------------------------------
class DnDFrame : public wxFrame
-{
+{
public:
DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
~DnDFrame();
void OnRightDown(wxMouseEvent& event);
bool OnClose();
-
+
DECLARE_EVENT_TABLE()
private:
EVT_MENU(Menu_Drag, DnDFrame::OnDrag)
EVT_MENU(Menu_Help, DnDFrame::OnHelp)
EVT_MENU(Menu_Clear, DnDFrame::OnLogClear)
- EVT_LEFT_DOWN(OnLeftDown)
- EVT_RIGHT_DOWN(OnRightDown)
+ EVT_LEFT_DOWN( DnDFrame::OnLeftDown)
+ EVT_RIGHT_DOWN( DnDFrame::OnRightDown)
+ EVT_PAINT( DnDFrame::OnPaint)
END_EVENT_TABLE()
// `Main program' equivalent, creating windows and returning main app frame
-bool DnDApp::OnInit(void)
+bool DnDApp::OnInit()
{
// create the main frame window
- DnDFrame *frame = new DnDFrame((wxFrame *) NULL, "Drag & Drop wxWindows App",
+ DnDFrame *frame = new DnDFrame((wxFrame *) NULL, "Drag & Drop wxWindows App",
50, 50, 450, 340);
// activate it
{
-#ifdef __WXMSW__
// frame icon and status bar
- SetIcon(wxIcon("mondrian"));
-#else
- SetIcon(wxIcon(mondrian_xpm));
-#endif
-
+ SetIcon(wxICON(mondrian));
+
// const int widths[] = { -1 };
CreateStatusBar();
menu_bar->Append(help_menu, "&Help");
SetMenuBar(menu_bar);
-
+
// make a panel with 3 subwindows
wxPoint pos(0, 0);
wxSize size(400, 200);
m_ctrlFile = new wxListBox(this, -1, pos, size, 1, &strFile, wxLB_HSCROLL);
m_ctrlText = new wxListBox(this, -1, pos, size, 1, &strText, wxLB_HSCROLL);
- m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size,
- wxTE_MULTILINE | wxTE_READONLY |
+ m_ctrlLog = new wxTextCtrl(this, -1, "", pos, size,
+ wxTE_MULTILINE | wxTE_READONLY |
wxSUNKEN_BORDER| wxHSCROLL);
// redirect log messages to the text window (don't forget to delete it!)
// associate drop targets with 2 text controls
m_ctrlFile->SetDropTarget(new DnDFile(m_ctrlFile));
- m_ctrlText->SetDropTarget(new DnDText(m_ctrlText));
+ m_ctrlText->SetDropTarget(new DnDText(m_ctrlText));
wxLayoutConstraints *c;
// Top-left listbox
c = new wxLayoutConstraints;
- c->left.SameAs (this, wxLeft);
- c->top.SameAs (this, wxTop);
+ c->left.SameAs(this, wxLeft);
+ c->top.SameAs(this, wxTop);
c->right.PercentOf(this, wxRight, 50);
c->height.PercentOf(this, wxHeight, 40);
m_ctrlFile->SetConstraints(c);
c->right.SameAs (this, wxRight);
c->height.PercentOf(this, wxHeight, 40);
c->top.SameAs(m_ctrlText, wxBottom);
-
m_ctrlLog->SetConstraints(c);
SetAutoLayout(TRUE);
Close(TRUE);
}
+void DnDFrame::OnPaint(wxPaintEvent& /*event*/)
+{
+ int w = 0;
+ int h = 0;
+ GetClientSize( &w, &h );
+
+ wxPaintDC dc(this);
+ dc.SetFont( wxFont( 24, wxDECORATIVE, wxNORMAL, wxNORMAL ) );
+ dc.DrawText( "Drag text from here!", 20, h-20 );
+}
+
void DnDFrame::OnDrag(wxCommandEvent& /* event */)
{
wxString strText = wxGetTextFromUser
void DnDFrame::OnAbout(wxCommandEvent& /* event */)
{
- wxMessageDialog dialog(this,
+ wxMessageDialog dialog(this,
"Drag-&-Drop Demo\n"
"Please see \"Help|Help...\" for details\n"
"Copyright (c) 1998 Vadim Zeitlin",
void DnDFrame::OnHelp(wxCommandEvent& /* event */)
{
- wxMessageDialog dialog(this,
+ wxMessageDialog dialog(this,
"This small program demonstrates drag & drop support in wxWindows. The program window\n"
"consists of 3 parts: the bottom pane is for debug messages, so that you can see what's\n"
-"going on inside. The top part is split into 2 listboxes, the left one accepts files\n"
+"going on inside. The top part is split into 2 listboxes, the left one accepts files\n"
"and the right one accepts text.\n"
"\n"
-"To test wxDropTarget: open wordpad (write.exe), select some text in it and drag it to\n"
-"the right listbox (you'll notice the usual visual feedback, i.e. the cursor will change).\n"
+"To test wxDropTarget: open wordpad (write.exe), select some text in it and drag it to\n"
+"the right listbox (you'll notice the usual visual feedback, i.e. the cursor will change).\n"
"Also, try dragging some files (you can select several at once) from Windows Explorer (or \n"
"File Manager) to the left pane. Hold down Ctrl/Shift keys when you drop text (doesn't \n"
"work with files) and see what changes.\n"
"\n"
-"To test wxDropSource: just press any mouse button on the empty zone of the window and drag\n"
+"To test wxDropSource: just press any mouse button on the empty zone of the window and drag\n"
"it to wordpad or any other droptarget accepting text (and of course you can just drag it\n"
"to the right pane). Due to a lot of trace messages, the cursor might take some time to \n"
-"change, don't release the mouse button until it does. You can change the string being\n"
+"change, don't release the mouse button until it does. You can change the string being\n"
"dragged in in \"File|Test drag...\" dialog.\n"
"\n"
"\n"
m_ctrlLog->Clear();
}
-bool DnDFrame::OnClose()
-{
- return TRUE;
+bool DnDFrame::OnClose()
+{
+ return TRUE;
}
void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
{
if ( !m_strText.IsEmpty() ) {
// start drag operation
-
+
wxTextDataObject data(m_strText);
wxDropSource dragSource(data, this);
const char *pc;
switch ( dragSource.DoDragDrop(TRUE) ) {
- case wxDropSource::Error: pc = "Error!"; break;
- case wxDropSource::None: pc = "Nothing"; break;
- case wxDropSource::Copy: pc = "Copied"; break;
- case wxDropSource::Move: pc = "Moved"; break;
- case wxDropSource::Cancel: pc = "Cancelled"; break;
+ case wxDragError: pc = "Error!"; break;
+ case wxDragNone: pc = "Nothing"; break;
+ case wxDragCopy: pc = "Copied"; break;
+ case wxDragMove: pc = "Moved"; break;
+ case wxDragCancel: pc = "Cancelled"; break;
default: pc = "Huh?"; break;
}
void DnDFrame::OnRightDown(wxMouseEvent &event )
{
wxMenu *menu = new wxMenu;
-
+
menu->Append(Menu_Drag, "&Test drag...");
menu->Append(Menu_About, "&About");
menu->Append(Menu_Quit, "E&xit");
-
+
PopupMenu( menu, event.GetX(), event.GetY() );
}
return TRUE;
}
-bool DnDFile::OnDropFiles(long, long, size_t nFiles,
+bool DnDFile::OnDropFiles(long, long, size_t nFiles,
const char * const aszFiles[])
{
wxString str;