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#.

task_manager_informace.png  taskmanager_procesy.png
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.

monodevelop_kod.png  monodevelop_ui.png
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.

Diskuze (88) Další článek: Nová kniha: Velká kniha digitální grafiky a designu

Témata článku: , , , , , , , , , , , , , , , , , , ,