⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whandler.hh

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 HH
字号:
#ifndef CLICKY_WHANDLER_HH#define CLICKY_WHANDLER_HH 1#include <deque>#include <click/string.hh>#include <gtk/gtk.h>#include <click/hashtable.hh>#include "crouter.hh"#include "wmain.hh"#include "hvalues.hh"namespace clicky {struct whandler {    whandler(wmain *rw);    ~whandler();    void clear();    wmain *main() const {	return _rw;    }    bool active() const {	return _rw->driver() != 0;    }    GtkBox *handler_box() const {	return _handlerbox;    }    void display(const String &ename, bool incremental);    void notify_element(const String &ename);    void notify_read(handler_value *hv);    void notify_write(const String &hname, const String &hvalue, int status);    void refresh(const String &hname, bool always);    void refresh_all(bool always);    bool on_autorefresh(const String &hname);    void show_actions(GtkWidget *near, const String &hname, bool changed);    void hide_actions(const String &hname = String(), bool restore = true);    void apply_action(const String &hname, bool activate);    const String &active_action() const;    void recalculate_positions();    void set_hinfo_flags(const String &hname, int flags, int flag_value);    void set_hinfo_autorefresh_period(const String &hname, int period);    enum { onpref_initial, onpref_showpref, onpref_prefok, onpref_prefcancel };    void on_preferences(int action);    static const char *widget_hname(GtkWidget *w);  private:    struct hinfo {	handler_value *hv;	GtkWidget *wcontainer;	GtkWidget *wlabel;	GtkWidget *wdata;	int wposition;	int _old_flags;	int _old_autorefresh_period;	hinfo(handler_value *hv_)	    : hv(hv_), wcontainer(0), wlabel(0), wdata(0), wposition(0) {	}	bool readable() const {	    return hv->readable();	}	bool writable() const {	    return hv->writable();	}	bool editable() const {	    return hv->editable();	}	void create(whandler *wh, int new_flags, bool always_position);	void set_edit_active(wmain *rw, bool active);	void display(whandler *wh, bool change_form);      private:	int create_preferences(whandler *wh);	int create_display(whandler *wh);    };    wmain *_rw;    std::deque<hinfo> _hinfo;    String _display_ename;    GtkWidget *_eviewbox;    GtkBox *_handlerbox;    GtkButtonBox *_hpref_actions;    GtkWidget *_actions[2];    GtkWidget *_actions_apply[2];    String _actions_hname;    bool _actions_changed;    int _updating;    GtkWidget *_eview_config;    void make_actions(int which);    inline bool hname_element_displayed(const String &hname) const;    inline const hinfo *find_hinfo(const String &hname) const;    inline hinfo *find_hinfo(const String &hname);    inline hinfo *find_hinfo(handler_value *hv);};inline void whandler::notify_element(const String &){}inline const String &whandler::active_action() const{    return _actions_hname;}inline void whandler::hinfo::set_edit_active(wmain *main, bool active){    if (wlabel && !active)	gtk_label_set_attributes(GTK_LABEL(wlabel), main->small_attr());    else if (wlabel && active) {	if (hv->read_param()) {	    gtk_label_set_text(GTK_LABEL(wlabel), hv->handler_name().c_str());	    hv->clear_hvalue();	}	gtk_label_set_attributes(GTK_LABEL(wlabel), main->small_bold_attr());    }}inline bool whandler::hname_element_displayed(const String &hname) const{    return (_display_ename	    && _display_ename.length() + 1 < hname.length()	    && memcmp(_display_ename.begin(), hname.begin(), _display_ename.length()) == 0	    && hname[_display_ename.length()] == '.');}inline const whandler::hinfo *whandler::find_hinfo(const String &hname) const{    if (hname_element_displayed(hname))	for (std::deque<hinfo>::const_iterator iter = _hinfo.begin();	     iter != _hinfo.end(); ++iter)	    if (iter->hv->hname() == hname)		return iter.operator->();    return 0;}inline whandler::hinfo *whandler::find_hinfo(const String &hname){    if (hname_element_displayed(hname))	for (std::deque<hinfo>::iterator iter = _hinfo.begin();	     iter != _hinfo.end(); ++iter)	    if (iter->hv->hname() == hname)		return iter.operator->();    return 0;}inline whandler::hinfo *whandler::find_hinfo(handler_value *hv){    for (std::deque<hinfo>::iterator iter = _hinfo.begin();	 iter != _hinfo.end(); ++iter)	if (iter->hv == hv)	    return iter.operator->();    return 0;}}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -