KDialog یک ابزار بسیار مناسب برای افرادی است که میخواهند شل اسکریپت بنویسند .
این ابزار به این افراد اجاز میده که به کمک اون بعضی از دیالوگها رو به صورت گرافیکی استفاده کنند .

به طور کلی ، KDialog به شما کمک میکنه تا اسکریپت هاتونو گرافیکی کنید .
اما برای هر کاری به یک سوییچ نیاز دارید که هدف این پست معرفی کردن این سوییچ هاست .
به علت طولانی شدن پست ، بقیه در ادامه مطلب میباشد
پیغامهای yes/no و مشابهات آن :
فرض کنید که یک شل اسکریپت ساده نوشتید که وسطش از کاربر میخواد که اجازه انجام یک کاری رو بده . مثلا اجازه اجرای برنامه bilbo .
اگر دستور زیر رو تحت خط فرمان اجرا کنید یک پنجره مانند عکس زیر جلوتون ظاهر میشه :
kdialog --yesno "Your Message" --title "Message Title"

روش استفاده از این دستور تو شل اسکریپت ها خیلی راحته . کافیه اونو تو شرط if استفاده کنید . یعنی اینجوری :
if kdialog --yesno "Do you realy want to run bilbo" --title "Run Bilbo ?" then
bilbo
fi
با اجرا کردن این دستورات ، از شما سوال پرسیده میشه که آیا bilbo رو اجرا کنم و با کلیک کردن بر روی yes بیلبو اجرا میشه .
همینطور و با همین ترکیب به جای سوییچ yesno از سوییچ های yesnocencel ، warningyesno ، warningcontinuecancel و warningyesnocancel استفاده کنید .
پیغامهای گزارش دهنده :
شاید بخواید وسط کار یک پیغام رو گزارش بدید . مثلا اتمام عملیات کپی .
خب برای این کار از دستور زیر باید استفاده کنید :
kdialog --sorry "Your Message" --title "Message Title"

حتی میتونید برای تغییر نوع پیغامها جای سوییچ sorry از سوییچ های errorو msgbox استفاده کنید .
پیغام InputBox :
این پیغام موقعی استفاده میشه که شما بخواهید یک رشته یا همون کلمه رو از کاربر بپرسید :
kdialog --inputbox "Your Message" "Default" --title "Message Title"

برای استفاده از این دستور تو اسکریپتها از روش زیر استفاده کنید :
stringA=`kdialog --inputbox "Your Message" "Default" --title "Message Title"`
اینجوری نامی که کاربر وارد کرده میره تو stringA و شما از اون طریق میتونید ازش استفاده کنید .
دریافت پسورد :
این پیغام مثل پیغام بالا وظیفه دریافت یک رشته و یا همون کلمه رو داره . اما با این تفاوت که این دفعه این کلمه پسورده . پس موقع ورود کلمه ، حرف ها نباید معلوم باشند و جاشون باید ستاره بیاد .
kdialog --password "Your Message" --title "Message Title"

برای استفاده از این دیالوگ ، همانند دستور بالا عمل میکنید و بعد از میتونید از stringB استفاده کنید :
stringB=`kdialog --password "Your Message" --title "Message Title"`
نشان دادن متن :
خب گاهی وقتها هم پیش میاد تو این اسکریپت باید یک متنی رو به کاربر نشون بدید :
kdialog --textbox "Path/to/a/textFile" Width Height --title "Title"

جای width و height اندازه صفحه ای که میخواهید باز بشه رو بنویسید .
ویرایش متن :
اگر خواستید که کاربرتون متنی رو ویرایش کنه از این دستور استفاده کنید :
kdialog --textinputbox "Your Message" "Default Text" --title "Message Title"

برای استفاده از این دستور تو اسکریپتتون از دستورالعمل زیر استفاده کنید :
stringC=`kdialog --textinputbox "Your Message" "Default Text" --title "Message Title"`
لیست ها:
خب لیستها نوعهای متفاوتی دارند که تقریبا از همشون میتونید استفاده کنید .
مثلا یه نوعش با دستور زیر ساخته میشه :
kdialog --title "Message Title" --combobox "Message" item1 item2 item3 ... itemN

برای استفاده ازش تو متن هم معلومه باید چیکار کنید :
stringD=`kdialog --title "Message Title" --combobox "Message" item1 item2 item3 ... itemN`
و بعد گزینه ای که توسط کاربر اتخاب میشه توی stringD ذخیره میشه .
حالا شاید بخواید که به یه شکل دیگه واستون نمایش داده بشه :
kdialog --title "Message Title" --menu "Message" a item1 b item2 c item3 ... itemN

این دستور دقیقا مثل دستور بالا میمونه با یک تفاوت . اون تفادوت اینه که به جای اینکه نام گزینه رو به عنوان خروجی به شما بده ، نامی که خودتان مشخص میکنید رو میده . یعنی مثلا تو دستور بالا اگه کاربر item2 رو انتخاب کنه ، دستور حرف b رو به عنوان خروجی تحویل میده .
اما دو دستور بالا بعضی جاها به درد اسکریپت ما نمیخورند . اون دو جا موقعیه که کاربر باید چند تا گزینه رو انتخاب کنه :
kdialog --title "Message Title" --checklist "Message" a item1 A b item2 B c item3 C ... ItemN N
چون شکل این دستور دقیقا مثل شکل بالایی بود ، قرار داده نشدش .
این دستور چند تفاوت داره .
اولیش اینه که کاربر با گرفتن کلید کنترل میتونه چند تا گزینه رو با هم انتخاب کنه .
دومیش اینه که خروجی این دستور به این شکله : “b” “c”
و سومیش که من نمیدونم چرا ، اینه که جلوی هر گزینه یک کلمه دیگه هم باید مشخص بشه . کاربردشو نفهمیدم کجاست . واقعا کجاست ؟
یه دستور دیگه هم هست که دقیقا از نظر عمل کرد مثل دستور بالاست ، با این تفاوت که فقط یک گزینه قابل انتخاب هستش :
kdialog --title "Message Title" --radiolist "Message" a item1 A b item2 B c item3 C ... ItemN N
بالا بر :
برای به وجود آوردن یک بالابر یا همون popup باید از این دستور استفاده کنید :
kdialog --title "Message Title" --passivepopup "Message" 15

به جای 15 مدت زمانی که میخواهید بالابر شما نمایش داده بشه رو قرار بدید . البته بر حسب ثانیه .
کار با فایلها :
شاید شما بخواهید که کاربرتون مکانی رو به شما نشون بده که فایلی رو براش ذخیره کنید . شاید بخواهید کاربر آدرس یک فایل رو به اسکریپت بده .
همه اونا با سوییچهای getopenfilename ، getsavefilename ، getopenurl ، getsaveurl و getexistingdirectory انجام پذیر هستند .
این دستورها به شکل زیر استفاده میشند :
kdialog --title "Message Title" --multiple --getopenurl /home filter

با این تفاوت که سوییچ آخری یعنی getexistingdirectory فیلتر نداره . جای /home آدرس پیشفرض و جای filter فیلترتون رو مشخص میکنید . اگر سوییچ multiple رو هم حذف کنید ، کاربر فقط یک فایل رو میتونه انتخاب کنه .
پراگرسبار :
یکی از مهمترین قسمتها همین قسمته . برای پراگرس بار باید از چند دستور استفاده کنید :
با دستور پایین یک دیالوگ پراگرسبار باز میشه :
kdialog --progressbar "Initialising" 4

اما دستور بالا به تنهایی هیچ کاربردی نداره و نخواهد داشت . علت این قضیه اینه که دستور kdialog با سوییچ progressbar به شما یک کد تحویل میده تا بتونید تو دستورهای بعدی ازش استفاده کنید . پس بهتره دستور بالا رو به شکل زیر بنویسیم :
dbusRef=`kdialog --progressbar "Initialising" 4`
حالا کدی که به ما تحویل داده شده تو dbusRef ذخیره شده و میتونید اونو با دستور زیر ببینید :
echo $dbusRef
که خروجی تقریبا به شکل زیر داره :
org.kde.kdialog-16114 /ProgressDialog
اما برای عملیات بعدی dbusRef برای آدرس دهی خیلی بدردمون میخوره .
تو دستور بالا یک عدد 4 دیده میشه . این عدد تعداد مرحله ها رو مشخص میکنه . یعنی هر مرحله 25 درصد .
برای انتخاب مرحله یک از دستور زیر استفاده میکنیم :
qdbus $dbusRef Set org.kde.kdialog.ProgressDialog value 1
به جای عدد 1 شماره مرحله رو بزارید . بعد از وارد کردن دستور بالا خواهید دید که پراگرسبار از صفر درصد به 25 درصد میره .
همینطور هرموقع که خواستید میتونید برچسب و یا همون label ی رو که تو عکس بالا نوشته Initialising رو عوض کنید :
qdbus $dbusRef org.kde.kdialog.ProgressDialog.setLabelText "Step 1"
که جای step1 برچسبی رو که خودتون دوست دارید رو قرار بدید .
هر موقع که لازم شد این دیالوگ بسته بشه از دستور زیر استفاده کنید :
qdbus $dbusRef org.kde.kdialog.ProgressDialog.close
انتخاب رنگ :
خیلی مواقع پیش میاد که کاربر باید یک رنگ رو انتخاب کنه .
دیالوگ مربوط به رنگها با این دستور نمایش داده میشند :
kdialog --title "Title" --getcolor

واما این پست هم تموم شد . فکر نکنم تا حالا پست به این طولانی نوشته باشم . واسه همین اگر اواخر پست مشکلی داره به بزرگی خودتون ببخشید . علتش خستگی بوده
برای اطلاعات بیشتر و دقیق تر درباره kdialog به اینجا مراجه کنید .


