Portál AbcLinuxu, 12. května 2025 06:11

Dotaz: [Ncurses] Vytvoreni menu

2.6.2006 13:41 David Sedláček | skóre: 20 | Žďár nad Sázavou
[Ncurses] Vytvoreni menu
Přečteno: 306×
Odpovědět | Admin
Zdravim.

Pracuji na programu, kde potrebuji mit ovladaci graficke menu a to ve stylu Midnight Commandera.

Nemate nekdo ukazkovy kus kodu?

Je s tim velka prace, sice to je dulezite, ale cas bych potreboval venovat jinym vecem.

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

2.6.2006 13:42 David Sedláček | skóre: 20 | Žďár nad Sázavou
Rozbalit Rozbalit vše Re: [Ncurses] Vytvoreni menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zapomel jsem dodat - jazyk C.
2.6.2006 16:14 Krakonoš | skóre: 17 | Nová Ves v Horách
Rozbalit Rozbalit vše Re: [Ncurses] Vytvoreni menu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Kouknete na TLDP. Jsou tam krasne priklady. Mimochodem, ukazkovy kod tam je take,..

Predpokladam ze existuje jiz inicializovanej screen (stdsrc). Nejdrive by mela byt zavolana fce init_menu() a pote toogle_menu, ktera skoci do nekonecne smycky cekajici na klavesy a obsluhujici menu,...

set_item_userptr priradi kazde polozce fci, ktera se pri zvoleni polozky vola (obsluhuje to ta moje nekonecna smycka,..)...je to sice drnse reseni a nerikam, ze je nejlepsi, avsak na ukazku by mohlo postacit,...

finish(); je drive definovana fce, ktera prijima zachycene signaly a provadi "cleanup".

void handle_help(MENU* menu);
void handle_end(MENU* menu);

ITEM* mmenu_items[2];
MENU* mmenu;

void init_menu() {
        mmenu_items[0] = new_item("Napoveda", "");
        set_item_userptr(mmenu_items[0], handle_help);
        mmenu_items[1] = new_item("Konec", "");
        set_item_userptr(mmenu_items[1], handle_end);

        mmenu = new_menu(mmenu_items);
}

void toogle_menu() {
        if (post_menu(mmenu)==E_POSTED) unpost_menu(mmenu);
                else loop_menu();
}

void loop_menu() {
        for (;;) {
                int c = getch();
                switch (c) {
                        case KEY_DOWN: menu_driver(mmenu, REQ_DOWN_ITEM); break;
                        case KEY_UP: menu_driver(mmenu, REQ_UP_ITEM); break;
                        case KEY_F(10): toogle_menu(); break;
                        case KEY_RETURN: {
                                //Got return, execute what do I need
                                ITEM* cur;
                                void (*p)(char *);
                                cur = current_item(mmenu);
                                p = item_userptr(cur);
                                p(mmenu);
                                break;
                        }
                }
        }
}

void handle_help(MENU* menu) {
        mvaddstr(5,5, "Pomoz si sam!");
}

void handle_end(MENU* menu) {
        finish(0);
}

4.6.2006 19:47 David Sedláček | skóre: 20 | Žďár nad Sázavou
Rozbalit Rozbalit vše Re: [Ncurses] Vytvoreni menu
Dobry vecer,

tak jsem vzhledem k tomu, ze se mi to cele nechtelo procitat, radeji ceknul Ncurses jako takove a pustil se do toho sam.

Tady se aspon prokazuje, ze lennost je nekdy velmi uzitecna vec a nuti lidi premyslet :-D.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.