Creare un nuovo Progetto: Biblio
aggiungere un wxBoxSizer
aggiungere un wxListBox ed ridimensionarlo in altezza e larghezza.
Doppio clic sul pulsante editor di menu. Aggiungere la voce "Inserisci" nel menu File. Con questo comando si richiamerà il Dialog Box.
Nel menu wxSmith scegliere Add wxDialog. Assegnare il nome alla classe, ad esempio: nuovoLibro. Premere Ok. Premere Ok anche nel riquadro di dialogo successivo (Debug e Release)
Aprire la scheda nuovoLibro.wxs.
Aggiungere un wxFlexGridSizer e modificare la proprietà cols=2
In questo sizer posizionare, su una griglia 4 righe x 2 colonne, tre label nella prima colonna, tre caselle di testo nella seconda colonna e due pulsanti nella quarta riga:
StaticText Label: Argomento | TextControl var name: Argomento |
StaticText Label: Autore | TextControl var name: Autore |
StaticText Label: Titolo | TextControl var name: Titolo |
Button Label: Ok Identifier: wxID_OK | Annulla Label: Annulla Identifier: wxID_CANCEL |
Nella scheda Resources espandere il ramo "Menu Bar" e selezionare la voce Inserisci.
Nel pannello di gestione degli eventi associare un gestore al comando "Inserisci", denominandolo onInserisci
Nel file BiblioMain.cpp, lo stesso in cui è disponibile il gestore dell'evento onInserisci, aggiungere la riga: #include "nuovoLibro.h", nella sezione delle direttive #include.
Completare il gestore dell'evento:
void BiblioFrame::onInserisci(wxCommandEvent& event) { nuovoLibro tmp(this); long esito = tmp.ShowModal(); if (esito==wxID_OK) { ListBox1->Append( tmp.Argomento->GetValue() +_(" ") +tmp.Autore->GetValue() +_(" ")+ tmp.Titolo->GetValue()); } }
Verificare il funzionamento dell'applicazione dando il comando: Build and Run
Aprire l'Editor di menu ed aggiungere la voce "Salva" nel menu File.
Nel pannello Resources Selezionare la voce di menu "Salva".
Nel pannello delle Proprietà / Eventi associare il gestore dell'evento onSalva al comando di menu.
Nella sezione di inclusione dei file aggiungere la riga: #include
Completare il gestore dell'evento onSalva
void BiblioFrame::onSalva(wxCommandEvent& event) { wxArrayString righe = ListBox1->GetStrings(); wxTextFile file( _("biblio.txt") ); (file.Exists() ? file.Open() : file.Create()); size_t nRighe = righe.Count(); for( size_t i = 0 ; i < nRighe ; ++i ) file.AddLine( righe[ i ] ); file.Write(); file.Close(); }
Nota: il parametro _("biblio.txt") passato al costruttore file è una macro, trattino+coppia di parentesi tonde, che trasforma la codifica dei caratteri della stringa in modo da rappresentarli come un oggetto Stringa.
Dall'esempio si vede che i salvataggi successivi si accodano alle righe già presenti nel file di testo. Si dovrebbe Creare sempre il file, allo scopo di cancellare ogni volta il suo contenuto e riscriverlo.
Avviare l'editor di menu
Aggiungere la voce di menu Apri nel menu File.
Nel pannello Resources selezionare il comando Apri del menu File
Nel pannello di gestione delle proprietà e degli Eventi associare il gestore onApri, al comando Apri:
void BiblioFrame::onApri(wxCommandEvent& event) { wxTextFile file( _T("biblio.txt") ); file.Open(); size_t nRighe = file.GetLineCount(); for (int i=0; i<nRighe; i++) { ListBox1->Append(file.GetLine(i)); } }