00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "app.h"
00026 #include "dlgprofilemanager.h"
00027 #include "dlgeditprofile.h"
00028 #include "frame.h"
00029 #include "profilemanager.h"
00030
00031 namespace WDS
00032 {
00033
00034 BEGIN_EVENT_TABLE(CDlgProfileManager, wxDialog)
00035 EVT_LIST_ITEM_ACTIVATED(IDC_LST_RESULTS, CDlgProfileManager::OnActivateItem )
00036 EVT_BUTTON( wxID_OK, CDlgProfileManager::OnOK )
00037 EVT_BUTTON( IDC_BTN_DELETE, CDlgProfileManager::OnDelete )
00038 EVT_BUTTON( IDC_BTN_ADD , CDlgProfileManager::OnAdd )
00039 EVT_BUTTON( IDC_BTN_EDIT , CDlgProfileManager::OnEdit )
00040 EVT_BUTTON( IDC_BTN_LOAD , CDlgProfileManager::OnLoad )
00041 EVT_BUTTON( IDC_BTN_DELETE, CDlgProfileManager::OnDelete )
00042 END_EVENT_TABLE()
00043
00044 CDlgProfileManager::CDlgProfileManager( wxWindow *pParent )
00045 : wxDialog(pParent, -1, wxString("Profile - WDSMap"), wxDefaultPosition,
00046 wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER )
00047 {
00048 wxBoxSizer *sTop = new wxBoxSizer( wxVERTICAL );
00049
00050 wxStaticBox *staticBox = new wxStaticBox( this, -1, "Wähle ein Profil" );
00051 wxStaticBoxSizer *sLV = new wxStaticBoxSizer( staticBox, wxVERTICAL );
00052
00053 wxBoxSizer *sHorzOKCancel = new wxBoxSizer( wxHORIZONTAL );
00054 wxBoxSizer *sAddEditDelete = new wxBoxSizer( wxHORIZONTAL );
00055
00056
00057 m_plvProfiles = new wxListCtrl( this, IDC_LST_RESULTS, wxDefaultPosition, wxDefaultSize,
00058 wxLC_REPORT | wxLC_VRULES | wxLC_SINGLE_SEL );
00059
00060 m_plvProfiles->InsertColumn( 0, "Profilname", wxLIST_FORMAT_LEFT, 200 );
00061
00062
00063
00064
00065 wxButton* pDelete = new wxButton( this, IDC_BTN_DELETE, "Löschen" );
00066 wxButton* pAdd = new wxButton( this, IDC_BTN_ADD , "Neu..." );
00067 wxButton* pEdit = new wxButton( this, IDC_BTN_EDIT , "Bearbeiten..." );
00068 wxStaticText* pFiller= new wxStaticText( this, -1, "" );
00069
00070 wxButton* pBtnOk = new wxButton( this, wxID_OK, "&Schließen" );
00071 wxButton* pBtnSwitch = new wxButton( this, IDC_BTN_LOAD, "Ausgewähltes Profil laden" );
00072
00073
00074 (new wxButton( this, wxID_CANCEL, "Cancel" ))->Show( false );
00075
00076 sAddEditDelete->Add( pDelete, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5 );
00077 sAddEditDelete->Add( pFiller, 1, wxEXPAND, 0 );
00078 sAddEditDelete->Add( pAdd , 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 5 );
00079 sAddEditDelete->Add( pEdit , 0, wxALIGN_CENTER_VERTICAL, 0 );
00080
00081
00082 sTop->Add( sLV, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, 10 );
00083 sTop->Add( sHorzOKCancel, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxALIGN_RIGHT, 10 );
00084
00085 sLV->Add( m_plvProfiles, 1, wxALL | wxEXPAND, 5 );
00086 sLV->Add( sAddEditDelete, 0, wxLEFT | wxRIGHT | wxBOTTOM | wxEXPAND, 5 );
00087
00088
00089 sHorzOKCancel->Add( pBtnSwitch, 0, wxTOP | wxRIGHT, 5 );
00090 sHorzOKCancel->Add( pBtnOk, 0, wxTOP, 5 );
00091
00092 SetAutoLayout( true );
00093 SetSizer( sTop );
00094
00095 sTop->SetSizeHints( this );
00096
00097
00098 SetClientSize( 500, 300 );
00099
00100 pBtnOk->SetFocus( );
00101 pBtnOk->SetDefault( );
00102
00103 Center();
00104
00105
00106 FillListBox();
00107 }
00108
00109 CDlgProfileManager::~CDlgProfileManager()
00110 {
00111
00112 }
00113
00114 void CDlgProfileManager::FillListBox()
00115 {
00116 m_plvProfiles->DeleteAllItems();
00117
00118 CProfileManager* pm = wxGetApp().GetProfileManager();
00119 wxListItem item;
00120 for (int i = 0; i < pm->size(); i++) {
00121 m_plvProfiles->InsertItem( i, pm->GetProfile( i )->GetName() );
00122 m_plvProfiles->SetItemData( i, i );
00123
00124
00125
00126
00127
00128 if( i & 1 )
00129 item.SetBackgroundColour( wxColor( 238, 246, 255) );
00130 else
00131 item.SetBackgroundColour( wxColor( 255, 255, 255) );
00132
00133 item.m_itemId = i;
00134 m_plvProfiles->SetItem( item );
00135 }
00136 }
00137
00138 void CDlgProfileManager::EditProfile( CProfile* profile )
00139 {
00140 if ( !profile )
00141 return;
00142
00143 CDlgEditProfile dlg( this, CDlgEditProfile::EDIT, profile );
00144 dlg.Center( );
00145
00146 if ( dlg.ShowModal() == wxID_OK ) {
00147
00148 FillListBox();
00149 }
00150 }
00151
00152
00153
00154
00155 void CDlgProfileManager::OnActivateItem( wxListEvent& event )
00156 {
00157 CProfileManager* pm = wxGetApp().GetProfileManager();
00158
00159 int nIndex = event.GetData();
00160
00161 if( nIndex < 0 || nIndex >= pm->size() ) {
00162 return;
00163 } else {
00164 EditProfile( pm->GetProfile( nIndex ) );
00165 }
00166 }
00167
00168 void CDlgProfileManager::OnOK( wxCommandEvent &event )
00169 {
00170 event.Skip( );
00171 }
00172
00173 void CDlgProfileManager::OnLoad( wxCommandEvent &event )
00174 {
00175 long result = m_plvProfiles->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
00176
00177 if( result == -1 ) {
00178 wxMessageBox( "Bitte zuerst ein Profil auswählen.", "Fehler - WDSMap", wxOK | wxCENTER | wxICON_ERROR );
00179 return;
00180 }
00181
00182
00183 Show( false );
00184 CProfile* profile = wxGetApp().GetProfileManager()->GetProfile( result );
00185 wxGetApp().GetFrame()->SwitchProfile( profile );
00186 EndModal( wxID_OK );
00187 }
00188
00189 void CDlgProfileManager::OnAdd( wxCommandEvent &event )
00190 {
00191 CProfile* pProfile = new CProfile( );
00192 CDlgEditProfile dlg( this, CDlgEditProfile::ADD, pProfile );
00193 dlg.Center( );
00194
00195 if ( dlg.ShowModal() == wxID_OK ) {
00196 wxGetApp().GetProfileManager()->AddProfile( pProfile );
00197
00198 FillListBox();
00199 } else {
00200 delete pProfile;
00201 }
00202 }
00203
00204 void CDlgProfileManager::OnDelete( wxCommandEvent &event )
00205 {
00206 long result = m_plvProfiles->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
00207
00208 if( result == -1 ) {
00209 wxMessageBox( "Bitte zuerst ein Profil auswählen.", "Fehler - WDSMap", wxOK | wxCENTER | wxICON_ERROR );
00210 return;
00211 }
00212
00213 CProfile* pProfile = wxGetApp().GetProfileManager()->GetProfile( result );
00214
00215
00216 if ( pProfile == CProfileManager::GetCurrentProfile() ) {
00217
00218 wxMessageDialog dlg( this, "Du kannst das aktuell geladene Profil nicht löschen, sondern musst es erst schließen!",
00219 "Warnung - WDSMap", wxOK | wxCENTRE | wxICON_ERROR );
00220
00221 dlg.ShowModal();
00222 } else {
00223 wxMessageDialog dlg( this, "Willst du das Profil \"" + pProfile->GetName() + "\" wirklich löschen?",
00224 "Profil löschen - WDSMap", wxYES_NO | wxCENTRE | wxICON_QUESTION );
00225
00226 if( dlg.ShowModal() == wxID_YES ) {
00227 wxGetApp().GetProfileManager()->DeleteProfile( result );
00228 }
00229
00230 FillListBox( );
00231 }
00232 }
00233
00234 void CDlgProfileManager::OnEdit ( wxCommandEvent &event )
00235 {
00236 long result = m_plvProfiles->GetNextItem( -1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED );
00237
00238 if( result == -1 ) {
00239 wxMessageBox( "Bitte zuerst ein Profile auswählen.", "Fehler - WDSMap", wxOK | wxCENTER | wxICON_ERROR );
00240 return;
00241 }
00242
00243 CProfile* pProfile = wxGetApp().GetProfileManager()->GetProfile( result );
00244
00245 EditProfile( pProfile );
00246 }
00247
00248
00249
00250
00251 }
00252
00253