/* htop - CheckItem.c (C) 2004-2011 Hisham H. Muhammad Released under the GNU GPLv2, see the COPYING file in the source distribution for its full text. */ #include "CheckItem.h" #include #include #include "CRT.h" #include "RichString.h" static void CheckItem_delete(Object* cast) { CheckItem* this = (CheckItem*)cast; assert (this != NULL); free(this->text); free(this); } static void CheckItem_display(const Object* cast, RichString* out) { const CheckItem* this = (const CheckItem*)cast; assert (this != NULL); RichString_write(out, CRT_colors[CHECK_BOX], "["); if (CheckItem_get(this)) { RichString_append(out, CRT_colors[CHECK_MARK], "x"); } else { RichString_append(out, CRT_colors[CHECK_MARK], " "); } RichString_append(out, CRT_colors[CHECK_BOX], "] "); RichString_append(out, CRT_colors[CHECK_TEXT], this->text); } const ObjectClass CheckItem_class = { .display = CheckItem_display, .delete = CheckItem_delete }; CheckItem* CheckItem_newByRef(char* text, bool* ref) { CheckItem* this = AllocThis(CheckItem); this->text = text; this->value = false; this->ref = ref; return this; } CheckItem* CheckItem_newByVal(char* text, bool value) { CheckItem* this = AllocThis(CheckItem); this->text = text; this->value = value; this->ref = NULL; return this; } void CheckItem_set(CheckItem* this, bool value) { if (this->ref) { *(this->ref) = value; } else { this->value = value; } } bool CheckItem_get(const CheckItem* this) { if (this->ref) { return *(this->ref); } else { return this->value; } }