]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/dnd/dnd.cpp
Some warnings removed.
[wxWidgets.git] / samples / dnd / dnd.cpp
index 563c0ad7d670cb20e1c245c577a9edf75846febe..d2983beb5a3baa77c1d9d5edbde283618d6dabb3 100644 (file)
@@ -4,9 +4,9 @@
 // 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"
 
 #include  "wx/dnd.h"
 
+#ifdef __WXMOTIF__
+#error Sorry, drag and drop is not yet implemented on wxMotif.
+#endif
+
+#if defined(__WXGTK__) || defined(__WXMOTIF__)
+#include "mondrian.xpm"
+#endif
+
 // ----------------------------------------------------------------------------
-// Derive 2 simple classes which just put in the listbox the strings (text or
+// Derive two simple classes which just put in the listbox the strings (text or
 // file names) we drop on them
 // ----------------------------------------------------------------------------
+
 class DnDText : public wxTextDropTarget
 {
 public:
   DnDText(wxListBox *pOwner) { m_pOwner = pOwner; }
 
-  virtual bool OnDropText(long x, long y, const char *psz);
+  virtual bool OnDropText(long x, long y, const char *psz );
 
 private:
   wxListBox *m_pOwner;
@@ -45,7 +54,7 @@ public:
   DnDFile(wxListBox *pOwner) { m_pOwner = pOwner; }
 
   virtual bool OnDropFiles(long x, long y,
-                           size_t nFiles, const char * const aszFiles[]);
+                           size_t nFiles, const char * const aszFiles[] );
 
 private:
   wxListBox *m_pOwner;
@@ -54,8 +63,9 @@ private:
 // ----------------------------------------------------------------------------
 // Define a new application type
 // ----------------------------------------------------------------------------
+
 class DnDApp : public wxApp
-{ 
+{
 public:
   bool OnInit();
 };
@@ -66,7 +76,7 @@ IMPLEMENT_APP(DnDApp);
 // Define a new frame type
 // ----------------------------------------------------------------------------
 class DnDFrame : public wxFrame
-{ 
+{
 public:
   DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h);
  ~DnDFrame();
@@ -78,10 +88,11 @@ public:
   void OnHelp (wxCommandEvent& event);
   void OnLogClear(wxCommandEvent& event);
 
-  void OnMouseBtnDown(wxMouseEvent& event);
+  void OnLeftDown(wxMouseEvent& event);
+  void OnRightDown(wxMouseEvent& event);
 
   bool OnClose();
-  
+
   DECLARE_EVENT_TABLE()
 
 private:
@@ -97,6 +108,7 @@ private:
 // ----------------------------------------------------------------------------
 // IDs for the menu commands
 // ----------------------------------------------------------------------------
+
 enum
 {
   Menu_Quit = 1,
@@ -112,17 +124,16 @@ BEGIN_EVENT_TABLE(DnDFrame, wxFrame)
   EVT_MENU(Menu_Drag,  DnDFrame::OnDrag)
   EVT_MENU(Menu_Help,  DnDFrame::OnHelp)
   EVT_MENU(Menu_Clear, DnDFrame::OnLogClear)
-
-  EVT_LEFT_DOWN(OnMouseBtnDown)
-  EVT_RIGHT_DOWN(OnMouseBtnDown)
-  EVT_MIDDLE_DOWN(OnMouseBtnDown)
+  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(NULL, "Drag & Drop wxWindows App", 
+  DnDFrame *frame = new DnDFrame((wxFrame  *) NULL, "Drag & Drop wxWindows App",
                                  50, 50, 450, 340);
 
   // activate it
@@ -138,9 +149,12 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
           m_strText("wxWindows drag & drop works :-)")
 
 {
+//  SetBackgroundColour(* wxWHITE);
+
   // frame icon and status bar
-  SetIcon(wxIcon("mondrian"));
-  const int widths[] = { -1 };
+  SetIcon(wxICON(mondrian));
+
+//  const int widths[] = { -1 };
   CreateStatusBar();
 
   // construct menu
@@ -163,7 +177,7 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
   menu_bar->Append(help_menu, "&Help");
 
   SetMenuBar(menu_bar);
-  
+
   // make a panel with 3 subwindows
   wxPoint pos(0, 0);
   wxSize  size(400, 200);
@@ -172,9 +186,10 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
 
   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 | 
-                               wxSUNKEN_BORDER| wxHSCROLL);
+
+  m_ctrlLog   = new wxTextCtrl(this, -1, "", pos, size,
+                               wxTE_MULTILINE | wxTE_READONLY |
+                               wxSUNKEN_BORDER );
 
   // redirect log messages to the text window (don't forget to delete it!)
   m_pLog = new wxLogTextCtrl(m_ctrlLog);
@@ -182,17 +197,19 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
 
   // 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);
 
+  // Top-right listbox
   c = new wxLayoutConstraints;
   c->left.SameAs    (m_ctrlFile, wxRight);
   c->top.SameAs     (this, wxTop);
@@ -200,12 +217,12 @@ DnDFrame::DnDFrame(wxFrame *frame, char *title, int x, int y, int w, int h)
   c->height.PercentOf(this, wxHeight, 40);
   m_ctrlText->SetConstraints(c);
 
+  // Lower text control
   c = new wxLayoutConstraints;
   c->left.SameAs    (this, wxLeft);
   c->right.SameAs   (this, wxRight);
   c->height.PercentOf(this, wxHeight, 40);
   c->top.SameAs(m_ctrlText, wxBottom);
-
   m_ctrlLog->SetConstraints(c);
 
   SetAutoLayout(TRUE);
@@ -216,6 +233,17 @@ void DnDFrame::OnQuit(wxCommandEvent& /* event */)
   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, FALSE, "charter" ) );
+  dc.DrawText( "Drag text from here!", 20, h-22 );
+}
+
 void DnDFrame::OnDrag(wxCommandEvent& /* event */)
 {
   wxString strText = wxGetTextFromUser
@@ -232,7 +260,7 @@ void DnDFrame::OnDrag(wxCommandEvent& /* event */)
 
 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",
@@ -243,58 +271,62 @@ void DnDFrame::OnAbout(wxCommandEvent& /* event */)
 
 void DnDFrame::OnHelp(wxCommandEvent& /* event */)
 {
-  wxMessageDialog dialog(this, 
-"This small program demonstrates drag & drop support in wxWindows. "
-"The program window consists of 3 parts: the bottom pane is for "
-"debug messages, so that you can see what's going on inside. "
-"The top part is split into 2 listboxes, the left one accepts "
-"files and the right one accepts text."
-"\n\n"
-"To test wxDropTarget: open wordpad (write.exe), select some text in "
-"it and drag it to the right listbox (you'll notice the usual visual "
-"feedback, i.e. the cursor will change). Also, try dragging some "
-"files (you can select several at once) from Windows Explorer (or "
-"File Manager) to the left pane. Hold down Ctrl/Shift keys when "
-"you drop text (doesn't 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 it to wordpad or any other droptarget accepting "
-"text (and of course you can just drag it to the right pane). Due to "
-"a lot of trace messages, the cursor might take some time to change, "
-"don't release the mouse button until it does. You can change the "
-"string being dragged in in \"File|Test drag...\" dialog."
-"\n\n"
-"Please send all questions/bug reports/suggestions &c to "
+  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"
+"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"
+"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"
+"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"
+"dragged in in \"File|Test drag...\" dialog.\n"
+"\n"
+"\n"
+"Please send all questions/bug reports/suggestions &c to \n"
 "Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>",
                         "wxDnD Help");
 
   dialog.ShowModal();
 }
 
-void DnDFrame::OnLogClear(wxCommandEvent& event)
+void DnDFrame::OnLogClear(wxCommandEvent& /* event */ )
 {
   m_ctrlLog->Clear();
 }
 
-bool DnDFrame::OnClose() 
-{ 
-  return TRUE; 
+bool DnDFrame::OnClose()
+{
+  return TRUE;
 }
 
-void DnDFrame::OnMouseBtnDown(wxMouseEvent& event)
+void DnDFrame::OnLeftDown(wxMouseEvent &WXUNUSED(event) )
 {
-  if ( !m_strText.IsEmpty() ) {
+  if ( !m_strText.IsEmpty() ) 
+  {
     // start drag operation
-    wxTextDataObject data(m_strText);
-    wxDropSource dragSource(data);
+#ifdef __WXMSW__
+    wxTextDataObject textData(m_strText);
+    wxDropSource dragSource( textData, this );
+#else
+    wxDropSource dragSource( new wxTextDataObject (m_strText), this );
+#endif
     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;
+    switch ( dragSource.DoDragDrop(TRUE) ) 
+    {
+      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;
     }
 
@@ -302,6 +334,17 @@ void DnDFrame::OnMouseBtnDown(wxMouseEvent& event)
   }
 }
 
+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() );
+}
+
 DnDFrame::~DnDFrame()
 {
   if ( m_pLog != NULL ) {
@@ -320,7 +363,7 @@ bool DnDText::OnDropText(long, long, const char *psz)
   return TRUE;
 }
 
-bool DnDFile::OnDropFiles(long, long, size_t nFiles, 
+bool DnDFile::OnDropFiles(long, long, size_t nFiles,
                           const char * const aszFiles[])
 {
   wxString str;