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();