بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
الجزء الثالث وثائق Arfedoracontrolcenter .
الجزء الأول https://arfedora.blogspot.com/2017/11/arfedoracontrolcenter.html.
الجزء الثاني https://arfedora.blogspot.com/2017/11/arfedoracontrolcenter_13.html .
نوع الإضافة الثاني post clicked .
هذا النوع من الإضافات يحمل رقم صفر 0 ويتم تمهيده عند كل ضغط على الزر الخاص به أي سيتم إعادة تنفيذ ما بداخله عند كل ضغظ على المفتاح الخاص به .
1- إستدعيت كلاس BasePlugin سبق وكتبته فقط نستدعيه ,كما سبق وقلت ليس بالضرورة أن نعرف كل التفاضيل .
2-إستدعيت دالة تجلب مسار الصور الموجودة في مجلد icons بنائا على مكان مجلد icons نفسه كما سبق وذكرت ممكن أن يكون موجود بأكثر من مكان خاص وعام .
3-غيرت النوع لرقم صفر 0 .
4-عند الضغظ على زر الإضافة سيتم قراءة كلاس Plugin وتنفيذه , لهذا هذا السطر يجب نقله كما هو.
5-أيضا هذا السطر يجب نقله كما هو .
6-أيضا هذا السطر يجب نقله كما هو .
7-من خلال مكتبة Gtk الرسومية قمت بإنشاء كائن من كلاس Image وأعطيته مسار الصورة التي حددت إسمها ومسارها من خلال دالة get_icon_location التي سبق وتكلمت عنها .
8-هذا هو اهم شيء في الإضافة وهي _self._mainbox وهي box من نوع VBox ورثتها من الكلاس BasePlugin لهذا كل شيء نخطط له في الإضافة يجب أن نعمل له pack لهذه ال box .
صورة لكلاس BasePlugin توضح ما كنت أعنيه .
ال _mainbox_ كما ذكرت سلبقا هي box من نوع VBox وتستخدم من قبل الإضافات لإضافة العناصر داخلها من أزرار وصور و ...إلخ
ال _parent_ تمثل النافذة الأب للبرنامج ويمكن أيضا إستخدام هذا المتغير في الإضافات مثلا لعمل set_sensitive للنافذة .
ال _boxparent_ هي ال box التي ستحتوي _mainbox_ التي سبق وتكلمت عنها بالمناسبة هي من النوع Gtk.ListBoxRow (في الإصدار الجديد أصبح النوع Gtk.Box والإتجاه VERTICAL ).
ليس مهم ان تعرفو التفاصيل الدقيقة المهم ان تعرفو ماذا تمثل هذه الأشياء غالبا سيكون التعامل فقط مع _mainbox_ لإضافة العناصر الرسومية لها و _parent_ مثلا كما قلت في حال أردنا عمل set_sensitive للنافذة .
الأن ما هو متغير blockclose التي سبق وأجلت شرح عنه ؟
أولا سأقوم بنقل الإضافة لمكانها الصحيح والصور أيضا إذا لم تكن موجودة ثم أشغل البرنامج .
نلاحظ ظهور الزر كنا وضعنا له معلومات الصورة والإسم والتعريف ونلاحظ انه في المجموعة الصحيحة المذكورة في category التي هي System .
بعد الضغط عن الزر نصبح هنا نلاحظ هذه الصورة التي وضعت إسمها بالطبع يجب أن نعد الأمر بشكل أفضل حتى لا تظهر الصورة هكذا لاكن لم أرد تعقيد الشرح أكثر ,بالمناسبة نلاحظ انني جهزت الأمر بشل تلقائي من دون تدخل منا في حال كانت العناصر أكبر من حجم النافذة نلاحظ ممكن الإزاحة للأسفل والأعلى واليمين واليسار.
اﻷن بعد التعديل على الإضافة وضع True في blockclose نلاحظ عند الدخول للإضافة إختفاء الأزرار close minimize maximize ممكن إستخدام هذا الأمر لمنع غلق البرنامج أثناء عمل الإضافة .
ملاحظة في الإصدار الجديد من البرنامج أصبح يدعم الترجمة لهذا يجب وضع النص المراد ترجمته بين ()_ وإلزامي على الاقل أن نستخدمهم في button_label و category و title وmainbuttontooltip كما في الصورة في الأسفل.
نوع الإضافة الثاني pre clicked .
هذا النوع من الإضافات يحمل رقم واحد 1 ويتم تمهيدها لمرة واحد أي لن يتم إعادة تنفيذ ما بداخلها عند كل ضغظ على المفتاح الخاص بها وهذا هو الإختلاف الوحيد عن نوع post clicked .فيديو في الأسفل يوضح الفرق نلاحظ في النوع صفر أي post clicked عند كل ضغطة على زر الإضافة سيتم تنفيذ دالة print أما في pre clicked سيتم تنفيذ دالة print مرة واحدة فقط أثناء قراءة البرنامج للإضافة .
تحديث بالنسبة لإضافة من نوع pre clicked يجب فقط إضافة destroy=False كما في الصورة في الأسفل .
تحديث أخر للإصدار الثاني .
أولا نلاحظ أني غيرت شكل البرنامج الذي أريد أن تنتبه له هذه الأيقونات .
1-الأن في الإضافات أول تغير إذا أردت ان تأخذ أيقونة الزر Button من ثيم الأيقونات المفعل في النظام ضع إسم الأيقونة في قائمة وليس نص عادي أما إذا أردت الأيقونة من خلال صورة محددة موجودة في مجلد icons الخاص بالبرنامج لم يتغير شيء فقط ضع الإسم على أنه نص عادي خارج أي قائمة.
2-ثاني تغير عليك ان تحدد إسم الأيقونة لل category لتظهر كما الأيقونات المعلمة في أول صورة يجب فقط ان تضع إسم الأيقونة في متغير category_icon_theme مع الملاحظة الأولوية لأول إضافة يعني لنفترض لديك إضافتين بذات إسم ال category لاكن مع إختلاف إسم هذه الأيقونة سيتم الأخذ بأول إضافة يتم عمل لها load .
اﻷن بعض المعلومات .
برنامج
في الرابط في الأسفل قمت بعمله ليسهل عليا إختيار ما يسمى icontheme لإستخدامها مثلا مع
البرامج الرسومية مثلا من خلال Gtk للأمانة لا أعرف إسمها أو وصفها الحقيقي
لاكن على ما أظن هي أيقونات معيارية يجب ان تكون أو على الأقل أكثريتها
يجب ان تكون في كل ثيمة أيقونات.
البرنامج يعرض الأيقونات لثيم الأيقونات المفعل بالفعل في النظام ويكفي الضغط على أي أيقونة ليتم نسخ إسمها مع إمكانية إختيار ثيم أيقونات أخر وأيضا إمكانية جلب معلومات عن أسماء اﻷيقونات من موقع freedesktop .
في الحقيقة البرنامج وفر عليا الكثير من المشقة قد يكون مفيد للمطوريين مثلا في برنامجي هذا ستحتاج هذه الأسماء لتضعها في متغير category_icon_theme أو إذا اردت كما ذكرت تضعها في متغير button_image لاكن داخل قائمة list.
https://github.com/yucefsourani/argait
البرنامج يعرض الأيقونات لثيم الأيقونات المفعل بالفعل في النظام ويكفي الضغط على أي أيقونة ليتم نسخ إسمها مع إمكانية إختيار ثيم أيقونات أخر وأيضا إمكانية جلب معلومات عن أسماء اﻷيقونات من موقع freedesktop .
في الحقيقة البرنامج وفر عليا الكثير من المشقة قد يكون مفيد للمطوريين مثلا في برنامجي هذا ستحتاج هذه الأسماء لتضعها في متغير category_icon_theme أو إذا اردت كما ذكرت تضعها في متغير button_image لاكن داخل قائمة list.
https://github.com/yucefsourani/argait
لتجاهل الإضافات داخل مجلد محدد .
إذا أردت تحت ظروف محددة أن يتجاهل البرنامج إضافات موجودة في مجلد ما فقط أضف إسم المجلد إلى قائمة to_ignore وهي موجودة في ملف البرنامجي الأساسي مثلا في هذه الصورة في الاعلى لدي إضافة تعمل على فيدورا فقط وضعت شرط إذا كان dnf غير موجود تجاهل مجلد fedora ووضعت هذه الإضافة داخل مجلد fedora كما نلاحظ في الصورة في الأسفل ,يمكنك ان ترتب الإضافات وتضع الشروط أخرى تناسبك كما فعلت انا بالفعل شروط أخرى متعلقة بواجهة جنوم ,مع الملاحظة هذه طريقة ثانية لتجاهل الإضافات ممكن أن نضع الشروط داخل الإضافات نفسهم كما ذكرت سابقا لاكن هكذا أفضل إذا كان عدد الإضافات كبير.
أخيرا هذا رابط إضفافة example التي كنت أشرح عنها نلاحظ مسارها وإسمها ووضعت رقم إصدار لها أي v2.0 .
https://github.com/yucefsourani/arfedoraccframework/blob/master/plugins/example_v1.0.py