diff --git a/lib/EAPBase_UI/include/EAP_UI.h b/lib/EAPBase_UI/include/EAP_UI.h index e542501..0927322 100644 --- a/lib/EAPBase_UI/include/EAP_UI.h +++ b/lib/EAPBase_UI/include/EAP_UI.h @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -34,18 +35,21 @@ class wxEAPBannerPanel; /// template class wxEAPConfigDialog; +/// +/// EAP general-use dialog +/// +class wxEAPGeneralDialog; + /// /// EAP top-most credential dialog /// class wxEAPCredentialsDialog; - /// /// EAP general note /// class wxEAPNotePanel; - /// /// EAP provider-locked congifuration note /// @@ -56,6 +60,21 @@ class wxEAPProviderLockedPanel; /// class wxEAPCredentialWarningPanel; +/// +/// EAP Configuration window +/// +class wxEAPConfigWindow; + +/// +/// EAP provider identity config panel +/// +class wxEAPProviderIdentityPanel; + +/// +/// EAP provider configuration dialog +/// +class wxEAPConfigProvider; + /// /// Base template for credential configuration panel /// @@ -151,6 +170,7 @@ public: protected: /// \cond internal + virtual void OnInitDialog(wxInitDialogEvent& event) { // Forward the event to child panels. @@ -160,6 +180,22 @@ protected: prov->GetEventHandler()->ProcessEvent(event); } } + + virtual void OnUpdateUI(wxUpdateUIEvent& event) + { + UNREFERENCED_PARAMETER(event); + + m_advanced->Enable(!m_cfg.m_providers.at(m_providers->GetSelection()).m_read_only); + } + + virtual void OnAdvanced(wxCommandEvent& event) + { + UNREFERENCED_PARAMETER(event); + + wxEAPConfigProvider dlg(m_cfg.m_providers.at(m_providers->GetSelection()), this); + dlg.ShowModal(); + } + /// \endcond @@ -168,23 +204,38 @@ protected: }; -class wxEAPCredentialsDialog : public wxEAPCredentialsDialogBase +class wxEAPGeneralDialog : public wxEAPGeneralDialogBase +{ +public: + /// + /// Constructs a dialog + /// + wxEAPGeneralDialog(wxWindow* parent, const wxString& title = wxEmptyString); + + /// + /// Adds panels to the dialog + /// + void AddContent(wxPanel **contents, size_t content_count); + + /// + /// Adds single panel to the dialog + /// + void AddContent(wxPanel *content); + +protected: + /// \cond internal + virtual void OnInitDialog(wxInitDialogEvent& event); + /// \endcond +}; + + +class wxEAPCredentialsDialog : public wxEAPGeneralDialog { public: /// /// Constructs a credential dialog /// wxEAPCredentialsDialog(const eap::config_provider &prov, wxWindow* parent); - - /// - /// Adds panels to the dialog - /// - void AddContents(wxPanel **contents, size_t content_count); - -protected: - /// \cond internal - virtual void OnInitDialog(wxInitDialogEvent& event); - /// \endcond }; @@ -265,6 +316,76 @@ protected: }; +class wxEAPConfigWindow : public wxScrolledWindow +{ +public: + /// + /// Constructs a configuration window + /// + /// \param[in] prov Provider configuration data + /// \param[inout] cfg Configuration data + /// \param[in] parent Parent window + /// + wxEAPConfigWindow(const eap::config_provider &prov, eap::config_method &cfg, wxWindow* parent); + + /// + /// Destructs the configuration window + /// + virtual ~wxEAPConfigWindow(); + +protected: + /// \cond internal + virtual void OnInitDialog(wxInitDialogEvent& event); + virtual void OnUpdateUI(wxUpdateUIEvent& event); + /// \endcond + +protected: + const eap::config_provider &m_prov; ///< EAP provider + eap::config_method &m_cfg; ///< Method configuration +}; + + +class wxEAPProviderIdentityPanel : public wxEAPProviderIdentityPanelBase +{ +public: + /// + /// Constructs a provider identity pannel + /// + /// \param[inout] prov Provider configuration data + /// \param[in] parent Parent window + /// + wxEAPProviderIdentityPanel(eap::config_provider &prov, wxWindow* parent); + +protected: + /// \cond internal + virtual bool TransferDataToWindow(); + virtual bool TransferDataFromWindow(); + /// \endcond + +protected: + eap::config_provider &m_prov; ///< EAP method configuration + winstd::library m_shell32; ///< shell32.dll resource library reference + wxIcon m_icon; ///< Panel icon +}; + + +class wxEAPConfigProvider : public wxEAPGeneralDialog +{ +public: + /// + /// Constructs a provider config dialog + /// + /// \param[inout] prov Provider configuration data + /// \param[in] parent Parent window + /// + wxEAPConfigProvider(eap::config_provider &prov, wxWindow* parent); + +protected: + eap::config_provider &m_prov; ///< EAP method configuration + wxEAPProviderIdentityPanel *m_identity; ///< Provider identity panel +}; + + template class wxEAPCredentialsConfigPanel : public wxEAPCredentialsConfigPanelBase { @@ -402,7 +523,7 @@ protected: // Display credential prompt. wxEAPCredentialsDialog dlg(m_prov, this); _wxT *panel = new _wxT(m_prov, m_cfg, cred, m_target.c_str(), &dlg, true); - dlg.AddContents((wxPanel**)&panel, 1); + dlg.AddContent(panel); if (dlg.ShowModal() == wxID_OK && panel->GetRememberValue()) { // Write credentials to credential manager. try { @@ -433,21 +554,21 @@ protected: _wxT *panel = new _wxT(m_prov, m_cfg, m_cred, _T(""), &dlg, true); - dlg.AddContents((wxPanel**)&panel, 1); + dlg.AddContent(panel); dlg.ShowModal(); } /// \endcond protected: - const eap::config_provider &m_prov; ///< EAP provider + const eap::config_provider &m_prov; ///< EAP provider eap::config_method_with_cred &m_cfg; ///< EAP method configuration - winstd::library m_shell32; ///< shell32.dll resource library reference - wxIcon m_icon; ///< Panel icon - winstd::tstring m_target; ///< Credential Manager target + winstd::library m_shell32; ///< shell32.dll resource library reference + wxIcon m_icon; ///< Panel icon + winstd::tstring m_target; ///< Credential Manager target private: - _Tcred m_cred; ///< Temporary credential data + _Tcred m_cred; ///< Temporary credential data }; diff --git a/lib/EAPBase_UI/res/wxEAP_UI.cpp b/lib/EAPBase_UI/res/wxEAP_UI.cpp index 049cfe7..29e50ef 100644 --- a/lib/EAPBase_UI/res/wxEAP_UI.cpp +++ b/lib/EAPBase_UI/res/wxEAP_UI.cpp @@ -28,6 +28,20 @@ wxEAPConfigDialogBase::wxEAPConfigDialogBase( wxWindow* parent, wxWindowID id, c sb_content->Add( m_providers, 1, wxEXPAND|wxALL, 10 ); + wxBoxSizer* sb_bottom_horiz; + sb_bottom_horiz = new wxBoxSizer( wxHORIZONTAL ); + + wxBoxSizer* sb_bottom_horiz_inner; + sb_bottom_horiz_inner = new wxBoxSizer( wxHORIZONTAL ); + + m_advanced = new wxButton( this, wxID_ANY, _("Advanced..."), wxDefaultPosition, wxDefaultSize, 0 ); + m_advanced->SetToolTip( _("Opens dialog with provider settings") ); + + sb_bottom_horiz_inner->Add( m_advanced, 0, wxALL, 5 ); + + + sb_bottom_horiz->Add( sb_bottom_horiz_inner, 1, wxEXPAND, 5 ); + m_buttons = new wxStdDialogButtonSizer(); m_buttonsOK = new wxButton( this, wxID_OK ); m_buttons->AddButton( m_buttonsOK ); @@ -35,7 +49,10 @@ wxEAPConfigDialogBase::wxEAPConfigDialogBase( wxWindow* parent, wxWindowID id, c m_buttons->AddButton( m_buttonsCancel ); m_buttons->Realize(); - sb_content->Add( m_buttons, 0, wxEXPAND|wxALL, 5 ); + sb_bottom_horiz->Add( m_buttons, 0, wxEXPAND|wxALL, 5 ); + + + sb_content->Add( sb_bottom_horiz, 0, wxEXPAND, 5 ); this->SetSizer( sb_content ); @@ -44,16 +61,20 @@ wxEAPConfigDialogBase::wxEAPConfigDialogBase( wxWindow* parent, wxWindowID id, c // Connect Events this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxEAPConfigDialogBase::OnInitDialog ) ); + this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxEAPConfigDialogBase::OnUpdateUI ) ); + m_advanced->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxEAPConfigDialogBase::OnAdvanced ), NULL, this ); } wxEAPConfigDialogBase::~wxEAPConfigDialogBase() { // Disconnect Events this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxEAPConfigDialogBase::OnInitDialog ) ); + this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxEAPConfigDialogBase::OnUpdateUI ) ); + m_advanced->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( wxEAPConfigDialogBase::OnAdvanced ), NULL, this ); } -wxEAPCredentialsDialogBase::wxEAPCredentialsDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) +wxEAPGeneralDialogBase::wxEAPGeneralDialogBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); @@ -84,13 +105,13 @@ wxEAPCredentialsDialogBase::wxEAPCredentialsDialogBase( wxWindow* parent, wxWind sb_content->Fit( this ); // Connect Events - this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxEAPCredentialsDialogBase::OnInitDialog ) ); + this->Connect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxEAPGeneralDialogBase::OnInitDialog ) ); } -wxEAPCredentialsDialogBase::~wxEAPCredentialsDialogBase() +wxEAPGeneralDialogBase::~wxEAPGeneralDialogBase() { // Disconnect Events - this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxEAPCredentialsDialogBase::OnInitDialog ) ); + this->Disconnect( wxEVT_INIT_DIALOG, wxInitDialogEventHandler( wxEAPGeneralDialogBase::OnInitDialog ) ); } @@ -99,20 +120,20 @@ wxEAPBannerPanelBase::wxEAPBannerPanelBase( wxWindow* parent, wxWindowID id, con this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHT ) ); this->SetMinSize( wxSize( -1,48 ) ); - wxBoxSizer* sc_content; - sc_content = new wxBoxSizer( wxVERTICAL ); + wxBoxSizer* sb_content; + sb_content = new wxBoxSizer( wxVERTICAL ); m_title = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxALIGN_RIGHT ); m_title->Wrap( -1 ); m_title->SetFont( wxFont( 18, 70, 90, 90, false, wxEmptyString ) ); m_title->SetForegroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_HIGHLIGHTTEXT ) ); - sc_content->Add( m_title, 0, wxALL|wxEXPAND, 5 ); + sb_content->Add( m_title, 0, wxALL|wxEXPAND, 5 ); - this->SetSizer( sc_content ); + this->SetSizer( sb_content ); this->Layout(); - sc_content->Fit( this ); + sb_content->Fit( this ); } wxEAPBannerPanelBase::~wxEAPBannerPanelBase() @@ -333,3 +354,113 @@ wxEAPCredentialsPassPanelBase::wxEAPCredentialsPassPanelBase( wxWindow* parent, wxEAPCredentialsPassPanelBase::~wxEAPCredentialsPassPanelBase() { } + +wxEAPProviderIdentityPanelBase::wxEAPProviderIdentityPanelBase( wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style ) : wxPanel( parent, id, pos, size, style ) +{ + wxStaticBoxSizer* sb_provider_id; + sb_provider_id = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Your Organization") ), wxVERTICAL ); + + wxBoxSizer* sb_provider_id_horiz; + sb_provider_id_horiz = new wxBoxSizer( wxHORIZONTAL ); + + m_provider_id_icon = new wxStaticBitmap( sb_provider_id->GetStaticBox(), wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); + sb_provider_id_horiz->Add( m_provider_id_icon, 0, wxALL, 5 ); + + wxBoxSizer* sb_provider_id_vert; + sb_provider_id_vert = new wxBoxSizer( wxVERTICAL ); + + m_provider_id_label = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _("Describe your organization to customize user prompts. When organization is introduced, end-users find program messages easier to understand and act."), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_id_label->Wrap( 446 ); + sb_provider_id_vert->Add( m_provider_id_label, 0, wxALL|wxEXPAND, 5 ); + + wxBoxSizer* sb_provider_name; + sb_provider_name = new wxBoxSizer( wxVERTICAL ); + + m_provider_name_label = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _("Your organization &name:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_name_label->Wrap( -1 ); + sb_provider_name->Add( m_provider_name_label, 0, wxBOTTOM, 5 ); + + m_provider_name = new wxTextCtrl( sb_provider_id->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_name->SetToolTip( _("Your organization name as it will appear on helpdesk contact notifications") ); + + sb_provider_name->Add( m_provider_name, 0, wxEXPAND|wxBOTTOM, 5 ); + + m_provider_name_note = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _("(Keep it short, please)"), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_name_note->Wrap( -1 ); + sb_provider_name->Add( m_provider_name_note, 0, wxALIGN_RIGHT, 5 ); + + + sb_provider_id_vert->Add( sb_provider_name, 0, wxEXPAND|wxALL, 5 ); + + wxBoxSizer* sb_provider_helpdesk; + sb_provider_helpdesk = new wxBoxSizer( wxVERTICAL ); + + m_provider_helpdesk_label = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _("Helpdesk contact &information:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_helpdesk_label->Wrap( -1 ); + sb_provider_helpdesk->Add( m_provider_helpdesk_label, 0, wxBOTTOM, 5 ); + + wxFlexGridSizer* sb_provider_helpdesk_inner; + sb_provider_helpdesk_inner = new wxFlexGridSizer( 0, 2, 0, 0 ); + sb_provider_helpdesk_inner->AddGrowableCol( 1 ); + sb_provider_helpdesk_inner->SetFlexibleDirection( wxBOTH ); + sb_provider_helpdesk_inner->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_provider_web_icon = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _("¶"), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_web_icon->Wrap( -1 ); + m_provider_web_icon->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Wingdings") ) ); + + sb_provider_helpdesk_inner->Add( m_provider_web_icon, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); + + m_provider_web = new wxTextCtrl( sb_provider_id->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_web->SetToolTip( _("Your helpdesk website") ); + + sb_provider_helpdesk_inner->Add( m_provider_web, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + m_provider_email_icon = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _("*"), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_email_icon->Wrap( -1 ); + m_provider_email_icon->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Wingdings") ) ); + + sb_provider_helpdesk_inner->Add( m_provider_email_icon, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 ); + + m_provider_email = new wxTextCtrl( sb_provider_id->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_email->SetToolTip( _("Your helpdesk e-mail address") ); + + sb_provider_helpdesk_inner->Add( m_provider_email, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM, 5 ); + + m_provider_phone_icon = new wxStaticText( sb_provider_id->GetStaticBox(), wxID_ANY, _(")"), wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_phone_icon->Wrap( -1 ); + m_provider_phone_icon->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 90, false, wxT("Wingdings") ) ); + + sb_provider_helpdesk_inner->Add( m_provider_phone_icon, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 ); + + m_provider_phone = new wxTextCtrl( sb_provider_id->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + m_provider_phone->SetToolTip( _("Your helpdesk phone number") ); + + sb_provider_helpdesk_inner->Add( m_provider_phone, 1, wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 ); + + + sb_provider_helpdesk->Add( sb_provider_helpdesk_inner, 1, wxEXPAND, 5 ); + + + sb_provider_id_vert->Add( sb_provider_helpdesk, 1, wxEXPAND, 5 ); + + + sb_provider_id_horiz->Add( sb_provider_id_vert, 1, wxEXPAND, 5 ); + + + sb_provider_id->Add( sb_provider_id_horiz, 1, wxEXPAND, 5 ); + + + this->SetSizer( sb_provider_id ); + this->Layout(); + + // Connect Events + this->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxEAPProviderIdentityPanelBase::OnUpdateUI ) ); +} + +wxEAPProviderIdentityPanelBase::~wxEAPProviderIdentityPanelBase() +{ + // Disconnect Events + this->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( wxEAPProviderIdentityPanelBase::OnUpdateUI ) ); + +} diff --git a/lib/EAPBase_UI/res/wxEAP_UI.fbp b/lib/EAPBase_UI/res/wxEAP_UI.fbp index 2e1ffcd..8e66211 100644 --- a/lib/EAPBase_UI/res/wxEAP_UI.fbp +++ b/lib/EAPBase_UI/res/wxEAP_UI.fbp @@ -87,7 +87,7 @@ - + OnUpdateUI sb_content @@ -264,28 +264,138 @@ 5 - wxEXPAND|wxALL + wxEXPAND 0 - - 0 - 1 - 0 - 0 - 0 - 1 - 0 - 0 + - m_buttons - protected - - - - - - - - + sb_bottom_horiz + wxHORIZONTAL + none + + 5 + wxEXPAND + 1 + + + sb_bottom_horiz_inner + wxHORIZONTAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Advanced... + + 0 + + + 0 + + 1 + m_advanced + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Opens dialog with provider settings + + wxFILTER_NONE + wxDefaultValidator + + + + + OnAdvanced + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + 0 + 1 + 0 + 0 + 0 + 1 + 0 + 0 + + m_buttons + protected + + + + + + + + + + @@ -306,12 +416,12 @@ wxID_ANY - wxEAPCredentialsDialogBase + wxEAPGeneralDialogBase wxDEFAULT_DIALOG_STYLE ; - EAP Credentials + @@ -535,7 +645,7 @@ - sc_content + sb_content wxVERTICAL none @@ -2506,5 +2616,1155 @@ + + 0 + wxAUI_MGR_DEFAULT + + + 1 + 1 + impl_virtual + + + 0 + wxID_ANY + + + wxEAPProviderIdentityPanelBase + + 500,-1 + + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OnUpdateUI + + wxID_ANY + Your Organization + + sb_provider_id + wxVERTICAL + none + + + 5 + wxEXPAND + 1 + + + sb_provider_id_horiz + wxHORIZONTAL + none + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + + + Load From Icon Resource; ; [32; 32] + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + 0 + + 1 + m_provider_id_icon + 1 + + + protected + 1 + + Resizable + 1 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + sb_provider_id_vert + wxVERTICAL + none + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Describe your organization to customize user prompts. When organization is introduced, end-users find program messages easier to understand and act. + + 0 + + + 0 + + 1 + m_provider_id_label + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + 446 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 0 + + + sb_provider_name + wxVERTICAL + none + + 5 + wxBOTTOM + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Your organization &name: + + 0 + + + 0 + + 1 + m_provider_name_label + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxBOTTOM + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_provider_name + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Your organization name as it will appear on helpdesk contact notifications + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + (Keep it short, please) + + 0 + + + 0 + + 1 + m_provider_name_note + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + sb_provider_helpdesk + wxVERTICAL + none + + 5 + wxBOTTOM + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Helpdesk contact &information: + + 0 + + + 0 + + 1 + m_provider_helpdesk_label + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 2 + wxBOTH + 1 + + 0 + + sb_provider_helpdesk_inner + wxFLEX_GROWMODE_SPECIFIED + none + 0 + 0 + + 5 + wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + Wingdings,90,90,-1,70,0 + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_provider_web_icon + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_provider_web + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Your helpdesk website + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + Wingdings,90,90,-1,70,0 + 0 + 0 + wxID_ANY + * + + 0 + + + 0 + + 1 + m_provider_email_icon + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_provider_email + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Your helpdesk e-mail address + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxRIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + Wingdings,90,90,-1,70,0 + 0 + 0 + wxID_ANY + ) + + 0 + + + 0 + + 1 + m_provider_phone_icon + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALIGN_CENTER_VERTICAL + 1 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + 0 + + + + 0 + + 1 + m_provider_phone + 1 + + + protected + 1 + + Resizable + 1 + + + + 0 + Your helpdesk phone number + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/EAPBase_UI/res/wxEAP_UI.h b/lib/EAPBase_UI/res/wxEAP_UI.h index c1599d6..53e5602 100644 --- a/lib/EAPBase_UI/res/wxEAP_UI.h +++ b/lib/EAPBase_UI/res/wxEAP_UI.h @@ -18,8 +18,8 @@ class wxEAPBannerPanel; #include #include #include -#include #include +#include #include #include #include @@ -44,12 +44,15 @@ class wxEAPConfigDialogBase : public wxDialog protected: wxEAPBannerPanel *m_banner; wxNotebook* m_providers; + wxButton* m_advanced; wxStdDialogButtonSizer* m_buttons; wxButton* m_buttonsOK; wxButton* m_buttonsCancel; // Virtual event handlers, overide them in your derived class virtual void OnInitDialog( wxInitDialogEvent& event ) { event.Skip(); } + virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); } + virtual void OnAdvanced( wxCommandEvent& event ) { event.Skip(); } public: @@ -60,9 +63,9 @@ class wxEAPConfigDialogBase : public wxDialog }; /////////////////////////////////////////////////////////////////////////////// -/// Class wxEAPCredentialsDialogBase +/// Class wxEAPGeneralDialogBase /////////////////////////////////////////////////////////////////////////////// -class wxEAPCredentialsDialogBase : public wxDialog +class wxEAPGeneralDialogBase : public wxDialog { private: @@ -79,8 +82,8 @@ class wxEAPCredentialsDialogBase : public wxDialog public: - wxEAPCredentialsDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("EAP Credentials"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); - ~wxEAPCredentialsDialogBase(); + wxEAPGeneralDialogBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); + ~wxEAPGeneralDialogBase(); }; @@ -175,4 +178,36 @@ class wxEAPCredentialsPassPanelBase : public wxPanel }; +/////////////////////////////////////////////////////////////////////////////// +/// Class wxEAPProviderIdentityPanelBase +/////////////////////////////////////////////////////////////////////////////// +class wxEAPProviderIdentityPanelBase : public wxPanel +{ + private: + + protected: + wxStaticBitmap* m_provider_id_icon; + wxStaticText* m_provider_id_label; + wxStaticText* m_provider_name_label; + wxTextCtrl* m_provider_name; + wxStaticText* m_provider_name_note; + wxStaticText* m_provider_helpdesk_label; + wxStaticText* m_provider_web_icon; + wxTextCtrl* m_provider_web; + wxStaticText* m_provider_email_icon; + wxTextCtrl* m_provider_email; + wxStaticText* m_provider_phone_icon; + wxTextCtrl* m_provider_phone; + + // Virtual event handlers, overide them in your derived class + virtual void OnUpdateUI( wxUpdateUIEvent& event ) { event.Skip(); } + + + public: + + wxEAPProviderIdentityPanelBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 500,-1 ), long style = wxTAB_TRAVERSAL ); + ~wxEAPProviderIdentityPanelBase(); + +}; + #endif //__WXEAP_UI_H__ diff --git a/lib/EAPBase_UI/src/EAP_UI.cpp b/lib/EAPBase_UI/src/EAP_UI.cpp index 6598b51..06a1909 100644 --- a/lib/EAPBase_UI/src/EAP_UI.cpp +++ b/lib/EAPBase_UI/src/EAP_UI.cpp @@ -38,22 +38,19 @@ bool wxEAPBannerPanel::AcceptsFocusFromKeyboard() const ////////////////////////////////////////////////////////////////////// -// wxEAPCredentialsDialog +// wxEAPGeneralDialog ////////////////////////////////////////////////////////////////////// -wxEAPCredentialsDialog::wxEAPCredentialsDialog(const eap::config_provider &prov, wxWindow* parent) : wxEAPCredentialsDialogBase(parent) +wxEAPGeneralDialog::wxEAPGeneralDialog(wxWindow* parent, const wxString& title) : wxEAPGeneralDialogBase(parent, wxID_ANY, title) { // Set extra style here, as wxFormBuilder overrides all default flags. this->SetExtraStyle(this->GetExtraStyle() | wxWS_EX_VALIDATE_RECURSIVELY); - // Set banner title. - m_banner->m_title->SetLabel(wxString::Format(_("%s Credentials"), prov.m_id.c_str())); - m_buttonsOK->SetDefault(); } -void wxEAPCredentialsDialog::AddContents(wxPanel **contents, size_t content_count) +void wxEAPGeneralDialog::AddContent(wxPanel **contents, size_t content_count) { if (content_count) { for (size_t i = 0; i < content_count; i++) @@ -66,13 +63,30 @@ void wxEAPCredentialsDialog::AddContents(wxPanel **contents, size_t content_coun } -void wxEAPCredentialsDialog::OnInitDialog(wxInitDialogEvent& event) +void wxEAPGeneralDialog::AddContent(wxPanel *content) +{ + AddContent(&content, 1); +} + + +void wxEAPGeneralDialog::OnInitDialog(wxInitDialogEvent& event) { for (wxSizerItemList::compatibility_iterator panel = m_panels->GetChildren().GetFirst(); panel; panel = panel->GetNext()) panel->GetData()->GetWindow()->GetEventHandler()->ProcessEvent(event); } +////////////////////////////////////////////////////////////////////// +// wxEAPCredentialsDialog +////////////////////////////////////////////////////////////////////// + +wxEAPCredentialsDialog::wxEAPCredentialsDialog(const eap::config_provider &prov, wxWindow* parent) : wxEAPGeneralDialog(parent, _("EAP Credentials")) +{ + // Set banner title. + m_banner->m_title->SetLabel(wxString::Format(_("%s Credentials"), prov.m_id.c_str())); +} + + ////////////////////////////////////////////////////////////////////// // wxEAPNotePanel ////////////////////////////////////////////////////////////////////// @@ -189,3 +203,106 @@ wxEAPCredentialWarningPanel::wxEAPCredentialWarningPanel(const eap::config_provi this->Layout(); } + + +////////////////////////////////////////////////////////////////////// +// wxEAPConfigWindow +////////////////////////////////////////////////////////////////////// + +wxEAPConfigWindow::wxEAPConfigWindow(const eap::config_provider &prov, eap::config_method &cfg, wxWindow* parent) : + m_prov(prov), + m_cfg(cfg), + wxScrolledWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL) +{ + this->SetScrollRate(5, 5); + + // Connect Events + this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(wxEAPConfigWindow::OnInitDialog)); + this->Connect(wxEVT_UPDATE_UI, wxUpdateUIEventHandler(wxEAPConfigWindow::OnUpdateUI)); +} + + +wxEAPConfigWindow::~wxEAPConfigWindow() +{ + // Disconnect Events + this->Disconnect(wxEVT_UPDATE_UI, wxUpdateUIEventHandler(wxEAPConfigWindow::OnUpdateUI)); + this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(wxEAPConfigWindow::OnInitDialog)); +} + + +void wxEAPConfigWindow::OnInitDialog(wxInitDialogEvent& event) +{ + UNREFERENCED_PARAMETER(event); + + // Call TransferDataToWindow() manually, as wxScrolledWindow somehow skips that. + TransferDataToWindow(); +} + + +void wxEAPConfigWindow::OnUpdateUI(wxUpdateUIEvent& event) +{ + UNREFERENCED_PARAMETER(event); + + if (m_parent && m_parent->IsKindOf(wxCLASSINFO(wxNotebook))) { + // We're a notebook page. Set the ID of our provider as our page label. + wxNotebook *notebook = (wxNotebook*)m_parent; + int idx = notebook->FindPage(this); + if (idx != wxNOT_FOUND) + notebook->SetPageText(idx, m_prov.m_id); + } else + this->SetLabel(m_prov.m_id); +} + + +////////////////////////////////////////////////////////////////////// +// wxEAPProviderIdentityPanel +////////////////////////////////////////////////////////////////////// + +wxEAPProviderIdentityPanel::wxEAPProviderIdentityPanel(eap::config_provider &prov, wxWindow* parent) : + m_prov(prov), + wxEAPProviderIdentityPanelBase(parent) +{ + // Load and set icon. + if (m_shell32.load(_T("shell32.dll"), NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE)) + wxSetIconFromResource(m_provider_id_icon, m_icon, m_shell32, MAKEINTRESOURCE(259)); +} + + +bool wxEAPProviderIdentityPanel::TransferDataToWindow() +{ + m_provider_name ->SetValue(m_prov.m_id ); + m_provider_web ->SetValue(m_prov.m_help_web ); + m_provider_email->SetValue(m_prov.m_help_email); + m_provider_phone->SetValue(m_prov.m_help_phone); + + return wxEAPProviderIdentityPanelBase::TransferDataToWindow(); +} + + +bool wxEAPProviderIdentityPanel::TransferDataFromWindow() +{ + wxCHECK(wxEAPProviderIdentityPanelBase::TransferDataFromWindow(), false); + + m_prov.m_id = m_provider_name ->GetValue(); + m_prov.m_help_web = m_provider_web ->GetValue(); + m_prov.m_help_email = m_provider_email->GetValue(); + m_prov.m_help_phone = m_provider_phone->GetValue(); + + return true; +} + + +////////////////////////////////////////////////////////////////////// +// wxEAPConfigProvider +////////////////////////////////////////////////////////////////////// + +wxEAPConfigProvider::wxEAPConfigProvider(eap::config_provider &prov, wxWindow* parent) : + m_prov(prov), + wxEAPGeneralDialog(parent, _("Provider Settings")) +{ + // Set banner title. + m_banner->m_title->SetLabel(_("Provider Settings")); + + m_identity = new wxEAPProviderIdentityPanel(prov, this); + AddContent(m_identity); +} diff --git a/lib/TTLS_UI/include/TTLS_UI.h b/lib/TTLS_UI/include/TTLS_UI.h index 54e58e2..7a97d5f 100644 --- a/lib/TTLS_UI/include/TTLS_UI.h +++ b/lib/TTLS_UI/include/TTLS_UI.h @@ -45,7 +45,6 @@ class wxTTLSCredentialsPanel; #include #include -#include #include #include @@ -74,23 +73,19 @@ protected: }; -class wxTTLSConfigWindow : public wxScrolledWindow +class wxTTLSConfigWindow : public wxEAPConfigWindow { public: /// /// Constructs a configuration panel /// + /// \param[in] prov Provider configuration data /// \param[inout] cfg Configuration data /// \param[in] pszCredTarget Target name of credentials in Windows Credential Manager. Can be further decorated to create final target name. /// \param[in] parent Parent window /// wxTTLSConfigWindow(const eap::config_provider &prov, eap::config_method &cfg, LPCTSTR pszCredTarget, wxWindow* parent); - /// - /// Destructs the configuration panel - /// - virtual ~wxTTLSConfigWindow(); - protected: /// \cond internal virtual bool TransferDataToWindow(); @@ -99,7 +94,6 @@ protected: /// \endcond protected: - const eap::config_provider &m_prov; ///< EAP provider eap::config_method_ttls &m_cfg; ///< TTLS configuration wxStaticText *m_outer_title; ///< Outer authentication title wxTTLSConfigPanel *m_outer_identity; ///< Outer identity configuration panel @@ -108,7 +102,7 @@ protected: wxChoicebook *m_inner_type; ///< Inner authentication type // Temporary inner method configurations to hold data until applied - eap::config_method_pap m_cfg_pap; ///< PAP configuration + eap::config_method_pap m_cfg_pap; ///< PAP configuration }; diff --git a/lib/TTLS_UI/src/Module.cpp b/lib/TTLS_UI/src/Module.cpp index 993b27e..edce880 100644 --- a/lib/TTLS_UI/src/Module.cpp +++ b/lib/TTLS_UI/src/Module.cpp @@ -193,7 +193,7 @@ void eap::peer_ttls_ui::invoke_identity_ui( // Create credentials dialog. wxEAPCredentialsDialog dlg(cfg_prov, &parent); wxTTLSCredentialsPanel *panel = new wxTTLSCredentialsPanel(cfg_prov, *cfg_method, cred_out, cfg_prov.m_id.c_str(), &dlg); - dlg.AddContents((wxPanel**)&panel, 1); + dlg.AddContent(panel); // Set "Remember" checkboxes according to credential source, panel->m_outer_cred->SetRememberValue(cred_source.first == eap::credentials::source_storage); diff --git a/lib/TTLS_UI/src/TTLS_UI.cpp b/lib/TTLS_UI/src/TTLS_UI.cpp index 20eb554..fccd7bf 100644 --- a/lib/TTLS_UI/src/TTLS_UI.cpp +++ b/lib/TTLS_UI/src/TTLS_UI.cpp @@ -94,10 +94,9 @@ void wxTTLSConfigPanel::OnUpdateUI(wxUpdateUIEvent& event) ////////////////////////////////////////////////////////////////////// wxTTLSConfigWindow::wxTTLSConfigWindow(const eap::config_provider &prov, eap::config_method &cfg, LPCTSTR pszCredTarget, wxWindow* parent) : - m_prov(prov), m_cfg((eap::config_method_ttls&)cfg), m_cfg_pap(cfg.m_module), - wxScrolledWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL) + wxEAPConfigWindow(prov, cfg, parent) { wxBoxSizer* sb_content; sb_content = new wxBoxSizer( wxVERTICAL ); @@ -135,22 +134,11 @@ wxTTLSConfigWindow::wxTTLSConfigWindow(const eap::config_provider &prov, eap::co size.y = 500; } this->SetMinSize(size); - this->SetScrollRate(5, 5); this->SetSizer(sb_content); this->Layout(); m_inner_type->SetFocusFromKbd(); - - // Connect Events - this->Connect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(wxTTLSConfigWindow::OnInitDialog)); -} - - -wxTTLSConfigWindow::~wxTTLSConfigWindow() -{ - // Disconnect Events - this->Disconnect(wxEVT_INIT_DIALOG, wxInitDialogEventHandler(wxTTLSConfigWindow::OnInitDialog)); } @@ -196,8 +184,7 @@ bool wxTTLSConfigWindow::TransferDataFromWindow() void wxTTLSConfigWindow::OnInitDialog(wxInitDialogEvent& event) { - // Call TransferDataToWindow() manually, as wxScrolledWindow somehow skips that. - TransferDataToWindow(); + wxEAPConfigWindow::OnInitDialog(event); // Forward the event to child panels. m_outer_identity->GetEventHandler()->ProcessEvent(event);