source: filezilla/trunk/fuentes/src/interface/dialogex.cpp

Last change on this file was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 3.6 KB
Line 
1#include <filezilla.h>
2#include "dialogex.h"
3#include <msgbox.h>
4
5BEGIN_EVENT_TABLE(wxDialogEx, wxDialog)
6EVT_CHAR_HOOK(wxDialogEx::OnChar)
7END_EVENT_TABLE()
8
9int wxDialogEx::m_shown_dialogs = 0;
10
11#ifdef __WXMAC__
12static int const pasteId = wxNewId();
13static int const selectAllId = wxNewId();
14
15extern wxTextEntry* GetSpecialTextEntry(wxWindow*, wxChar);
16
17bool wxDialogEx::ProcessEvent(wxEvent& event)
18{
19        if(event.GetEventType() != wxEVT_MENU) {
20                return wxDialog::ProcessEvent(event);
21        }
22
23        wxTextEntry* e = GetSpecialTextEntry(FindFocus(), 'V');
24        if( e && event.GetId() == pasteId ) {
25                e->Paste();
26                return true;
27        }
28        else if( e && event.GetId() == selectAllId ) {
29                e->SelectAll();
30                return true;
31        }
32        else {
33                return wxDialog::ProcessEvent(event);
34        }
35}
36#endif
37
38void wxDialogEx::OnChar(wxKeyEvent& event)
39{
40        if (event.GetKeyCode() == WXK_ESCAPE) {
41                wxCommandEvent cmdEvent(wxEVT_COMMAND_BUTTON_CLICKED, wxID_CANCEL);
42                ProcessEvent(cmdEvent);
43        }
44        else
45                event.Skip();
46}
47
48bool wxDialogEx::Load(wxWindow* pParent, const wxString& name)
49{
50        SetParent(pParent);
51        if (!wxXmlResource::Get()->LoadDialog(this, pParent, name))
52                return false;
53
54        //GetSizer()->Fit(this);
55        //GetSizer()->SetSizeHints(this);
56
57#ifdef __WXMAC__
58        wxAcceleratorEntry entries[2];
59        entries[0].Set(wxACCEL_CMD, 'V', pasteId);
60        entries[1].Set(wxACCEL_CMD, 'A', selectAllId);
61        wxAcceleratorTable accel(sizeof(entries) / sizeof(wxAcceleratorEntry), entries);
62        SetAcceleratorTable(accel);
63#endif
64
65        return true;
66}
67
68bool wxDialogEx::SetChildLabel(int id, const wxString& label, unsigned long maxLength)
69{
70        wxWindow* pText = FindWindow(id);
71        if (!pText)
72                return false;
73
74        if (!maxLength)
75                pText->SetLabel(label);
76        else {
77                wxString wrapped = label;
78                WrapText(this, wrapped, maxLength);
79                pText->SetLabel(wrapped);
80        }
81
82        return true;
83}
84
85bool wxDialogEx::SetChildLabel(char const* id, const wxString& label, unsigned long maxLength)
86{
87        return SetChildLabel(XRCID(id), label, maxLength);
88}
89
90wxString wxDialogEx::GetChildLabel(int id)
91{
92        wxStaticText* pText = wxDynamicCast(FindWindow(id), wxStaticText);
93        if (!pText)
94                return wxString();
95
96        return pText->GetLabel();
97}
98
99int wxDialogEx::ShowModal()
100{
101        CenterOnParent();
102
103#ifdef __WXMSW__
104        // All open menus need to be closed or app will become unresponsive.
105        ::EndMenu();
106
107        // For same reason release mouse capture.
108        // Could happen during drag&drop with notification dialogs.
109        ::ReleaseCapture();
110#endif
111
112        m_shown_dialogs++;
113
114        int ret = wxDialog::ShowModal();
115
116        m_shown_dialogs--;
117
118        return ret;
119}
120
121bool wxDialogEx::ReplaceControl(wxWindow* old, wxWindow* wnd)
122{
123        if( !GetSizer()->Replace(old, wnd, true) ) {
124                return false;
125        }
126        old->Destroy();
127
128        return true;
129}
130
131bool wxDialogEx::CanShowPopupDialog()
132{
133        if (m_shown_dialogs != 0 || IsShowingMessageBox()) {
134                // There already is a dialog or message box showing
135                return false;
136        }
137
138        wxMouseState mouseState = wxGetMouseState();
139        if (mouseState.LeftIsDown() || mouseState.MiddleIsDown() || mouseState.RightIsDown()) {
140                // Displaying a dialog while the user is clicking is extremely confusing, don't do it.
141                return false;
142        }
143#ifdef __WXMSW__
144        // During a drag & drop we cannot show a dialog. Doing so can render the program unresponsive
145        if (GetCapture()) {
146                return false;
147        }
148#endif
149
150        return true;
151}
152
153void wxDialogEx::InitDialog()
154{
155#ifdef __WXGTK__
156        // Some controls only report proper size after the call to Show(), e.g.
157        // wxStaticBox::GetBordersForSizer is affected by this.
158        // Re-fit window to compensate.
159        wxSizer* s = GetSizer();
160        if( s ) {
161                wxSize min = GetMinClientSize();
162                wxSize smin = s->GetMinSize();
163                if( min.x < smin.x || min.y < smin.y ) {
164                        s->Fit(this);
165                        SetMinSize(GetSize());
166                }
167        }
168#endif
169
170        wxDialog::InitDialog();
171}
Note: See TracBrowser for help on using the repository browser.