Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members

TerminalGui.cpp

Go to the documentation of this file.
00001 #include "TerminalGui.h"
00002 #include "Connessione.h"
00003 #include <wx/font.h>
00004 
00005 // La Event Table serve per mappare i vari eventi che devono essere gestiti
00006 // dalla classe con dei suoi metodi.
00007 // Event Table - Inizio
00008 BEGIN_EVENT_TABLE(TerminalGui,CHILD_FRAME)
00009     // L'evento si verifica quando viene premuto invio nella commandline.
00010     EVT_TEXT_ENTER(COMMAND_LINE,TerminalGui::EnterCommand)
00011     // L'evento si verifica quando viene chiuso il terminale
00012     // (premendo il pulsante nella finestra).
00013         EVT_CLOSE(TerminalGui::TerminalGuiClose)
00014 END_EVENT_TABLE()
00015 // Event Table - Fine
00016 
00017 TerminalGui::TerminalGui(Connessione* connection, PARENT_FRAME* parent,
00018                          wxWindowID id, const wxString& title,
00019                          const wxPoint& position, const wxSize& size,
00020                          long style, const wxString& name)
00021                          : CHILD_FRAME(parent, id, title, position,
00022                          size, style, name), connessione(connection)
00023 { 
00024     CreateGUIControls();  // Il metodo crea i componenti grafici del terminale.
00025 }
00026 
00027 TerminalGui::~TerminalGui()
00028 {
00029     StoreFrameSize(GetRect());  // Salva dimensioni e posizione della finestra
00030 }
00031 
00032 void TerminalGui::CreateGUIControls()
00033 {
00034     #ifdef _WIN32
00035     this->SetIcon(wxICON(B));  // Carica l'icona su Win32
00036     #else
00037     #include "res/Terminals.xpm"
00038     SetIcon( wxIcon(Terminals_xpm) );
00039     #endif
00040     // Inizializza il TextCtrl principale dove vengono stampati i messaggi
00041     // mandati dal parser (per la descrizione dei parametri passati al
00042     // costruttore si rimanda alla documentazione delle wxWidgets).
00043     viewer = new wxTextCtrl(this, VIEWER, _(""), wxPoint(0,0),
00044                             wxSize(TERMINALWIDTH, TERMINALHEIGHT-20),
00045                             wxTE_MULTILINE|wxTE_READONLY|wxTE_RICH);
00046     // Inizializza la linea di comando dove l'utente digita i messaggi
00047     // da inviare al terminale.Premendo Invio verra generato un
00048     // EVT_TEXT_ENTER che sara' gestito dall'APP.
00049     commandline = new wxTextCtrl(this, COMMAND_LINE, _(""),
00050                                  wxPoint(0, TERMINALHEIGHT-20),
00051                                  wxSize(TERMINALWIDTH, 20), wxTE_PROCESS_ENTER);
00052     USE_FONT;  // Definito in Definitions.h
00053     viewer->SetFont(FONT);  // Assegna il font FONT ai Componenti del terminale
00054     commandline->SetFont(FONT);
00055 }
00056 
00057 void TerminalGui::SetLayout()
00058 {
00059     // Vengono usati i Sizer per costruire il Layout della finestra.
00060 
00061     wxBoxSizer *columnsizer = new wxBoxSizer(wxVERTICAL); // Sizer delle colonne
00062   
00063     columnsizer->Add(viewer, 1, wxEXPAND);  // Aggiunge il viewer al sizer e li
00064                                             // rende ridimensionabili.
00065     columnsizer->Add(commandline, 0, wxEXPAND);  // Aggiunge la commandline al
00066                                                  // sizer e la rende ad altezza
00067                                                  // fissa e larghezza variabile
00068 
00069     SetAutoLayout(TRUE);
00070     SetSizer(columnsizer);
00071 
00072     columnsizer->Fit(this);
00073     columnsizer->SetSizeHints(this);
00074 }
00075 
00076 void TerminalGui::receiveMsg(wxString message, wxTextAttr style)
00077 {
00078             viewer->SetDefaultStyle(style); // Assegna al messaggio lo stile passato
00079                                         // come parametro
00080         viewer->AppendText(message);  // Aggiunge al viewer il messaggio
00081         viewer->SetDefaultStyle(STYLE_DEFAULT); // Ripristina lo stile di Default
00082 
00083 }    
00084 
00085 void TerminalGui::TerminalGuiClose(wxCloseEvent& event)
00086 {
00087     // Richiama un metodo di connessione che si occupa di distruggere
00088     // il terminale e di aggiornare al sua lista interna di Terminali Aperti.
00089     connessione->DeleteTerminal(GetName());
00090 }       
00091 
00092 void TerminalGui::EnterCommand(wxCommandEvent& event)
00093 {
00094     wxString cmd = commandline->GetValue();  // Comando inserito
00095     if(cmd.Len() < 1)  // Evita di mandare al parser stringhe nulle
00096         return;
00097     if(cmd.GetChar(0) != '/' ){  // Se la stringa digitata non e' un comando
00098                                  // (che inizia con / ) allora scrive il
00099                                  // messaggio sul viewer (i comandi infatti non
00100                                  // appaiono sul terminale).
00101         viewer->SetDefaultStyle(STYLE_ITALIC);
00102         *viewer << "<" + connessione->GetMyNick() + "> ";
00103         viewer->SetDefaultStyle(STYLE_DEFAULT);
00104         *viewer << cmd;
00105         *viewer << _("\n");
00106     }
00107     // Invia la stringa al parserOut che si occupera' di inviarla al server
00108     // (parsandola nel caso sia un comando)
00109     connessione->getParserOut()->sendMessage(cmd,GetName());
00110     commandline->Clear();  // Pulisce la commandline
00111 }
00112 
00113 // Salva le impostazioni grafiche della finestra
00114 
00115 unsigned int TerminalGui::offset = 0;  // L'offset di creazione delle finestre
00116                                        // viene inizializzato a zero
00117 
00118 wxRect TerminalGui::DetermineFrameSize(wxConfig* config)
00119 {
00120     const int minFrameWidth = TERMINALWIDTH;  // Imposta le dimensioni minime
00121                                               // del Terminale
00122     const int minFrameHeight = TERMINALHEIGHT;
00123     wxSize scr = wxGetDisplaySize();  // Cattura la dimensione del Display
00124 
00125     wxRect rect;
00126     wxConfig* cfg = config;
00127     if (!config) cfg = new wxConfig(_("Quirck"));  // Apre (o crea) un file di
00128                                                    // configurazione
00129     wxString key = T_LOCATION;  // Chiave radice delle impostazioni
00130     if (cfg->Exists(key)){  // Se la chiave esiste gia' legge
00131                             // le impostazioni salvate
00132         rect.x = cfg->Read(key + _("/") + T_LOCATION_X, rect.x) + offset;
00133         rect.y = cfg->Read(key + _("/") + T_LOCATION_Y, rect.y) + offset;
00134         rect.width = cfg->Read(key + _("/") + T_LOCATION_W, rect.width);
00135         rect.height = cfg->Read(key + _("/") + T_LOCATION_H, rect.height);
00136     }
00137     
00138     if (!config) delete cfg;
00139 
00140     // Controlla che i valori caricati siano coerenti con le dimensioni dello
00141     // schermo altrimenti usa impostazioni piu' adatte.
00142     rect.x = wxMin(abs(rect.x), (scr.x - minFrameWidth));
00143     rect.y = wxMin(abs(rect.y), (scr.y - minFrameHeight));
00144     rect.width = wxMax(abs(rect.width), (minFrameWidth));
00145     rect.width = wxMin(abs(rect.width), (scr.x - rect.x));
00146     rect.height = wxMax(abs(rect.height), (minFrameHeight));
00147     rect.height = wxMin(abs(rect.height), (scr.y - rect.y));
00148     
00149     offset += 15;  // Viene incrementato l'offset di creazione delle finestre
00150 
00151     return rect;
00152 }
00153 
00154 void TerminalGui::StoreFrameSize(wxRect rect, wxConfig* config)
00155 {
00156     wxConfig* cfg = config;
00157     if (!config) cfg = new wxConfig(_("Quirck"));  // Apre (o crea) un file di
00158                                                    // configurazione
00159     wxString key = T_LOCATION; // Scrive nel file le impostazioni della finestra.
00160     cfg->Write(key + _("/") + T_LOCATION_X, rect.x);
00161     cfg->Write(key + _("/") + T_LOCATION_Y, rect.y);
00162     cfg->Write(key + _("/") + T_LOCATION_W, rect.width);
00163     cfg->Write(key + _("/") + T_LOCATION_H, rect.height);
00164     if (!config) delete cfg;
00165 }
00166 

Generated on Thu Dec 2 16:51:42 2004 for Quirck by  doxygen 1.3.9.1