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);
}*/
}
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Dica para encontrar diversos jogos Indies criativos
Instalando Discord no Debian 13
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
paginação dos favoritos não funciona no vivaolinux[BU... (4)
Driver da nvidia e desempenho em jogos (2)
A escola é altamente ineficiente e ineficaz! (13)
Sincronização Horario Estação de trabalho máquinas domínio com samba N... (2)