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

📄 cursesf.h

📁 ncurses 库 可能有用酒用 没用就算了 我觉得还可以用
💻 H
📖 第 1 页 / 共 2 页
字号:
  // Set these fields for the form  inline void setFields(NCursesFormField* Fields[]) {    OnError(::set_form_fields(form,mapFields(Fields)));  }  // Remove the form from the screen  inline void unpost (void) {    OnError (::unpost_form (form));  }  // Post the form to the screen if flag is true, unpost it otherwise  inline void post(bool flag = TRUE) {    OnError (flag ? ::post_form(form) : ::unpost_form (form));  }  // Decorations  inline void frame(const char *title=NULL, const char* btitle=NULL) {    if (b_framed)      NCursesPanel::frame(title,btitle);    else      OnError(E_SYSTEM_ERROR);  }  inline void boldframe(const char *title=NULL, const char* btitle=NULL) {    if (b_framed)      NCursesPanel::boldframe(title,btitle);    else      OnError(E_SYSTEM_ERROR);  }  inline void label(const char *topLabel, const char *bottomLabel) {    if (b_framed)      NCursesPanel::label(topLabel,bottomLabel);    else      OnError(E_SYSTEM_ERROR);  }  // -----  // Hooks  // -----  // Called after the form gets repositioned in its window.  // This is especially true if the form is posted.  virtual void On_Form_Init();  // Called before the form gets repositioned in its window.  // This is especially true if the form is unposted.  virtual void On_Form_Termination();  // Called after the field became the current field  virtual void On_Field_Init(NCursesFormField& field);  // Called before this field is left as current field.  virtual void On_Field_Termination(NCursesFormField& field);  // Calculate required window size for the form.  void scale(int& rows, int& ncols) const {    OnError(::scale_form(form,&rows,&ncols));  }  // Retrieve number of fields in the form.  int count() const {    return ::field_count(form);  }  // Make the page the current page of the form.  void set_page(int pageNum) {    OnError(::set_form_page(form, pageNum));  }  // Retrieve current page number  int page() const {    return ::form_page(form);  }  // Switch on the forms options  inline void options_on (Form_Options opts) {    OnError (::form_opts_on (form, opts));  }  // Switch off the forms options  inline void options_off (Form_Options opts) {    OnError (::form_opts_off (form, opts));  }  // Retrieve the forms options  inline Form_Options options () const {    return ::form_opts (form);  }  // Set the forms options  inline void set_options (Form_Options opts) {    OnError (::set_form_opts (form, opts));  }  // Are there more data in the current field after the data shown  inline bool data_ahead() const {    return ::data_ahead(form);  }  // Are there more data in the current field before the data shown  inline bool data_behind() const {    return ::data_behind(form);  }  // Position the cursor to the current field  inline void position_cursor () {    OnError (::pos_form_cursor (form));  }  // Set the current field  inline void set_current(NCursesFormField& F) {    OnError (::set_current_field(form, F.field));  }  // Provide a default key virtualization. Translate the keyboard  // code c into a form request code.  // The default implementation provides a hopefully straightforward  // mapping for the most common keystrokes and form requests.  virtual int virtualize(int c);  // Operators  inline NCursesFormField* operator[](int i) const {    if ( (i < 0) || (i >= ::field_count (form)) )      OnError (E_BAD_ARGUMENT);    return my_fields[i];  }  // Perform the menu's operation  // Return the field where you left the form.  virtual NCursesFormField* operator()(void);  // Exception handlers. The default is a Beep.  virtual void On_Request_Denied(int c) const;  virtual void On_Invalid_Field(int c) const;  virtual void On_Unknown_Command(int c) const;};//// -------------------------------------------------------------------------// This is the typical C++ typesafe way to allow to attach// user data to a field of a form. Its assumed that the user// data belongs to some class T. Use T as template argument// to create a UserField.// -------------------------------------------------------------------------template<class T> class NCURSES_IMPEXP NCursesUserField : public NCursesFormField{public:  NCursesUserField (int rows,		    int ncols,		    int first_row = 0,		    int first_col = 0,		    const T* p_UserData = STATIC_CAST(T*)(0),		    int offscreen_rows = 0,		    int additional_buffers = 0)    : NCursesFormField (rows, ncols,			first_row, first_col,			offscreen_rows, additional_buffers) {      if (field)	OnError(::set_field_userptr(field, STATIC_CAST(void *)(p_UserData)));  }  virtual ~NCursesUserField() {};  inline const T* UserData (void) const {    return reinterpret_cast<const T*>(::field_userptr (field));  }  inline virtual void setUserData(const T* p_UserData) {    if (field)      OnError (::set_field_userptr (field, STATIC_CAST(void *)(p_UserData)));  }};//// -------------------------------------------------------------------------// The same mechanism is used to attach user data to a form// -------------------------------------------------------------------------//template<class T> class NCURSES_IMPEXP NCursesUserForm : public NCursesForm{protected:  // 'Internal' constructor, builds an object without association to a  // field array.  NCursesUserForm( int  nlines,		   int  ncols,		   int  begin_y = 0,		   int  begin_x = 0,		   const T* p_UserData = STATIC_CAST(T*)(0))    : NCursesForm(nlines,ncols,begin_y,begin_x) {      if (form)	set_user (const_cast<void *>(p_UserData));  }public:  NCursesUserForm (NCursesFormField Fields[],		   const T* p_UserData = STATIC_CAST(T*)(0),		   bool with_frame=FALSE,		   bool autoDelete_Fields=FALSE)    : NCursesForm (Fields, with_frame, autoDelete_Fields) {      if (form)	set_user (const_cast<void *>(p_UserData));  };  NCursesUserForm (NCursesFormField Fields[],		   int nlines,		   int ncols,		   int begin_y = 0,		   int begin_x = 0,		   const T* p_UserData = STATIC_CAST(T*)(0),		   bool with_frame=FALSE,		   bool autoDelete_Fields=FALSE)    : NCursesForm (Fields, nlines, ncols, begin_y, begin_x,		   with_frame, autoDelete_Fields) {      if (form)	set_user (const_cast<void *>(p_UserData));  };  virtual ~NCursesUserForm() {  };  inline T* UserData (void) const {    return reinterpret_cast<T*>(get_user ());  };  inline virtual void setUserData (const T* p_UserData) {    if (form)      set_user (const_cast<void *>(p_UserData));  }};//// -------------------------------------------------------------------------// Builtin Fieldtypes// -------------------------------------------------------------------------//class NCURSES_IMPEXP Alpha_Field : public NCursesFieldType{private:  int min_field_width;  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,min_field_width));  }public:  Alpha_Field(int width)    : NCursesFieldType(TYPE_ALPHA),      min_field_width(width) {  }};class NCURSES_IMPEXP Alphanumeric_Field : public NCursesFieldType{private:  int min_field_width;  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,min_field_width));  }public:  Alphanumeric_Field(int width)    : NCursesFieldType(TYPE_ALNUM),      min_field_width(width) {  }};class NCURSES_IMPEXP Integer_Field : public NCursesFieldType{private:  int precision;  long lower_limit, upper_limit;  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,			     precision,lower_limit,upper_limit));  }public:  Integer_Field(int prec, long low=0L, long high=0L)    : NCursesFieldType(TYPE_INTEGER),      precision(prec), lower_limit(low), upper_limit(high) {  }};class NCURSES_IMPEXP Numeric_Field : public NCursesFieldType{private:  int precision;  double lower_limit, upper_limit;  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,			     precision,lower_limit,upper_limit));  }public:  Numeric_Field(int prec, double low=0.0, double high=0.0)    : NCursesFieldType(TYPE_NUMERIC),      precision(prec), lower_limit(low), upper_limit(high) {  }};class NCURSES_IMPEXP Regular_Expression_Field : public NCursesFieldType{private:  char* regex;  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,regex));  }  void copy_regex(const char *source)  {    regex = new char[1 + ::strlen(source)];    (::strcpy)(regex, source);  }public:  Regular_Expression_Field(const char *expr)    : NCursesFieldType(TYPE_REGEXP),      regex(NULL)  {    copy_regex(expr);  }  Regular_Expression_Field& operator=(const Regular_Expression_Field& rhs)  {    if (this != &rhs) {      *this = rhs;      copy_regex(rhs.regex);      NCursesFieldType::operator=(rhs);    }    return *this;  }  Regular_Expression_Field(const Regular_Expression_Field& rhs)    : NCursesFieldType(rhs),      regex(NULL)  {    copy_regex(rhs.regex);  }  ~Regular_Expression_Field() {    delete[] regex;  }};class NCURSES_IMPEXP Enumeration_Field : public NCursesFieldType{private:  const char** list;  int case_sensitive;  int non_unique_matches;  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,			     list,case_sensitive,non_unique_matches));  }public:  Enumeration_Field(const char* enums[],		    bool case_sens=FALSE,		    bool non_unique=FALSE)    : NCursesFieldType(TYPE_ENUM),      list(enums),      case_sensitive(case_sens ? -1 : 0),      non_unique_matches(non_unique ? -1 : 0) {  }  Enumeration_Field& operator=(const Enumeration_Field& rhs)  {    if (this != &rhs) {      *this = rhs;      NCursesFieldType::operator=(rhs);    }    return *this;  }  Enumeration_Field(const Enumeration_Field& rhs)    : NCursesFieldType(rhs),      list(rhs.list),      case_sensitive(rhs.case_sensitive),      non_unique_matches(rhs.non_unique_matches)  {  }};class NCURSES_IMPEXP IPV4_Address_Field : public NCursesFieldType{private:  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype));  }public:  IPV4_Address_Field() : NCursesFieldType(TYPE_IPV4) {  }};extern "C" {  bool _nc_xx_fld_fcheck(FIELD *, const void*);  bool _nc_xx_fld_ccheck(int c, const void *);  void* _nc_xx_fld_makearg(va_list*);}//// -------------------------------------------------------------------------// Abstract base class for User-Defined Fieldtypes// -------------------------------------------------------------------------//class NCURSES_IMPEXP UserDefinedFieldType : public NCursesFieldType{  friend class UDF_Init; // Internal helper to set up staticsprivate:  // For all C++ defined fieldtypes we need only one generic lowlevel  // FIELDTYPE* element.  static FIELDTYPE* generic_fieldtype;protected:  // This are the functions required by the low level libforms functions  // to construct a fieldtype.  friend bool _nc_xx_fld_fcheck(FIELD *, const void*);  friend bool _nc_xx_fld_ccheck(int c, const void *);  friend void* _nc_xx_fld_makearg(va_list*);  void set(NCursesFormField& f) {    OnError(::set_field_type(f.get_field(),fieldtype,&f));  }protected:  // Redefine this function to do a field validation. The argument  // is a reference to the field you should validate.  virtual bool field_check(NCursesFormField& f) = 0;  // Redefine this function to do a character validation. The argument  // is the character to be validated.  virtual bool char_check (int c) = 0;public:  UserDefinedFieldType() : NCursesFieldType(generic_fieldtype) {  }};extern "C" {  bool _nc_xx_next_choice(FIELD*, const void *);  bool _nc_xx_prev_choice(FIELD*, const void *);}//// -------------------------------------------------------------------------// Abstract base class for User-Defined Fieldtypes with Choice functions// -------------------------------------------------------------------------//class NCURSES_IMPEXP UserDefinedFieldType_With_Choice : public UserDefinedFieldType{  friend class UDF_Init; // Internal helper to set up staticsprivate:  // For all C++ defined fieldtypes with choice functions we need only one  // generic lowlevel FIELDTYPE* element.  static FIELDTYPE* generic_fieldtype_with_choice;  // This are the functions required by the low level libforms functions  // to construct a fieldtype with choice functions.  friend bool _nc_xx_next_choice(FIELD*, const void *);  friend bool _nc_xx_prev_choice(FIELD*, const void *);protected:  // Redefine this function to do the retrieval of the next choice value.  // The argument is a reference to the field tobe examined.  virtual bool next    (NCursesFormField& f) = 0;  // Redefine this function to do the retrieval of the previous choice value.  // The argument is a reference to the field tobe examined.  virtual bool previous(NCursesFormField& f) = 0;public:  UserDefinedFieldType_With_Choice() {    fieldtype = generic_fieldtype_with_choice;  }};#endif /* NCURSES_CURSESF_H_incl */

⌨️ 快捷键说明

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