00001
00007 #include <Utilitarios/localizacao.H>
00008
00009
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
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
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
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
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
00184 ecra << ecra.extremo();
00185 }
00186
00187
00188
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
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
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
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