CrossPlatform GUI Programming with wxWidgets [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

CrossPlatform GUI Programming with wxWidgets [Electronic resources] - نسخه متنی

Julian Smart; Kevin Hock; Stefan Csomor

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
توضیحات
افزودن یادداشت جدید











  • wxList and wxNode


    The wxList class is a doubly linked list that can store data of an arbitrary type. wxWidgets requires that you explicitly define a new list type for each type of list data, providing strong type checking for the list's data type. The wxList class also allows you to optionally specify a key type for primitive lookups (see the wxHashMap section if you need a structure with fast random access).

    The wxList class makes use of an abstract wxNode class. When you define a new list, a new node type deriving from wxNodeBase is also created, providing type-safe node operations. The most important methods of the node class are the self-explanatory GetNext, GetPrevious, and GeTData, which provide access to the next node, the previous node, and the current node's data.

    The only remarkable operation for a wxList is data deletion. By default, removing a node does not delete the data being stored by that node. The DeleteContents method allows you to change this behavior and set the data itself to be deleted along with the nodes. If you want to empty a list of all data and delete the data, be sure to call DeleteContents with TRue before calling Clear.

    Rather than rehash the contents of the manual, a small but comprehensive code example shows the wxList methods as well as how to create and use your custom list type. Note that the WX_DECLARE_LIST macro would typically appear in a header file, while the WX_DEFINE_LIST macro would almost always appear in a source file.


    // Our data class to store in the list
    class Customer
    {
    public:
    int CustID;
    wxString CustName;
    };
    // this part might be in a header or source file
    // declare our list class:
    // this macro declares and partly implements CustomerList class
    // (which derives from wxListBase)
    WX_DECLARE_LIST(Customer, CustomerList);
    // the only requirement for the rest is to be AFTER the full
    // declaration of Customer (for WX_DECLARE_LIST forward declaration
    // is enough), but usually it will be found in the source file and
    // not in the header
    #include <wx/listimpl.cpp>
    WX_DEFINE_LIST(CustomerList);
    // Used for sorting to compare objects
    int listcompare(const Customer** arg1, const Customer** arg2)
    {
    return ((*arg1)->CustID < (*arg2)->CustID);
    }
    // Show List operations
    void ListTest()
    {
    // Declare an instance of our list
    CustomerList* MyList = new CustomerList();
    bool IsEmpty = MyList->IsEmpty(); // will be true
    // Create some customers
    Customer* CustA = new Customer;
    CustA->CustID = 10;
    CustA->CustName = wxT("Bob");
    Customer* CustB = new Customer;
    CustB->CustID = 20;
    CustB->CustName = wxT("Sally");
    Customer* CustC = new Customer;
    CustC->CustID = 5;
    CustC->CustName = wxT("Dmitri");
    // Append two customers to the list
    MyList->Append(CustA);
    MyList->Append(CustB);
    // Insert last customer into arbitrary place in the list
    MyList->Insert((size_t)0, CustC);
    int Count = MyList->GetCount(); // will be 3
    // If not found, wxNOT_FOUND is returned
    int index = MyList->IndexOf(CustB); // will be 2
    // Customized node holds our customized data
    CustomerList::Node* node = MyList->GetFirst();
    // Traverse the nodes and process the customers
    while (node)
    {
    Customer* Cust = node->GetData();
    // Process Customer

    node = node->GetNext();
    }
    // Returns the node at the specified position
    node = MyList->Item(0);
    // Sort the customers according to the sort function
    MyList->Sort(listcompare);
    // Remove Customer A node from the list
    MyList->DeleteObject(CustA);
    // CustA object is NOT deleted by removing the node
    delete CustA;
    // Returns the node whose client data is the object
    node = MyList->Find(CustB);
    // Specifies that data should be deleted when node is deleted
    MyList->DeleteContents(true);
    // Removes node from the list and deletes that node's
    // data (CustB)
    MyList->DeleteNode(node);
    // Clears the list, and deletes all stored data
    // (DeleteContents is true)
    MyList->Clear();
    delete MyList;
    }


  • / 261