Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - Interface pro kontakt, Adaptee Wrapper a komparátor - ISIM

ISIMContact.cs

Nejprve si navrhneme předlohu našeho kontaktu - jeho vlastnosti

public interface ISIMContact
{
    string id { get; }
    string name { get; set; }
    Global.Availability availability { get; set; }
    string protocol { get; }
    bool unreadedMessage { get; set; }
    object contactObject { get; }
}

Ten se poté bude dědit a udělá se tzv. Adapter Wrapper návrhový vzor: http://www.itnetwork.cz/…avrhovy-vzor Jde o to, že máme třídu, která je podle naší předlohy, obsahuje dané vlastnosti a původní objekt kontaktu z dané knihovny.

Aby jsi měl nějakou představu jak to bude vypadat:

public class TestContact : ISIMContact
{
    CizíTřídaKontaktu kontakt;
    public TestContact(CizíTřídaKontaktu kontakt)
    {
        this.kontakt = kontakt;
        this.name = kontakt.P_NAME;
        this.availability = Global.Converter.GetContactAvailability(kontakt.P_STATUS);
        this.unreadedMessage = false;
    }

    public string id
    {
        get { return kontakt.P_IDENTIFICATOR; }
    }

    public string name
    {
        get;
        set;
    }

    public Global.Availability availability
    {
        get;
        set;
    }

    public string protocol
    {
        get { return "Testovací"; }
    }

    public bool unreadedMessage
    {
        get;
        set;
    }

    public object contactObject
    {
        get { return null; }
    }
}

Komparátor bude fungovat jednoduše, dostupnost se seřadí dle priority (integer) a za to se přiřadí jméno. Pak se použije stringový komparátor a pohodička:

/// <summary>
/// Porovnává nejdřív podle dostupnosti a pak podle jména. Jednoduše přičte ke jménu dostupnost a porovná -> 1David. Je to do 6tky takže neřešim :P
/// </summary>
public class ISIMcontactComparer : IComparer
{
    public int Compare(object x, object y)
    {
        int result = -1;
        try
        {
            string c1 = (int)(x as ContactListViewItem).contact.availability + (x as ContactListViewItem).contact.name;
            string c2 = (int)(y as ContactListViewItem).contact.availability + (y as ContactListViewItem).contact.name;

            result = string.Compare(c1, c2);
        }
        catch (NullReferenceException)
        {
            result = -1;
        }
        return result;
    }
}

Kontakt listu se pak přiřadí následovně:

contactListView.ListViewItemSorter = new ISIMcontactComparer();

 

Předchozí článek
Modifikovaný ListView jako kontakt list a Mutex - ISIM
Všechny články v sekci
Programujeme vlastní Instant Messenger ::ISIM::
Přeskočit článek
(nedoporučujeme)
Přístup k okýnkům, Mutex, fce messengeru - ISIM
Článek pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
1 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity