00001
00004 #ifndef SLANG_MENU_H
00005 #define SLANG_MENU_H
00006
00007 #include <vector>
00008 #include <string>
00009
00010 #include <Slang/ecra.H>
00011
00012 namespace Slang {
00013
00038 class ApendiceComCor {
00039 public:
00041 ApendiceComCor();
00042
00044
00045
00046 Ecra::ObjectoCor const& o_borda() const;
00048 Ecra::ObjectoCor const& o_titulo() const;
00050 Ecra::ObjectoCor const& o_itens() const;
00052 Ecra::ObjectoCor const& o_corrente() const;
00054
00056
00057
00058 Ecra::ObjectoCor& o_borda();
00060 Ecra::ObjectoCor& o_titulo();
00062 Ecra::ObjectoCor& o_itens();
00064 Ecra::ObjectoCor& o_corrente();
00066
00067 private:
00068 Ecra::ObjectoCor o_borda_;
00069 Ecra::ObjectoCor o_titulo_;
00070 Ecra::ObjectoCor o_itens_;
00071 Ecra::ObjectoCor o_corrente_;
00072 };
00073
00078 class Menu {
00079 public:
00082 explicit Menu(std::string const& titulo);
00084 virtual ~Menu();
00087 virtual int executa() = 0;
00089 string titulo() const;
00090
00091 private:
00092 string titulo_;
00093 };
00094
00100 class MenuComCor: public Menu, public ApendiceComCor {
00101 public:
00104 explicit MenuComCor(std::string const& titulo);
00105 };
00106
00137 class MenuSimples : public MenuComCor {
00138 public:
00145 MenuSimples(std::string const& titulo,
00146 std::string const itens[],
00147 int numero_de_itens);
00153 MenuSimples(std::string const& titulo,
00154 std::string const& itens);
00157 virtual int executa();
00158
00159 private:
00160 void calculaDimensao();
00161 void calculaPosicao() const;
00162 void desenhaItem(int i) const;
00163 void desenha() const;
00164
00165 std::vector<std::string> itens;
00166 int numero_de_itens;
00167 std::string::size_type largura_maxima;
00168 mutable Posicao posicao;
00169 Dimensao dimensao;
00170 int corrente;
00171 };
00172
00177 class MenuCor : public MenuSimples {
00178 public:
00181 explicit MenuCor(std::string const& titulo);
00182 };
00183
00189 class MenuSimNao : public MenuSimples {
00190 public:
00193 explicit MenuSimNao(std::string const& titulo);
00196 virtual int executa();
00197 };
00198
00204 class Aviso {
00205 public:
00208 explicit Aviso(std::string const& mensagem);
00210 virtual ~Aviso();
00212 virtual void executa();
00213 private:
00214 MenuSimples menu;
00215 };
00216
00222 class CaixaDeTexto : public ApendiceComCor {
00223 public:
00230 explicit CaixaDeTexto(std::string const& titulo,
00231 std::string const& valor = "",
00232 std::string::size_type espacos = 0);
00234 virtual ~CaixaDeTexto();
00237 virtual std::string executa(bool impede_vazia = false);
00239 std::string titulo() const;
00240 private:
00241 void desenha() const;
00242 void calculaPosicao() const;
00243 std::string titulo_;
00244 string::size_type espacos;
00245 std::string valor;
00246 string::size_type inicio;
00247 string::size_type posicao;
00248 Dimensao dimensao;
00249 mutable Posicao origem;
00250 };
00251 }
00252
00253 #include <Slang/menu_impl.H>
00254
00255 #endif // SLANG_MENU_H