Home  Contents

Toolbars in GTK#

فى هذه الجزئية من دروس GTK# .. سنتعامل مع شرائط الأدوات..

تقوم القوائم بتجميع كل الأوامر ولكن يقوم شريط الأدوات بتوفير وصول سريع لأكثر الأوامر المستخدمه من شريط القوائم



Simple toolbar

فى التالى سننشئ شريط ادوات بسيط

toolbar.cs
 
using Gtk;
using System;
 
class SharpApp : Window {
 

    public SharpApp() : base("Toolbar")
    {
        SetDefaultSize(250, 200);
        SetPosition(WindowPosition.Center);
        DeleteEvent += delegate { Application.Quit(); };
        
        Toolbar toolbar = new Toolbar();
        toolbar.ToolbarStyle = ToolbarStyle.Icons;

        ToolButton newtb = new ToolButton(Stock.New);
        ToolButton opentb = new ToolButton(Stock.Open);
        ToolButton savetb = new ToolButton(Stock.Save);
        SeparatorToolItem sep = new SeparatorToolItem();
        ToolButton quittb = new ToolButton(Stock.Quit);

        toolbar.Insert(newtb, 0);
        toolbar.Insert(opentb, 1);
        toolbar.Insert(savetb, 2);
        toolbar.Insert(sep, 3);
        toolbar.Insert(quittb, 4);

        quittb.Clicked += OnClicked;
         
        VBox vbox = new VBox(false, 2);
        vbox.PackStart(toolbar, false, false, 0);
        
        Add(vbox);

        ShowAll();
    }

    void OnClicked(object sender, EventArgs args)
    {
        Application.Quit();
    }

    public static void Main()
    {
        Application.Init();
        new SharpApp();
        Application.Run();
    }
}

المثال يشرح انشاء شريط ادوات و 4 ازرار

 Toolbar toolbar = new Toolbar();

انشاء شريط الأدوات

 toolbar.ToolbarStyle = ToolbarStyle.Icons;

سنعرض ايكونات فقط لانص -text-

 ToolButton newtb = new ToolButton(Stock.New);

انشاء الويدجت ToolButton مع صورة من ال stock

 SeparatorToolItem sep = new SeparatorToolItem(); 

هذا العنصر فاصل بين مكونات شريط الأدوات لتقسيم لمجموعات منطقية

 toolbar.Insert(newtb, 0);
 toolbar.Insert(opentb, 1);
 ...

اضافة الأزرار لشريط الأدوات


Toolbar

Figure: Toolbar



Toolbars

فى المثال التالى سننشئ شريطى ادوات، الكثير من التطبيقات لها اكثر من شريط ادوات.. سنعرض كيفية عمل ذلك فى GTK#

toolbars.cs
 
using Gtk;
using System;
 
class SharpApp : Window {
 

    public SharpApp() : base("Toolbars")
    {
        SetDefaultSize(250, 200);
        SetPosition(WindowPosition.Center);
        DeleteEvent += delegate { Application.Quit(); };
        
        Toolbar upper = new Toolbar();
        upper.ToolbarStyle = ToolbarStyle.Icons;

        ToolButton newtb = new ToolButton(Stock.New);
        ToolButton opentb = new ToolButton(Stock.Open);
        ToolButton savetb = new ToolButton(Stock.Save);

        upper.Insert(newtb, 0);
        upper.Insert(opentb, 1);
        upper.Insert(savetb, 2);

        Toolbar lower = new Toolbar();
        lower.ToolbarStyle = ToolbarStyle.Icons;

        ToolButton quittb = new ToolButton(Stock.Quit);
        quittb.Clicked += OnClicked;
        lower.Insert(quittb, 0);

         
        VBox vbox = new VBox(false, 2);
        vbox.PackStart(upper, false, false, 0);
        vbox.PackStart(lower, false, false, 0);

        Add(vbox);

        ShowAll();
    }

    void OnClicked(object sender, EventArgs args)
    {
        Application.Quit();
    }


    public static void Main()
    {
        Application.Init();
        new SharpApp();
        Application.Run();
    }
}

تطبيقنا يعرض شريطى ادوات

 Toolbar upper = new Toolbar();
 ...
 Toolbar lower = new Toolbar();

هنا ننشئ شريطى الأدوات

 upper.Insert(newtb, 0);
 ...
 lower.Insert(quittb, 0);

كل منها له ازراره الخاصة

 VBox vbox = new VBox(false, 2);
 vbox.PackStart(upper, false, false, 0);
 vbox.PackStart(lower, false, false, 0)

يتم ضمهم فى صندوق افقى الواحد تلو الآخر


Toolbars

Figure: Toolbars



Undo redo

فى المثال التالى سنشرح كيفية عدم تفعيل ازرار فى شريط الأدوات، استخدام شائع فى التطبيقات الرسومية.. على سبيل المثال عدم تفعيل زر الحفظ save عندما نقوم بحفظ كل التغييرات على ملفنا فى القرص، هكذا يعلم المستخدم ان تم حفظ كل التغييرات

undoredo.cs

using Gtk;
using System;
 
class SharpApp : Window {
 
    private int count = 2;
    private ToolButton undo;
    private ToolButton redo;

    public SharpApp() : base("Undo redo")
    {
        SetDefaultSize(250, 200);
        SetPosition(WindowPosition.Center);
        DeleteEvent += delegate { Application.Quit(); };
        
        Toolbar toolbar = new Toolbar();
        toolbar.ToolbarStyle = ToolbarStyle.Icons;

        undo = new ToolButton(Stock.Undo);
        redo = new ToolButton(Stock.Redo);
        SeparatorToolItem sep = new SeparatorToolItem();
        ToolButton quit = new ToolButton(Stock.Quit);

        toolbar.Insert(undo, 0);
        toolbar.Insert(redo, 1);
        toolbar.Insert(sep, 2);
        toolbar.Insert(quit, 3);

        undo.Clicked += OnUndo;
        redo.Clicked += OnRedo;
        quit.Clicked += OnClicked;
         
        VBox vbox = new VBox(false, 2);
        vbox.PackStart(toolbar, false, false, 0);
        vbox.PackStart(new Label(), false, false, 0);

        Add(vbox);

        ShowAll();
    }

    void OnUndo(object sender, EventArgs args)
    {
        count -= 1;

        if (count <= 0) {
            undo.Sensitive = false;
            redo.Sensitive = true;
        }
    }

    void OnRedo(object sender, EventArgs args)
    {
        count += 1;

        if (count >= 5) {
            redo.Sensitive = false;
            undo.Sensitive = true;
        }
    }

    void OnClicked(object sender, EventArgs args)
    {
        Application.Quit();
    }

    public static void Main()
    {
        Application.Init();
        new SharpApp();
        Application.Run();
    }
}

فى المثال لدينا زري undo, redo من ال stock .. وبعد مجموعة من الضغطات يتم الغاء تفعيلهم فيتحولو للون الرمادى

 private int count = 2;

المتغير count نستخدمه لتحديد اى الزرين هو المنشط او غير منشط

 undo = new ToolButton(Stock.Undo);
 redo = new ToolButton(Stock.Redo);

لدينا زرين undo, redo انشئناهم والصور حصلنا عليها من ال stock

 undo.Clicked += OnUndo;
 redo.Clicked += OnRedo;

نربط الحدث Clicked لكل منهما بمعالج الحدث المناسب له

 if (count <= 0) {
     undo.Sensitive = false;
     redo.Sensitive = true;
 }

لتنشيط ويدجت نقوم بإسناد القيمة true للخاصية Sensitive و لعدم تنشيطه نسند قيمة false




Undo redo

Figure: Undo redo



فى هذه الجزئية شرحنا كيفية استخدام شريط الأدوات فى GTK#



Home ‡ Contents ‡ Top of Page