/// <summary> /// Konstruktor okna czatu /// </summary> /// <param name="idRozmowcy">Identyfikator drugiego uczestnika czatu</param> /// <param name="komunikator">Obiekt odpowiedzialny za przesylanie i odbieranie wiadomosci</param> public OknoCzat(Kontakt rozmowca) { // inicjalizacja elementow graficznych okna InitializeComponent(); // ustalanie naglowka okna this.Text = String.Format("Mój Czat z {0}", rozmowca.Nazwa); // zapisywanie referencji this.rozmowca = rozmowca; }
void rysujElement(Kontakt kontakt, DrawItemEventArgs e) { Padding margines = this.Margin; // kolorowanie wybranego elementu listy if ((e.State & DrawItemState.Selected) == DrawItemState.Selected) { e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds); } else { e.Graphics.FillRectangle(Brushes.Wheat, e.Bounds); } // separacja elementow listy e.Graphics.DrawLine(Pens.DarkGray, e.Bounds.X, e.Bounds.Y, e.Bounds.X + e.Bounds.Width, e.Bounds.Y); // rysowanie obrazka // Image obrazek = null; //e.Graphics.DrawImage(obrazek, e.Bounds.X + margines.Left, e.Bounds.Y + margines.Top, rozmiarIkony.Width, rozmiarIkony.Height); // obliczanie ram dla tytulu Rectangle ramyTytul = new Rectangle(e.Bounds.X + margines.Horizontal + rozmiarIkony.Width, e.Bounds.Y + margines.Top, e.Bounds.Width - margines.Right - rozmiarIkony.Width - margines.Horizontal, (int)czcionkaTytul.GetHeight() + 2); // obliczanie ram dla detalu Rectangle ramyDetal = new Rectangle(e.Bounds.X + margines.Horizontal + rozmiarIkony.Width, e.Bounds.Y + (int)czcionkaTytul.GetHeight() + 2 + margines.Vertical + margines.Top, e.Bounds.Width - margines.Right - rozmiarIkony.Width - margines.Horizontal, e.Bounds.Height - margines.Bottom - (int)czcionkaTytul.GetHeight() - 2 - margines.Vertical - margines.Top); // rysuj tekst e.Graphics.DrawString(kontakt.Nazwa, czcionkaTytul, Brushes.Black, ramyTytul, format); e.Graphics.DrawString(kontakt.StatusTekst + (kontakt.Opis!= null?" (" + kontakt.Opis + ")":""), czcionkaDetal, Brushes.DarkGray, ramyDetal, format); e.DrawFocusRectangle(); }
void dodajNowyKontakt(Kontakt kontakt) { if (kontakty.Any(k => k.ID == kontakt.ID)) { MessageBox.Show("Masz już taki kontakt."); return; } kontakty.Add(kontakt); if (polaczony) { komunikator.DodajKontakt(kontakt.ID, kontakt.IP); } odswiezListeKontaktow(); Kontakt.ZapiszListeKontaktow(kontakty, "kontakty.xml"); }
/// <summary> /// Pokaz okno czatu z innym uzytkownikiem. Jesli okno jeszcze nie istnieje, stworz je /// </summary> /// <param name="idRozmowcy">Identyfikator rozmowcy</param> OknoCzat otworzOknoCzat(Kontakt rozmowca) { // jesli okno czatu jest juz otware, pokaz je if (oknaCzatu.ContainsKey(rozmowca.ID)) { // znajdz okno OknoCzat otwarteOkno = oknaCzatu[rozmowca.ID]; // jesli okno jest zminimalizowane, przywroc je na pulpit if (otwarteOkno.WindowState == FormWindowState.Minimized) { otwarteOkno.WindowState = FormWindowState.Normal; } // pokaz okno na pierwszym planie otwarteOkno.BringToFront(); // pokaz je, jesli bylo schowane otwarteOkno.Visible = true; } else //nie bylo otwarte, wiec otworz nowe { OknoCzat noweOkno = new OknoCzat(rozmowca); noweOkno.Komunikator = komunikator; // zachowujemy nowe okno na liscie otwartych okien oknaCzatu.Add(rozmowca.ID, noweOkno); // pokazujemy nowe okno noweOkno.Show(this); } return oknaCzatu[rozmowca.ID]; }
/// <summary> /// Pokaz okno czatu z innym uzytkownikiem i wyswietl w nim wiadomosc /// </summary> /// <param name="idRozmowcy">nadawca wiadomosci </param> /// <param name="wiadomosc">tresc wiadomosci</param> void otworzOknoCzat(Kontakt rozmowca, string wiadomosc) { var okno = otworzOknoCzat(rozmowca); okno.WyswietlWiadomosc(wiadomosc); }
void zmienOpisKontaktu(Kontakt rozmowca, string opis) { rozmowca.Opis = opis; odswiezListeKontaktow(); }
void obsluzWiadomosc(Kontakt rozmowca, TypWiadomosci rodzaj , string wiadomosc) { if (rodzaj == TypWiadomosci.Zwykla) { otworzOknoCzat(rozmowca, wiadomosc); } else if (rodzaj == TypWiadomosci.Opis) { zmienOpisKontaktu(rozmowca, wiadomosc); } }
/// <summary> /// komunikator przekazal nam nowa wiadomosc /// </summary> /// <param name="id">Identyfikator nadawcy</param> /// <param name="wiadomosc">tresc wiadomosci</param> void komunikator_NowaWiadomosc(string id, TypWiadomosci rodzaj , string wiadomosc) { // otworz okno przez delegate poniewaz jestesmy w innym watku var kontakt = kontakty.Where(k => k.ID == id).SingleOrDefault(); if (kontakt == null) {// nieznany kontakt = new Kontakt() { ID = id, IP = IPAddress.Parse(id), Nazwa = id, Polaczony = true }; kontakty.Add(kontakt); } Invoke(obsluzNowaWiadomoscUI, kontakt, rodzaj , wiadomosc); }
public OknoDodajKontakt(Kontakt kontakt):this() { tbIP.Text = kontakt.IP.ToString(); tbNazwa.Text = kontakt.Nazwa; NowyKontakt = kontakt; }
public OknoDodajKontakt() { InitializeComponent(); CenterToParent(); NowyKontakt = new Kontakt(); }