| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- /*
- ** Command & Conquer Red Alert(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /* $Header: /CounterStrike/CHEKLIST.CPP 1 3/03/97 10:24a Joe_bostic $ */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : Command & Conquer *
- * *
- * File Name : CHEKLIST.CPP *
- * *
- * Programmer : Joe L. Bostic *
- * *
- * Start Date : 07/05/96 *
- * *
- * Last Update : July 6, 1996 [JLB] *
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * CheckListClass::Action -- action function for this class *
- * CheckListClass::Add_Item -- Adds specifies text to check list box. *
- * CheckListClass::CheckListClass -- constructor *
- * CheckListClass::Check_Item -- [un]checks an items *
- * CheckListClass::Draw_Entry -- draws a list box entry *
- * CheckListClass::Get_Item -- Fetches a pointer to the text associated with the index. *
- * CheckListClass::Remove_Item -- Remove the item that matches the text pointer specified. *
- * CheckListClass::Set_Selected_Index -- Set the selected index to match the text pointer spe*
- * CheckListClass::~CheckListClass -- Destructor for check list object. *
- * CheckListClass::~CheckListClass -- destructor *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #include "function.h"
- /***************************************************************************
- * CheckListClass::CheckListClass -- constructor *
- * *
- * INPUT: *
- * id control ID for this list box *
- * x x-coord *
- * y y-coord *
- * w width *
- * h height *
- * flags mouse event flags *
- * up ptr to Up-arrow shape *
- * down ptr to Down-arrow shape *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 02/16/1995 BR : Created. *
- *=========================================================================*/
- CheckListClass::CheckListClass(int id, int x, int y, int w, int h, TextPrintType flags,
- void const * up, void const * down) :
- ListClass (id, x, y, w, h, flags, up, down),
- IsReadOnly(false)
- {
- }
- /***********************************************************************************************
- * CheckListClass::~CheckListClass -- Destructor for check list object. *
- * *
- * This destructor will delete all entries attached to it. *
- * *
- * INPUT: none *
- * *
- * OUTPUT: none *
- * *
- * WARNINGS: none *
- * *
- * HISTORY: *
- * 07/06/1996 JLB : Created. *
- *=============================================================================================*/
- CheckListClass::~CheckListClass(void)
- {
- while (CheckListClass::Count()) {
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(0);
- ListClass::Remove_Item(0);
- delete obj;
- }
- }
- /***********************************************************************************************
- * CheckListClass::Add_Item -- Adds specifies text to check list box. *
- * *
- * This routine will add the specified text string to the check list. *
- * *
- * INPUT: text -- Pointer to the text string to add to the list box. *
- * *
- * OUTPUT: Returns the index number where the text object was added. *
- * *
- * WARNINGS: none *
- * *
- * HISTORY: *
- * 02/14/1996 JLB : Created. *
- *=============================================================================================*/
- int CheckListClass::Add_Item(char const * text)
- {
- CheckObject * obj = new CheckObject(text, false);
- return(ListClass::Add_Item((char const *)obj));
- }
- char const * CheckListClass::Current_Item(void) const
- {
- CheckObject * obj = (CheckObject *)ListClass::Current_Item();
- if (obj) {
- return(obj->Text);
- }
- return(0);
- }
- /***********************************************************************************************
- * CheckListClass::Get_Item -- Fetches a pointer to the text associated with the index. *
- * *
- * This routine will find the text associated with the entry specified and return a pointer *
- * to that text. *
- * *
- * INPUT: index -- The entry (index) to fetch a pointer to. *
- * *
- * OUTPUT: Returns with the text pointer associated with the index specified. *
- * *
- * WARNINGS: If the index is out of range, then NULL is returned. *
- * *
- * HISTORY: *
- * 07/06/1996 JLB : Created. *
- *=============================================================================================*/
- char const * CheckListClass::Get_Item(int index) const
- {
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(index);
- if (obj) {
- return(obj->Text);
- }
- return(0);
- }
- /***********************************************************************************************
- * CheckListClass::Remove_Item -- Remove the item that matches the text pointer specified. *
- * *
- * This routine will find the entry that matches the text pointer specified and then *
- * delete that entry. *
- * *
- * INPUT: text -- The text pointer to use to find the exact match in the list. *
- * *
- * OUTPUT: none *
- * *
- * WARNINGS: none *
- * *
- * HISTORY: *
- * 07/06/1996 JLB : Created. *
- *=============================================================================================*/
- void CheckListClass::Remove_Item(char const * text)
- {
- for (int index = 0; index < Count(); index++) {
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(index);
- if (obj && stricmp(obj->Text, text) == 0) {
- ListClass::Remove_Item(index);
- delete obj;
- break;
- }
- }
- }
- /***********************************************************************************************
- * CheckListClass::Set_Selected_Index -- Set the selected index to match the text pointer spec *
- * *
- * This routine will find the entry that exactly matches the text pointer specified. If *
- * found, then that entry will be set as the currently selected index. *
- * *
- * INPUT: text -- Pointer to the text string to find the match for. *
- * *
- * OUTPUT: none *
- * *
- * WARNINGS: If an exact match to the specified text string could not be found, then the *
- * currently selected index is not changed. *
- * *
- * HISTORY: *
- * 07/06/1996 JLB : Created. *
- *=============================================================================================*/
- void CheckListClass::Set_Selected_Index(char const * text)
- {
- for (int index = 0; index < Count(); index++) {
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(index);
- if (obj && stricmp(obj->Text, text) == 0) {
- Set_Selected_Index(index);
- break;
- }
- }
- }
- /***************************************************************************
- * CheckListClass::Check_Item -- [un]checks an items *
- * *
- * INPUT: *
- * index index of item to check or uncheck *
- * checked 0 = uncheck, non-zero = check *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 02/16/1995 BR : Created. *
- * 02/14/1996 JLB : Revamped. *
- *=========================================================================*/
- void CheckListClass::Check_Item(int index, bool checked)
- {
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(index);
- if (obj && obj->IsChecked != checked) {
- obj->IsChecked = checked;
- Flag_To_Redraw();
- }
- }
- /***************************************************************************
- * CheckListClass::Is_Checked -- returns checked state of an item *
- * *
- * INPUT: *
- * index index of item to query *
- * *
- * OUTPUT: *
- * 0 = item is unchecked, 1 = item is checked *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 02/16/1995 BR : Created. *
- * 02/14/1996 JLB : Revamped. *
- *=========================================================================*/
- bool CheckListClass::Is_Checked(int index) const
- {
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(index);
- if (obj) {
- return(obj->IsChecked);
- }
- return(false);
- }
- /***************************************************************************
- * CheckListClass::Action -- action function for this class *
- * *
- * INPUT: *
- * flags the reason we're being called *
- * key the KN_number that was pressed *
- * *
- * OUTPUT: *
- * true = event was processed, false = event not processed *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 02/16/1995 BR : Created. *
- *=========================================================================*/
- int CheckListClass::Action(unsigned flags, KeyNumType &key)
- {
- int rc;
- /*
- ** If this is a read-only list, it's a display-only device
- */
- if (IsReadOnly) {
- return(false);
- }
- /*
- ** Invoke parents Action first, so it can set the SelectedIndex if needed.
- */
- rc = ListClass::Action(flags, key);
- /*
- ** Now, if this event was a left-press, toggle the checked state of the
- ** current item.
- */
- if (flags & LEFTPRESS) {
- Check_Item(SelectedIndex, !Is_Checked(SelectedIndex));
- }
- return(rc);
- }
- /***************************************************************************
- * CheckListClass::Draw_Entry -- draws a list box entry *
- * *
- * INPUT: *
- * index index into List of item to draw *
- * x,y x,y coords to draw at *
- * width maximum width allowed for text *
- * selected true = this item is selected *
- * *
- * OUTPUT: *
- * none. *
- * *
- * WARNINGS: *
- * none. *
- * *
- * HISTORY: *
- * 12/14/1995 BRR : Created. *
- *=========================================================================*/
- void CheckListClass::Draw_Entry(int index, int x, int y, int width, int selected)
- {
- if (index >= Count()) return;
- CheckObject * obj = (CheckObject *)ListClass::Get_Item(index);
- if (obj) {
- char buffer[100] = "";
- if (obj->IsChecked) {
- buffer[0] = CHECK_CHAR;
- } else {
- buffer[0] = UNCHECK_CHAR;
- }
- buffer[1] = ' ';
- sprintf(&buffer[2], obj->Text);
- TextPrintType flags = TextFlags;
- RemapControlType * scheme = GadgetClass::Get_Color_Scheme();
- if (selected) {
- flags = flags | TPF_BRIGHT_COLOR;
- LogicPage->Fill_Rect (x, y, x + width - 1, y + LineHeight - 1, scheme->Shadow);
- } else {
- if (!(flags & TPF_USE_GRAD_PAL)) {
- flags = flags | TPF_MEDIUM_COLOR;
- }
- }
- Conquer_Clip_Text_Print(buffer, x, y, scheme, TBLACK, flags, width, Tabs);
- }
- }
|