Staňte se programátorem: Jak na C# pod Linuxem

Microsoft .NET Framework je dnes již k dispozici i na Linuxu. Projekt se jmenuje Mono a s pomocí GTK nebo Windows Forms můžete v C# psát bezproblémové multiplatformní aplikace.

V dnešním dílu o programování v C# si napíšeme jednoduchého správce úloh pro operační systém Linux. Jazyk C# spolu s platformou .NET Framework byl sice původně vytvořen pro systém Microsoft Windows, pro Linux ale existuje jeho open source implementace s názvem Mono, která je vyvíjena především firmou Novell. Mono umožňuje spouštět .NETové aplikace nejen na Linuxu, ale také na dalších operačních systémech včetně Solaris nebo Mac OS X bez nutnosti rekompilace zdrojových kódů. Aktuální verze Mona je 2.0. Pro ty z vás, kterým by nevyhovala práce s GTK komponentami, přibyly od verze 2.0 komponenty Windows Forms, které jsou uloženy tradičně ve jmenném prostoru System.Windows.Forms tak jak to známe z Windows.

Framework platformy Mono lze stáhnout buď ze stránek projektu nebo z repozitářů vaší distribuce. Jako vývojové prostředí poslouží program MonoDevelop, které také bez problému najdete v základním repozitáři každé populární linuxové distribuce.

Dost ale teorie, pojďmě se podívat na to, co si ukážeme v dnešním dílu:

  • Použití některých ovládacích prvků knihovny GTK
  • Práce s vývojovým prostředím MonoDevelop

V MonoDevelopu si pomocí Mono knihoven a GTK vytvoříme jednoduchý program, který zobrazí dialog se základními informacemi o systému včetně systémových proměnných a jednoduchého správce spuštěných procesů, kterým budete moci změnit prioritu nebo je rovnou ukončit. Nebudete k tomu potřebovat žádné znalosti systémového programování pro Linux, vše obstará Framework a C#.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Dialog s výpisem informací o systému a související spuštěné procesy

GUI programu

GTK+ je knihovna ovládacích prvků, která byla původně navržena pro podporu programu Gimp a je základem linuxového desktopu GNOME. V současné době existuje její nadstavba nazvaná Gtk#, která je distribuovaná společně s Mono projektem jako jmenný prostor Gtk a GtkSharp. V Gtk jsou téměř všechny widgety, komponenty, atributy, události a metody (Label, Button, ComboBox, …) pojmenovány stejně jako ve ve jmenném prostoru Windows.Forms. Proto je díky Gtk zaručena přenositelnost grafických aplikací. GTK lze nainstalovat i na systém Windows. Grafické aplikace pracující s knihovnami GTK lze provozovat pod .NETem stejně jako v Mono. Před prvním použitím je potřeba .NET Framework.

Klepněte pro větší obrázek  Klepněte pro větší obrázek
Vývojové prostředí MonoDevelop se příliš neliší od standardu Visual Studia nebo SharpDevelopu

Práce s kontextovou nabídkou

Pokud píšeme program pod Windows, k použití kontextové využijeme třídu ContextMenu, která leží ve jmenném prostoru System.Windows.Forms, její použití by vypadalo následovně:

// Vytvoří kontextovou nabídku
ContextMenu nabidka = new ContextMenu();

// Položky, jež budou přidány do kontextové nabídky:
MenuItem[] polozky = new MenuItem[3];

// Přidává položky
polozky[0] = new System.Windows.Forms.MenuItem("Otevřít");
polozky[1] = new System.Windows.Forms.MenuItem("Uložit");
polozky[2] = new System.Windows.Forms.MenuItem("Zavřít");
nabidka.MenuItems = polozky; // Přiřadí položky do nabídky
nabidka.Show();// Zobrazí nabídku

Chceme-li pracovat s kontextovou nabídkou v Gtk, použijeme třídu Gtk.Menu. Použití této třídy ukazuje následující kód:

// Událost SelectionChanged nastane při výběru položky v komponentě NodeView

protected virtual void OnSelectionChanged(object o, System.EventArgs args)
{
 
NodeSelection vybrane =(NodeSelection)o;
 this.vybranaPol = (MyTreeNode)vybrane.SelectedNode; 
 menu = new Menu(); 
 // Přidá do kontextové nabídky položky
 
MenuItem m1 = new MenuItem("Zabít proces");
 // Ke každé položce přiřadí metodu, jež bude zavolána v případě, že bude
 // položka vybrána.
 m1.ButtonPressEvent += ZabitProces; 
 MenuItem m2 = new MenuItem("Aktualizovat"); 
 m2.ButtonPressEvent += this.VypisProcesy; 
 MenuItem m3 = new MenuItem("Nastavit prioritu"); 
 m3.ButtonPressEvent += ZobrazDialog; 
 // Přiřadí položky k menu
 menu.Add(m1); 
 menu.Add(m2); 
 menu.Add(m3);
 menu.ShowAll();
 // Zobrazí menu

 menu.Popup(null,null,null,0,0);
}

Práce s komponentou NodeView

NodeView je komponenta podobná datagridu – jednotlivá data jsou uchovávána v řádcích, které jsou rozdělené pojmenovanými sloupci. Jednotlivé položky jsou uloženy v instanci třídy NodeStore, nové záznamy jsou přidávány její metodou AddNode, která jako argument očekává třídu odvozenou od rozhraní ITreeNode.

Ovládacímu prvku NodeView ji přiřadíme vlastností NodeStore. Použití tohoto ovládacího prvku uvádím v následujícím kódu:

// Přidá do komponenty Gtk.NodeView sloupce
this.nodeview2.AppendColumn("Název Procesu",new Gtk.CellRendererText (),"text",0);
this.nodeview2.AppendColumn("ID",new Gtk.CellRendererText (),"text",1);
this.nodeview2.AppendColumn("Priorita",new Gtk.CellRendererText (),"text",2);

// Třída Gtk.NodeStore slouží k uchovávání jednotlivých položek
// zobrazených v komponentě NodeView
ns = new NodeStore(typeof(MyTreeNode));
this.nodeview2.NodeStore = ns;
this.nodeview2.ShowAll();// Zobrazí komponentu
this.nodeview2.NodeSelection.Changed += new EventHandler(OnSelectionChanged);

VypisProcesy(this,null);
// Přidá nový záznam
ns.AddNode(new MyTreeNode(“Proces“,“nějaké PID“,“nějaká priorita“));

Ostatní komponenty

Pro vytvoření nového okna použijeme třídu Window. Pro nastavení nadpisu okna použijeme vlastnost Title a pro jeho zobrazení metodu Show:

Window okno = new Window();
okno.Title = "Gtk# Task Manager";
okno.Show();

Pro nastavení textu nadpisu slouží vlastnost Text:

this.label5.Text = “.....“;

Pro vložení položky do komponenty Gtk.ComboBoxEntry (což je v podstatě klasický ComboBox ve Windows) použijeme metodu AppendText:

this. comboboxentry1.AppendText(“nějaká položka“);

Pro zjištění vybrané položky slouží vlastnost ActiveText:

label1.Text = “Vybraný text je: “ +comboboxentry1.ActiveText;

Na procesy se podíváme i příště

V dnešním díle jsme si ukázali práci s několika komponentami knihovny Gtk. V příštím díle si ukážeme jak na procesy nejen v Linuxu, ale i ve Windows a jak na zjištění vlastnosti systému a systémových proměnných. V případě, že byste věděli i o jiné vhodné funkci, nenechte si to pro sebe a pochlubte se v diskuzi pod článkem.

Nakonec i tentokráte samozřejmě nesmí chybět spustitelný program a projekt pro vývojové prostředí MonoDevelop. Ke spuštění programu budete potřebovat běhové prostředí Mono. Program má sice příponu *.exe, z terminálu jej ale můžete spustit třeba příkazem: mono TaskManagerProgram.exe.

Témata článku: Software, Microsoft, Linux, Programování, Framework, Položka, Jednotlivý díl, Priority, Programátor, Jednotlivé prvky, Lin, Kontextová nabídka, Linuxový terminál

Určitě si přečtěte

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

Tesla chce změnit nákladní dopravu. Její elektrický náklaďák má ohromující parametry

** Tesla představila elektrický kamion ** Má obdivuhodný výkon i dojezd ** Prodávat by se měl už za dva roky

17.  11.  2017 | Vojtěch Malý | 222

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

Elektronika, která nepotřebuje kabel ani baterii. Živí se rádiovým šumem

** Každá elektrická krabička má konektor pro napájení nebo baterii ** Jenže pozor, jednou by to tak nemuselo být ** Drobná elektronika se může živit rádiovými vlnami

14.  11.  2017 | Jakub Čížek | 15

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

Nejlepší notebooky do 10 tisíc, které si teď můžete koupit

** I pod hranicí desíti tisíc korun existují dobře použitelné notebooky ** Mohou plnit roli pracovního stroje i zařízení pro zábavu ** Nejlevnější použitelný notebook koupíte za pět a půl tisíce

16.  11.  2017 | Stanislav Janů | 53


Aktuální číslo časopisu Computer

Otestovali jsme 5 HDR 4K televizorů

Jak natáčet video zrcadlovkou

Vytvořte si chytrou domácnost

Radíme s koupí počítačového zdroje