Пример #1
0
        /*
         * Costruttore che richiede come parametro il Tab che conterrà questo oggetto
         */
        public MyTabItem(InteractiveTabItem container)
        {
            InitializeComponent();

            ContainerTab = container;

            // Ogni MyTabItem si iscrive all'evento che si genera nella MultiMainWindow quando la finestra viene chiusa
            ContainerTab.MainWindow.ClosingEvent += atClosingTime;

            // Impostazione del timer per il calcolo delle percentuali ad intervalli di 1 secondo
            clientStart     = lastPercUpdate = DateTime.Now;
            percentageTimer = new System.Timers.Timer(1000);
            // Timer impostato come periodico
            percentageTimer.AutoReset = true;
            // Funzione da richiamare allo scadere del timer
            percentageTimer.Elapsed += (obj, e) => {
                Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                                       new Action(() => { percentageUpdate(); }));
            };

            applications = new ObservableCollection <ApplicationItem>();

            // Binding della lista alla listView
            listView.ItemsSource = applications;

            // Abilitazione dell'accesso alla lista da parte di più thread
            BindingOperations.EnableCollectionSynchronization(applications, applications);
        }
Пример #2
0
        /*
         * Metodo per creare una nuova Tab e aggiungerla a quelle visualizzate
         */
        public void addTab(TcpClient client, NetworkStream stream, String indirizzo)
        {
            InteractiveTabItem first = new InteractiveTabItem(this);
            MyTabItem          tab   = new MyTabItem(first);

            first.TabElement = tab;
            // Impostazione header Tab con l'indirizzo IP
            first.NewHeader = first.RemoteHost = indirizzo;
            // Se l'indirizzo è di loopback, viene visualizzato nell'header
            if (indirizzo.StartsWith("127."))
            {
                first.NewHeader = "Loopback";
            }
            else
            {
                // Tentativo di risoluzione del nome host
                Dns.BeginGetHostEntry(indirizzo,
                                      new AsyncCallback((IAsyncResult ar) => {
                    try {
                        // Se la risoluzione è riuscita, il nome host viene visualizzato nell'header
                        string hostName = Dns.EndGetHostEntry(ar).HostName;
                        this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => { first.NewHeader = hostName; }));
                    } catch (SocketException) {
                        // Se non viene trovato un nome host, la tab mantiene l'indirizzo come header
                        Console.WriteLine("Server {0}: Nessun nome host trovato", indirizzo);
                    }
                }), null);
            }

            tab.Connection = client;
            tab.Stream     = stream;
            tab.startWork();
            first.Content = tab;
            // Aggiunta della Tab tra quelle visualizzate
            tabItems.Add(first);
            // Viene evidenziata l'ultima tab creata
            tabControl.SelectedIndex = tabItems.Count - 1;
            // Nel caso ci siano più tab, attiviamo la scelta dell'app in foreground tramite checkbox
            if (tabItems.Count > 1)
            {
                foregroundBox.IsEnabled = true;
            }
        }
Пример #3
0
        /*
         * Metodo che chiude in maniera corretta una Tab
         */
        public void CloseTab(InteractiveTabItem tab)
        {
            // Chiusura della mainWindow se non ci sono più tab (richiamo window_close)
            if (tabItems.Count == 1)
            {
                this.Close();
                return;
            }

            // Rimozione della Tab
            MyTabItem mytab = tab.TabElement;

            ClosingEvent -= mytab.atClosingTime;
            mytab.atClosingTime();
            tabItems.Remove(tab);
            connessioni_attive.Remove(tab.RemoteHost);
            // Nel caso sia rimasta una sola tab, disattiviamo la scelta dell'app in foreground
            if (tabItems.Count == 1)
            {
                foregroundBox.IsEnabled = false;
            }
        }