Main Page | Class List | File List | Class Members | Related Pages

dlgprofilemanager.cpp

00001 /***************************************************************************
00002                            dlgprofilemanager.cpp
00003                            -------------------
00004     begin                : 2004-10-01 22:37
00005     copyright            : (C) 2004-2005 by Dominik Haumann
00006     email                : dhaumann@users.sourceforge.net
00007  ***************************************************************************/
00008 
00009 /***************************************************************************
00010  This program is free software; you can redistribute it and/or
00011  modify it under the terms of the GNU General Public License
00012  as published by the Free Software Foundation; either version 2
00013  of the License, or (at your option) any later version.
00014 
00015  This program is distributed in the hope that it will be useful,
00016  but WITHOUT ANY WARRANTY; without even the implied warranty of
00017  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018  GNU General Public License for more details.
00019 
00020  You should have received a copy of the GNU General Public License
00021  along with this program; if not, write to the Free Software
00022  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
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     // Controls
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 //  m_plvProfiles->InsertColumn( 1, "Gilde", wxLIST_FORMAT_LEFT, 60 );
00062 //  m_plvProfiles->InsertColumn( 2, "Stadt", wxLIST_FORMAT_LEFT, 100 );
00063 //  m_plvProfiles->InsertColumn( 3, "Koordinate", wxLIST_FORMAT_LEFT, 70 );
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     // HACK: Versteckter Cancel Button, damit kann der Dialog mit Escape beendet werden
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     // Top contains:
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     // Horizontaler Sizer für Terrain ( Edit + Button )
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     // make sane size
00098     SetClientSize( 500, 300 );
00099 
00100     pBtnOk->SetFocus( );
00101     pBtnOk->SetDefault( );
00102 
00103     Center();
00104 
00105     // Fill list box
00106     FillListBox();
00107 }
00108 
00109 CDlgProfileManager::~CDlgProfileManager()
00110 {
00111     // all widgets are automatically deleted.
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 //      m_plvProfiles->SetItem(i, 1, pTown->GetGuild().c_str() );
00124 //      m_plvProfiles->SetItem(i, 2, pTown->GetName().c_str()  );
00125 //      m_plvProfiles->SetItem(i, 3, wxString::Format( "%d:%d", pTown->GetXPos(), pTown->GetYPos() ));
00126 
00127         // Hintergrundfarbe abwechselnd auf ein ungesaettigtes Tuerkies und Gelb setzen
00128         if( i & 1 )
00129             item.SetBackgroundColour( wxColor( 238, 246, 255) );  // Hellblau
00130         else
00131             item.SetBackgroundColour( wxColor( 255, 255, 255) );  // Weiss
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         // something changed
00148         FillListBox();
00149     }
00150 }
00151 
00152 //
00153 //BEGIN EVENT HANDLER
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     // first hide, then load, then close dialog
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     // make sure we don't delete the current profile. So you have to close the map first!
00216     if ( pProfile == CProfileManager::GetCurrentProfile() ) {
00217         // TODO
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 //END EVENT HANDLER
00249 //
00250 
00251 }
00252 
00253 // kate: space-indent off; tab-width 4; replace-tabs off;

Generated on Sun Jan 16 18:20:26 2005 for WDSMap by  doxygen 1.3.9.1