Página principal   Módulos   Lista de namespaces   Hierarquia de classes   Lista de componentes   Lista de ficheiros   Membros do namespace   Componentes membro   Ficheiros membro   Páginas relacionadas  

menu_impl.H

Ir para a documentação deste ficheiro.
00001 
00007 #include <Utilitarios/localizacao.H>
00008 
00009 // ApendiceCor:
00010 
00011 inline Slang::ApendiceComCor::ApendiceComCor()
00012     : objecto_cor_da_borda(preto, branco),
00013       objecto_cor_do_titulo(vermelho, branco),
00014       objecto_cor_dos_itens(preto, branco),
00015       objecto_cor_do_item_corrente(amarelo, azul) 
00016 {
00017 
00018     assert(cumpreInvariante());
00019 }
00020 
00021 inline Slang::ApendiceComCor::~ApendiceComCor()
00022 {
00023     assert(cumpreInvariante());
00024 }
00025 
00026 inline Slang::Ecra::ObjectoCor const& 
00027 Slang::ApendiceComCor::objectoCorDaBorda() const 
00028 {
00029     assert(cumpreInvariante());
00030 
00031     return objecto_cor_da_borda;
00032 }
00033 
00034 inline Slang::Ecra::ObjectoCor const& 
00035 Slang::ApendiceComCor::objectoCorDoTitulo() const 
00036 {
00037     assert(cumpreInvariante());
00038 
00039     return objecto_cor_do_titulo;
00040 }
00041 
00042 inline Slang::Ecra::ObjectoCor const& 
00043 Slang::ApendiceComCor::objectoCorDosItens() const 
00044 {
00045     assert(cumpreInvariante());
00046 
00047     return objecto_cor_dos_itens;
00048 }
00049 
00050 inline Slang::Ecra::ObjectoCor const& 
00051 Slang::ApendiceComCor::objectoCorDoItemCorrente() const 
00052 {
00053     assert(cumpreInvariante());
00054 
00055     return objecto_cor_do_item_corrente;
00056 }
00057 
00058 inline Slang::Ecra::ObjectoCor& Slang::ApendiceComCor::objectoCorDaBorda()
00059 {
00060     assert(cumpreInvariante());
00061 
00062     return objecto_cor_da_borda;
00063 }
00064 
00065 inline Slang::Ecra::ObjectoCor& Slang::ApendiceComCor::objectoCorDoTitulo()
00066 {
00067     assert(cumpreInvariante());
00068 
00069     return objecto_cor_do_titulo;
00070 }
00071 
00072 inline Slang::Ecra::ObjectoCor& Slang::ApendiceComCor::objectoCorDosItens()
00073 {
00074     assert(cumpreInvariante());
00075 
00076     return objecto_cor_dos_itens;
00077 }
00078 
00079 inline Slang::Ecra::ObjectoCor& 
00080 Slang::ApendiceComCor::objectoCorDoItemCorrente()
00081 {
00082     assert(cumpreInvariante());
00083 
00084     return objecto_cor_do_item_corrente;
00085 }
00086 
00087 inline bool Slang::ApendiceComCor::cumpreInvariante() const
00088 {
00089     return true;
00090 }
00091 
00092 
00093 // Menu:
00094 
00095 inline Slang::Menu::Menu(std::string const& titulo)
00096     : titulo_(titulo) 
00097 {
00098     assert(titulo != "" and Utilitarios::eImprimivel(titulo));
00099 
00100     assert(cumpreInvariante());
00101 }
00102 
00103 inline Slang::Menu::~Menu() 
00104 {
00105     assert(cumpreInvariante());
00106 }
00107 
00108 inline std::string Slang::Menu::titulo() const 
00109 {
00110     assert(cumpreInvariante());
00111 
00112     return titulo_;
00113 }
00114 
00115 inline bool Slang::Menu::cumpreInvariante() const
00116 {
00117     return titulo_ != "" and Utilitarios::eImprimivel(titulo_);
00118 }
00119 
00120 
00121 // MenuComCor:
00122 
00123 inline Slang::MenuComCor::MenuComCor(std::string const& titulo)
00124     : Menu(titulo) 
00125 {
00126     assert(titulo != "" and Utilitarios::eImprimivel(titulo));
00127 
00128 }
00129 
00130 inline Slang::MenuComCor::~MenuComCor()
00131 {
00132 }
00133 
00134 
00135 // MenuSimples:
00136 
00137 inline Slang::MenuSimples::MenuSimples(std::string const& titulo, 
00138                                        std::string const itens[], 
00139                                        int const numero_de_itens) 
00140     : MenuComCor(titulo),
00141       itens(itens, itens + numero_de_itens),
00142       numero_de_itens(numero_de_itens),
00143       opcao_corrente(0) 
00144 {
00145     assert(titulo != "" and Utilitarios::eImprimivel(titulo) and 
00146            1 <= numero_de_itens);
00147 
00148     for(int i = 0; i != numero_de_itens; ++i)
00149         assert(Utilitarios::eImprimivel(itens[i]));
00150 
00151     // Calcular dimensões:
00152     calculaDimensao();
00153     calculaPosicao();
00154 
00155     assert(cumpreInvariante());
00156 }
00157 
00158 inline int Slang::MenuSimples::opcaoActual() const
00159 {
00160     assert(cumpreInvariante());
00161 
00162     return opcao_corrente;
00163 } 
00164 
00165 inline void Slang::MenuSimples::calculaPosicao()
00166 {
00167     posicao.mudaLinhaPara((ecra.dimensao().numeroDeLinhas() - 
00168                            dimensao.numeroDeLinhas()) / 2);
00169     posicao.mudaColunaPara((ecra.dimensao().numeroDeColunas() - 
00170                             dimensao.numeroDeColunas()) / 2);
00171 }
00172 
00173 inline void Slang::MenuSimples::desenhaItem(int const numero_do_item) const 
00174 {
00175     if(numero_do_item == opcao_corrente)
00176         ecra << objectoCorDoItemCorrente();
00177     else
00178         ecra << objectoCorDosItens();
00179 
00180     ecra << cursor(posicao + Dimensao(2 + numero_do_item, 1)) 
00181          << largura(comprimento_maximo_dos_itens) << itens[numero_do_item];
00182 
00183     // Cursor no canto do ecrã:
00184     ecra << ecra.extremo();
00185 }
00186 
00187 
00188 // MenuDeCores:
00189 
00190 inline Slang::MenuDeCores::MenuDeCores(std::string const& titulo)
00191     : MenuSimples(titulo, nomes_das_cores, numero_de_cores) 
00192 {
00193     assert(titulo != "" and Utilitarios::eImprimivel(titulo));
00194 }
00195 
00196 
00197 // MenuDeSimOuNao:
00198 inline Slang::MenuDeSimOuNao::MenuDeSimOuNao(std::string const& titulo)
00199     : MenuSimples(titulo, "Sim\nNão") 
00200 {
00201     assert(titulo != "" and Utilitarios::eImprimivel(titulo));
00202 }
00203 
00204 inline int Slang::MenuDeSimOuNao::opcaoActual() const 
00205 {
00206     return not MenuSimples::opcaoActual();
00207 }
00208 
00209 
00210 // Aviso:
00211 
00212 inline Slang::Aviso::Aviso(std::string const& mensagem)
00213     : menu(mensagem, "Tá bem...") 
00214 {
00215     assert(mensagem != "" and Utilitarios::eImprimivel(mensagem));
00216 
00217     assert(cumpreInvariante());
00218 }
00219 
00220 inline Slang::Aviso::~Aviso() 
00221 {
00222     assert(cumpreInvariante());
00223 }
00224 
00225 inline void Slang::Aviso::interage() 
00226 {
00227     assert(cumpreInvariante());
00228 
00229     menu.interage();
00230 
00231     assert(cumpreInvariante());
00232 }
00233 
00234 inline bool Slang::Aviso::cumpreInvariante() const
00235 {
00236     return true;
00237 }
00238 
00239 
00240 // CaixaDeTexto: 
00241 
00242 inline Slang::CaixaDeTexto::
00243 CaixaDeTexto(std::string const& titulo,
00244              std::string const& texto_inicial,
00245              std::string const& caracteres_admissiveis,
00246              bool impede_caixa_vazia,
00247              std::string::size_type numero_de_espacos_visiveis_)
00248     : titulo_(titulo), 
00249       numero_de_espacos_visiveis(std::max(numero_de_espacos_visiveis_,
00250                                           titulo.length())),
00251       texto_corrente(texto_inicial), 
00252       caracteres_admissiveis(caracteres_admissiveis),
00253       inicio_da_parte_visivel_do_texto(texto_corrente.length() < 
00254                                        numero_de_espacos_visiveis? 
00255                                        0 : texto_corrente.length() - 
00256                                        numero_de_espacos_visiveis + 1),
00257       posicao_do_cursor_nos_espacos_visiveis(texto_corrente.length() - 
00258                                              inicio_da_parte_visivel_do_texto),
00259       dimensao(4, numero_de_espacos_visiveis + 2),
00260       impede_caixa_vazia(impede_caixa_vazia)
00261 {
00262     assert(titulo != "" and Utilitarios::eImprimivel(titulo) and 
00263            1 <= numero_de_espacos_visiveis);
00264 
00265     calculaPosicao();
00266 
00267     assert(cumpreInvariante());
00268 }
00269 
00270 inline Slang::CaixaDeTexto::~CaixaDeTexto() 
00271 {
00272     assert(cumpreInvariante());
00273 }
00274 
00275 inline std::string const& Slang::CaixaDeTexto::textoActual() const
00276 {
00277     assert(cumpreInvariante());
00278 
00279     return texto_corrente;
00280 }
00281 
00282 inline std::string Slang::CaixaDeTexto::titulo() const 
00283 {
00284     assert(cumpreInvariante());
00285 
00286     return titulo_;
00287 }
00288 
00289 inline void Slang::CaixaDeTexto::calculaPosicao()
00290 {
00291     origem.mudaLinhaPara((ecra.dimensao().numeroDeLinhas() - 
00292                           dimensao.numeroDeLinhas()) / 2);
00293     origem.mudaColunaPara((ecra.dimensao().numeroDeColunas() - 
00294                            dimensao.numeroDeColunas()) / 2);
00295 }
00296 
00297 inline bool Slang::CaixaDeTexto::cumpreInvariante() const
00298 {
00299     return titulo_ != "" and Utilitarios::eImprimivel(titulo_) and
00300         1 <= numero_de_espacos_visiveis and
00301         inicio_da_parte_visivel_do_texto <= texto_corrente.size() and
00302         posicao_do_cursor_nos_espacos_visiveis < numero_de_espacos_visiveis;
00303 }
00304 
00305 

Gerado em Tue Dec 3 15:19:35 2002 para Pacotes por doxygen1.3-rc1