2 // This file is part of the aMule Project.
4 // Copyright (c) 2004-2011 aMule Team ( admin@amule.org / http://www.amule.org )
6 // Any parts of this program derived from the xMule, lMule or eMule project,
7 // or contributed by third-party developers are copyrighted by their
10 // This program is free software; you can redistribute it and/or modify
11 // it under the terms of the GNU General Public License as published by
12 // the Free Software Foundation; either version 2 of the License, or
13 // (at your option) any later version.
15 // This program is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
20 // You should have received a copy of the GNU General Public License
21 // along with this program; if not, write to the Free Software
22 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
25 #include "MuleTextCtrl.h"
28 #include <wx/dataobj.h>
29 #include <wx/clipbrd.h>
32 * These are the IDs used to identify the different menu-items.
34 * Please note that I make use of predefined wxIDs for the first two, but not
35 * for Paste. This is because wxMenu poses some restrictions on what can be
36 * done with items using those IDs, and by default, Paste is enabled even if
37 * there's nothing to paste!
41 //! Cut text, uses provided ID
43 //! Copy text, uses privided ID
44 CMTCE_Copy
= wxID_COPY
,
45 //! Paste text, uses custom ID
46 CMTCE_Paste
= wxID_HIGHEST
+ 666, // Random satanic ID
47 //! Clear text, uses custom ID
49 //! Select All text, uses custom ID
54 BEGIN_EVENT_TABLE(CMuleTextCtrl
, wxTextCtrl
)
56 EVT_RIGHT_DOWN (CMuleTextCtrl::OnRightDown
)
58 EVT_MENU (CMTCE_Paste
, CMuleTextCtrl::OnPaste
)
59 EVT_MENU (CMTCE_Clear
, CMuleTextCtrl::OnClear
)
60 EVT_MENU (CMTCE_SelAll
, CMuleTextCtrl::OnSelAll
)
65 CMuleTextCtrl::CMuleTextCtrl(wxWindow
* parent
, wxWindowID id
, const wxString
& value
, const wxPoint
& pos
, const wxSize
& size
, long style
, const wxValidator
& validator
, const wxString
& name
)
66 : wxTextCtrl( parent
, id
, value
, pos
, size
, style
, validator
, name
)
71 void CMuleTextCtrl::OnRightDown( wxMouseEvent
& evt
)
73 // If this control doesn't have focus, then set it
74 if ( FindFocus() != this )
79 popup_menu
.Append( CMTCE_Cut
, _("Cut") );
80 popup_menu
.Append( CMTCE_Copy
, _("Copy") );
81 popup_menu
.Append( CMTCE_Paste
, _("Paste") );
82 popup_menu
.Append( CMTCE_Clear
, _("Clear") );
84 popup_menu
.AppendSeparator();
86 popup_menu
.Append( CMTCE_SelAll
, _("Select All") );
89 // wxMenu will automatically enable/disable the Cut and Copy items,
90 // however, were are a little more pricky about the Paste item than they
91 // are, so we enable/disable it on our own, depending on whenever or not
92 // there's actually something to paste
93 bool canpaste
= false;
95 if ( wxTheClipboard
->Open() ) {
96 if ( wxTheClipboard
->IsSupported( wxDF_TEXT
) ) {
97 wxTextDataObject data
;
98 wxTheClipboard
->GetData( data
);
100 canpaste
= (data
.GetTextLength() > 0);
102 wxTheClipboard
->Close();
107 popup_menu
.Enable( CMTCE_Paste
, canpaste
);
108 popup_menu
.Enable( CMTCE_Clear
, IsEditable() && !GetValue().IsEmpty() );
110 PopupMenu( &popup_menu
, evt
.GetX(), evt
.GetY() );
114 void CMuleTextCtrl::OnPaste( wxCommandEvent
& WXUNUSED(evt
) )
120 void CMuleTextCtrl::OnSelAll( wxCommandEvent
& WXUNUSED(evt
) )
122 // Move the pointer to the front
123 SetInsertionPoint( 0 );
125 // Selects everything
126 SetSelection( -1, -1 );
130 void CMuleTextCtrl::OnClear( wxCommandEvent
& WXUNUSED(evt
) )
137 //#warning Remove this when wxMAC has been fixed.
138 // https://sourceforge.net/tracker/?func=detail&atid=109863&aid=1189859&group_id=9863
139 void CMuleTextCtrl::Clear()
142 wxFont font
= GetFont();
151 // File_checked_for_headers