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í.

4. diel - Interface pre kontakt, Adaptee Wrapper a komparátor - isim

ISIMContact.cs

Najprv si navrhneme predlohu nášho 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 sa potom bude dediť a urobí sa tzv. Adapter Wrapper návrhový vzor: http://www.itnetwork.cz/...avrhovy-vzor Ide o to, že máme triedu, ktorá je podľa našej predlohy, obsahuje dané vlastnosti a pôvodný objekt kontaktu z danej knižnice.

Aby si mal nejakú predstavu ako to bude vyzerať:

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 fungovať jednoducho, dostupnosť sa zoradia podľa priority (integer) a za to sa priradí meno. Potom sa 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 sa potom priradí nasledovne:

contactListView.ListViewItemSorter = new ISIMcontactComparer();

 

Predchádzajúci článok
Modifikovaný ListView ako kontakt list a mutex - isim
Všetky články v sekcii
Programujeme vlastné Instant Messenger :: isim ::
Preskočiť článok
(neodporúčame)
Prístup k okýnkům, mutex, fce messengera - isim
Článok pre vás napísal David Jančík
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity