Enviado em 22/01/2014 - 17:19h
gente estou desenvolvendo umas telas para um programa de biblioteca que eu tenho aqui, certo, a parte dos menus já esta pronta, agora estou criando a integração para quando usar as setas fazer isso ou aquilo ...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ncurses.h>
#define FUNDO 1
#define SOMBRA 2
#define JANELA 3
#define SELECAO1 4
#define SELECAO2 5
void inicia_ncurses()
{
initscr();
start_color();
init_pair(FUNDO,COLOR_BLACK,COLOR_BLUE);
init_pair(SOMBRA,COLOR_BLACK,COLOR_BLACK);
init_pair(JANELA,COLOR_BLACK,COLOR_CYAN);
init_pair(SELECAO1,COLOR_WHITE,COLOR_BLUE);
init_pair(SELECAO2,COLOR_GREEN,COLOR_BLACK);
noecho();
keypad(stdscr,TRUE);
cbreak();
curs_set(0);
}
WINDOW **cria_esqueleto(char *titulo)
{
WINDOW **esqueleto;
int tamanho=strlen(titulo);
esqueleto=(WINDOW **)malloc(3*sizeof(WINDOW *));
esqueleto[0]=newwin((LINES-2),(COLS-3),1,2);
wbkgd(esqueleto[0],COLOR_PAIR(SOMBRA));
wrefresh(esqueleto[0]);
esqueleto[1]=newwin((LINES-3),(COLS-3),1,1);
wbkgd(esqueleto[1],COLOR_PAIR(JANELA));
mvwprintw(esqueleto[1],2,(COLS/2)-(tamanho/2),titulo);
wrefresh(esqueleto[1]);
esqueleto[2]=newwin((LINES-10),(COLS-5),5,2);
box(esqueleto[2],0,0);
wbkgd(esqueleto[2],COLOR_PAIR(JANELA));
wrefresh(esqueleto[2]);
return esqueleto;
}
void redimensiona_esqueleto(WINDOW **esqueleto,char *titulo)
{
int cont,tamanho=strlen(titulo);
clear();
for(cont=0;cont<3;cont++)
wclear(esqueleto[cont]);
wresize(esqueleto[0],(LINES-2),(COLS-3));
wresize(esqueleto[1],(LINES-3),(COLS-3));
wresize(esqueleto[2],(LINES-10),(COLS-5));
box(esqueleto[2],0,0);
mvwprintw(esqueleto[1],2,(COLS/2)-(tamanho/2),titulo);
refresh();
for(cont=0;cont<3;cont++)
wrefresh(esqueleto[cont]);
sleep(1);
}
int largura_menu(char *titulo_menus[],int tam_vet_str)
{
int cont,tam=0,aux;
for(cont=0;cont<tam_vet_str;cont++)
{
aux=strlen(titulo_menus[cont]);
if(aux>tam)
tam=aux;
}
return tam;
}
WINDOW **cria_menus(char *titulo_menus[],int tam_vet_str)
{
WINDOW **menus;
int cont,tam;
tam=largura_menu(titulo_menus,tam_vet_str);
menus=(WINDOW **)malloc(tam_vet_str*sizeof(WINDOW *));
for(cont=0;cont<tam_vet_str;cont++)
{
menus[cont]=newwin(1,tam,cont+8,(COLS/2)-((tam/2)+1));
wbkgd(menus[cont],COLOR_PAIR(JANELA));
mvwprintw(menus[cont],0,0,titulo_menus[cont]);
wrefresh(menus[cont]);
}
return menus;
}
void redimensiona_menus(WINDOW **menus,char *titulo_menus[],int tam_vet_str)
{
int cont,tam;
tam=largura_menu(titulo_menus,tam_vet_str);
for(cont=0;cont<tam_vet_str;cont++)
{
mvwin(menus[cont],cont+8,(COLS/2)-((tam/2)+1));
wrefresh(menus[cont]);
}
sleep(1);
}
WINDOW **cria_submenu(char *titulo_menus[], int n_menus, char *titulo_submenu[],int tam_vet_str,int linha_inicio)
{
int cont,tam,tamM;
WINDOW **submenu;
tam=largura_menu(titulo_submenu,tam_vet_str);
tamM=largura_menu(titulo_menus,n_menus);
submenu=(WINDOW **)malloc(tam_vet_str*sizeof(WINDOW *));
for(cont=0;cont<tam_vet_str;cont++)
{
submenu[cont]=newwin(1,tam+2,cont+linha_inicio,(COLS/2)+((tamM/2)));
wbkgd(submenu[cont],COLOR_PAIR(SELECAO1));
mvwprintw(submenu[cont],0,1,titulo_submenu[cont]);
wrefresh(submenu[cont]);
}
return submenu;
}
WINDOW **exclui_submenu(WINDOW **esqueleto, WINDOW **submenu,int tam_vet_str)
{
int i;
for(i=0;i<tam_vet_str;i++)
{
delwin(submenu[i]);
wrefresh(esqueleto[2]);
box(esqueleto[2],0,0);
}
return NULL;
}
void seleciona_menus(WINDOW **menus,int tamanho,int local,int NORMAL, int SELECAO)
{
int i;
for(i=0;i<tamanho;i++)
{
wbkgd(menus[i],COLOR_PAIR(NORMAL));
wrefresh(menus[i]);
}
wbkgd(menus[local],COLOR_PAIR(SELECAO));
wrefresh(menus[local]);
}
void rolagem(WINDOW **menus,WINDOW **esqueleto,char *titulo_menus[],char *titulo_sms1[],char *titulo_sms2[],char *titulo_sms3[], int tam_vet_str,int *tam_vet_sm)
{
int key,cont=0,tam,ultimo_tam,ultimo_key=0,cont2=-1,penultimo_key=-1;
WINDOW **submenu=NULL;
do
{
key=getch();
if(key==KEY_DOWN || key=='\t')
{
tam=largura_menu(titulo_menus,tam_vet_str);
if(cont>=0 && cont<tam_vet_str)
{
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
else
{
if(cont==1)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms2,tam_vet_sm[1],9);
ultimo_tam=tam_vet_sm[1];
}
else
{
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
}
}
cont++;
}
else
{
cont=0;
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
cont++;
}
}
else
{
if(key==KEY_UP)
{
if(cont>=0 && cont<tam_vet_str)
{
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
else
{
if(cont==1)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms2,tam_vet_sm[1],9);
ultimo_tam=tam_vet_sm[1];
}
else
{
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
}
}
cont--;
}
else
{
cont=tam_vet_str-1;
if(submenu!=NULL)
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
seleciona_menus(menus,tam_vet_str,cont,JANELA,SELECAO1);
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
cont--;
}
}
else
{
if(key=KEY_RIGHT && cont2==-1)
{
if(penultimo_key==KEY_UP)
{
if(cont>=0 && cont<tam_vet_str-1)
cont++;
else
if(cont<tam_vet_str)
cont=0;
}
else
{
if(penultimo_key==KEY_DOWN)
{
if(cont>=1 && cont<tam_vet_str)
cont--;
else
if(cont==tam_vet_str)
cont=tam_vet_str-1;
}
}
if(ultimo_key==KEY_LEFT)
{
if(cont==0)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
ultimo_tam=tam_vet_sm[0];
}
else
{
if(cont==1)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms2,tam_vet_sm[1],9);
ultimo_tam=tam_vet_sm[1];
}
else
{
if(cont==2)
{
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms3,tam_vet_sm[2],10);
ultimo_tam=tam_vet_sm[2];
}
}
}
}
cont2=0;
if(submenu!=NULL)
{
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2=-1;
}
do
{
key=getch();
if(key==KEY_UP)
{
if(cont2>=0 && cont2<ultimo_tam)
{
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
else
{
cont2=ultimo_tam-1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
}
else
{
if(key==KEY_DOWN)
{
if(cont2>=0 && cont2<ultimo_tam)
{
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
else
{
cont2=0;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
}
}
}while(key!=KEY_LEFT);
cont2=-1;
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
redimensiona_menus(menus,titulo_menus,tam_vet_str);
}
else
{
if(key==KEY_F(1))// não entra nessa comparação
{
attron(COLOR_PAIR(SELECAO2));
printw("entrou");
attroff(COLOR_PAIR(SELECAO2));
seleciona_menus(menus,tam_vet_str,0,JANELA,SELECAO1);
if(ultimo_key==KEY_LEFT || ultimo_key==0)
submenu=cria_submenu(titulo_menus,tam_vet_str,titulo_sms1,tam_vet_sm[0],8);
key=getch();
if(key==KEY_RIGHT && cont2==-1)
{
cont2=0;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2=-1;
do
{
key=getch();
if(key==KEY_UP)
{
if(cont2>=0 && cont2<ultimo_tam)
{
if(cont2==-1)
cont2=ultimo_tam-1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
else
{
cont2=ultimo_tam-1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2--;
}
}
else
{
if(key==KEY_DOWN)
{
if(cont2>=0 && cont2<ultimo_tam)
{
if(cont2==-1)
cont2=1;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
else
{
cont2=0;
seleciona_menus(submenu,ultimo_tam,cont2,SELECAO1,SELECAO2);
cont2++;
}
}
}
}while(key!=KEY_LEFT);
cont2=-1;
submenu=exclui_submenu(esqueleto,submenu,ultimo_tam);
redimensiona_menus(menus,titulo_menus,tam_vet_str);
}
}
}
}
}
if(key==KEY_DOWN || KEY_UP)
penultimo_key=key;
if(key==KEY_LEFT || KEY_RIGHT)
ultimo_key=key;
}while(3000);
}
void main()
{
WINDOW **esqueleto, **menus;
char titulo[10],*titulo_menus[3],tm1[27],tm2[27],tm3[27];
char *titulo_submenu1[2],tsm1_1[14],tsm1_2[14];
char *titulo_submenu2[4],tsm2_1[14],tsm2_2[14],tsm2_3[20],tsm2_4[21];
char *titulo_submenu3[6],tsm3_1[20],tsm3_2[12],tsm3_3[20],tsm3_4[20],tsm3_5[18],tsm3_6[20];
int tam_vet_sm[3];
strcpy(titulo,"BIBLIOTECA");
strcpy(tm1,"(F1) CADASTRO DE LIVROS -->");
strcpy(tm2,"(F2) CADASTRO DE ALUNOS -->");
strcpy(tm3,"(F3) EMPRESTIMOS -->");
titulo_menus[0]=tm1;
titulo_menus[1]=tm2;
titulo_menus[2]=tm3;
strcpy(tsm1_1,"INSERIR LIVROS");
strcpy(tsm1_2,"EXCLUIR LIVROS");
titulo_submenu1[0]=tsm1_1;
titulo_submenu1[1]=tsm1_2;
strcpy(tsm2_1,"INSERIR ALUNOS");
strcpy(tsm2_2,"EXCLUIR ALUNOS");
strcpy(tsm2_3,"QUANTIDADE DE ALUNOS");
strcpy(tsm2_4,"VERIFICAR EMPRESTIMOS");
titulo_submenu2[0]=tsm2_1;
titulo_submenu2[1]=tsm2_2;
titulo_submenu2[2]=tsm2_3;
titulo_submenu2[3]=tsm2_4;
strcpy(tsm3_1,"REALIZAR EMPRESTIMOS");
strcpy(tsm3_2,"IMPRIME TUDO");
strcpy(tsm3_3,"CANCELAR EMPRESTIMOS");
strcpy(tsm3_4,"DEVOLVER EMPRESTIMOS");
strcpy(tsm3_5,"LIVROS DISPONIVEIS");
strcpy(tsm3_6,"DEVOLVER EMPRESTIMOS");
titulo_submenu3[0]=tsm3_1;
titulo_submenu3[1]=tsm3_2;
titulo_submenu3[2]=tsm3_3;
titulo_submenu3[3]=tsm3_4;
titulo_submenu3[4]=tsm3_5;
titulo_submenu3[5]=tsm3_6;
tam_vet_sm[0]=2;
tam_vet_sm[1]=4;
tam_vet_sm[2]=6;
inicia_ncurses();
bkgd(COLOR_PAIR(FUNDO));
refresh();
esqueleto=cria_esqueleto(titulo);
menus=cria_menus(titulo_menus,3);
rolagem(menus,esqueleto,titulo_menus,titulo_submenu1,titulo_submenu2,titulo_submenu3,3,tam_vet_sm);
/*for(;;)
{
redimensiona_esqueleto(esqueleto,titulo);
redimensiona_menus(menus,titulo_menus,3);
}*/
}
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Remoção de propaganda com o programa Comskip[AJUDA] (5)
Linux Lite Demorando Muito Para Ligar (2)