/*
Интерфејс на програмата за пресметување на Пи,
со n-ти децимал.
Цели на интерфејсот:
1 Да ја отвора класата за сметање пи.
2 Да нуди можност да се внесе променлива вредност до класата.
3 Да ја стопира класата ако долго смета.
4 Да го прикаже резултатот.
5 Понатамошно извезување на резултат.
Inteface of the program for calculating Pi,
with n digits.
Goals of the interface:
1 To open the class pi calculator.
2 To have way to add the var in into the class.
3 To kill the class if the class calculate long time.
4 To show the result.
5 And other ways to export or format the result.
*/
using System;
using Gtk;
using System.Threading;
using Пи_класа;
public class Пи_графички : Window
{
TextBuffer рез;
SpinButton _децимали;
string додавач;
Thread сметање_пи;
public static void Main ()
{
Application.Init ();
Пи_графички window = new Пи_графички();
window.ShowAll();
Application.Run ();
}
public Пи_графички() : base("Пи Сметач")
{
//*****************************Горен Дел**********************
//****************сметај_btn****************
Button сметај_btn = new Button("Сметај");
сметај_btn.Clicked += _smetaj;
//******************************************
//****************ram_goren*****************
Frame ram_goren = new Frame("Променливи:");
//ram_goren.Shadow(gtk.SHADOW_ETCHED_IN );
//******************************************
//****************ram_goren*****************
_децимали = new SpinButton( 0f, 100f, 1f );
_децимали.SetRange (4, int.MaxValue );
//******************************************
//****************убиј_btn******************
Button убиј_btn = new Button("Запри");
убиј_btn.Clicked += _убиј;
//******************************************
//****************гл_управувачи*************
HBox гл_управувачи = new HBox ( false, 4 );
гл_управувачи.PackStart ( _децимали, false, false, 3 );
гл_управувачи.PackEnd ( сметај_btn, false, false, 4 );
//******************************************
ram_goren.Add( гл_управувачи );
//*****************************Долен Дел**********************
//****************верт_пакет_долу****************
VBox верт_пакет_долу = new VBox ( false, 0 );
//******************************************
//****************врм_почни*****************
Label врм_почни = new Label(" Почна во: xx:xx:xx");
верт_пакет_долу.PackStart ( врм_почни , false, false, 0 );
//******************************************
//****************врм_крај*****************
Label врм_крај = new Label("Заврши во: xx:xx:xx");
верт_пакет_долу.PackStart ( врм_крај , false, false, 0 );
//******************************************
//****************врм_разл*****************
Label врм_разл = new Label(" Вкупно: xx:xx:xx");
верт_пакет_долу.PackStart ( врм_разл , false, false, 0 );
//******************************************
//****************облик*********************
ScrolledWindow облик = new ScrolledWindow();
верт_пакет_долу.PackEnd ( облик , false, true, 0 );
//******************************************
//****************_ширач********************
Expander _ширач = new Expander ( "Резултат" );
_ширач.Add(верт_пакет_долу);
//******************************************
//****************_резултат*****************
TextView _резултат;
_резултат = new TextView ();
_резултат.Editable = false;
_резултат.CursorVisible = false;
_резултат.WrapMode = WrapMode.Char;
рез = _резултат.Buffer;
рез.Text = "0.00";
облик.AddWithViewport ( _резултат );
//******************************************
//****************верт_пакет****************
VBox верт_пакет = new VBox ( false, 0 );
верт_пакет.PackStart ( ram_goren , false, false, 0 );
верт_пакет.PackStart ( убиј_btn , false, false, 0 );
//******************************************
//****************дводел********************
VPaned дводел = new VPaned();
дводел.Pack1(верт_пакет,false,false);
дводел .Pack2(_ширач,false,false);
//******************************************
//****************Прозорец******************
// This is obselete now since this class inherits the Gtk.Window class
// Window прозор_главна = new Window ("Пи Сметач");
// прозор_главна.Resizable=false;
// прозор_главна.Add (дводел);//Го додава дводел во прозорецот.
// прозор_главна.DeleteEvent += new DeleteEventHandler(window_destroy);
// прозор_главна.ShowAll ();
this.Resizable=false;
this.Add (дводел);//Го додава дводел во прозорецот.
this.DeleteEvent += new DeleteEventHandler(window_destroy);
this.ShowAll ();
//******************************************
}
void window_destroy (object obj, DeleteEventArgs args)
{
Application.Quit();
}
void _smetaj (object obj, EventArgs a)
{
сметање_пи = new Thread(сметач);
сметање_пи.Start();
}
void _убиј (object obj, EventArgs a)
{
Gtk.Application.Invoke (delegate {сметање_пи.Abort(); Console.Write("Убиец");});
}
void сметач()
{
Пи_класа.pi ps = new Пи_класа.pi();
додавач = "3."+ps.сметај(_децимали.ValueAsInt);
рез.Text = додавач;
Console.Write(рез.Text);
}
}
//mcs -pkg:gtk-sharp-2.0 главна.cs