ממשק גרפי לציטוטים חלק שלישי

Quote Window

בחלק הקודם מאוד התלהבתי מהקלות של הפיתוח, אחרי שכבר מזמן לא יצא לי לתכנת בגישה הזו.

אז התחלתי ליצור גם חלון גרפי לחיפוש (החלון לא מכיל את הלוגיקה, רק את המראה הגרפי. מה שנקרא MVC 🙂 ), והוא למעשה חלון דו-שיח המאפשר לי להגדיר מה לחפש ואיך, ומימוש החיפוש נמצא בקובץ אחר. בפועל לא יצרתי עוד את האלגוריתמי חיפוש עצמם.

עוד דבר שרציתי וניסיתי, וניסתי וניסתי וניסיתי ונכשלתי כל הזמן, זה להבין את d-bus ואיך אני שולח הודעה אליו. אז בסוף החלטתי ללכת על משהו טוב אחר, וזה מימוש של libnotify. הבעיה היא שזה דורש תמיכה של GTK, כי הוא נבנה עבור גנום במקור, אם כי לא דורש את גנום עצמו. כך שאם מישהו מכיר מימוש גם עבור Qt ושאר הדרכים, אשמח לדעת עליהם. עכשיו הוא מעצבן מספיק כאשר הוא שולח הרבה ציטוטים לNotify. אז החלטתי שצריך אפשרות להגדיר האם לשלוח או לא כאשר אפילו אותי זה התחיל לעצבן לגמרי.

עכשיו התחילה בעיה חדשה. הממשק הגרפי לא מספיק טוב ! הוא נהיה עמוס מידי, ואם זה לא מספיק חמור, אז הComboBox פשוט לא מתאים לכמות כזו של ציטוטים. אז התחלתי לשחק עם העיצוב הגרפי, תוך כדי הטרדה של מספר אנשים, כדוגמת בוריס, אורי ומאיר. אשר היו בעיקר מנומסים מספיק ולהתעלם 🙂 למעט בוריס ז"א שנתן את דעתו מספר פעמים. תודה בוריס !

הנה מספר קטן של ניסויים שעשיתי בממשק:

quotes_window

עמוס מידי על העיניים נכון ? אז הנה עוד ניסיון:

quotes_window

עדיין לא זה. בסוף הגעתי לתמונה למעלה, הראשונה שראיתם.

מה שכיף בלזרוס (ודלפי) זה שלא הייתי צריך לכתוב קוד חדש בשביל לשנות עיצוב, אלא רק להתחיל לשחק עם הסביבה הגרפית. עוד דבר שעשיתי, זה העברתי את המימוש ל TActionList. מה שאומר שיכולים להיות לי מספר פקדים שבעצם עושים את אותה העבודה. למשל כפתור מול תפריט. הם יכילו את אותה התמונה, אותו הרמז וכו'… והכל מוגדר במקום אחד. למעשה אחד הדברים שעשיתי זה להעביר את הכל להיות כמה שיותר DRY.  למעשה אין כמעט קוד "משוכפל" כמעט בכלל, למעט מקומות בהם אין ברירה מסיבות שונות, אבל גם זה לא בדיוק זהה. ד"א גם הכפתור המאופשר ולא מאופשר, אני משפיע על ה ActionItem הספציפי, וזה משפיע על הפקדים האחרים אשר משתמשים בו ! אפילו קיצורי המקשים, והצגה שלהם ב"רמז", זה הוא אחראי עליהם ! זה נקרא תכנות DRY אשר כבר יכול ליצור לנו בורות שלמים באדמה 🙂

אחרי זה, הוספתי גם תמיכה לשמור את הנתונים. נכון לכתיבת הפוסט יש באג קטן בשחזור המידע. במידה והקובץ לא קיים. החישוב שלי של מיקום ברירת המחדל של החלון שגוי, אבל אני יודע לפתור אותו, אבל החלטתי ב2 בלילה ללכת לישון במקום לתקן את המתמטיקה הגרועה שעשיתי.

עוד באג שחשבתי עליו, הוא שאפשר לעשות עלי התקפה כרגע שאם המספר ששמתם נמוך מ0, אני לא בודק את זה בשחזור מספר הרשומה הנוכחית. אבל זה תיקון על ידי שימוש בפונקציה max שאשתמש בה.

עוד "בעיה" שיש לי הפעם בפונקציה של FPC, זה קבלת הספרייה לשמור את הנתונים. ב FPC יש פיטצ'ר לספק את שם הספרייה עם ה Title של האפליקציה שלי, אבל תארו לכם שאני עובד עם תוכנה מתורגמת. זה יפתח מליארד ספריות  פר שפה. אז יצרתי האק שעוקף את "הבעיה".

שמירת הנתונים נעשת באמצעות קובץ json, וספרייה מדהימה של FPC המאפשרת לי להתנהג ל JSON כאילו הפרוטוקול תומך בגישה של XPATH המוכר מ XML. כך שאם אני רוצה לפנות לאובייקט window ובתוכו, אני רוצה לפנות לאובייקט dimensions ובתוכו אני רוצה לפנות לערך של left, אני אעשה את זה בצורה הבאה:

/window/demensions/left

זה כאמור לתוכן json הנראה בצורה הזו:

 { "quotes" : { "LastQuote" : 3321 }, "window" : { "NotifyEvent" : false, "demensions" : { "left" : 535, "top" : 234, "width" : 712, "height" : 237 } } }
 

התוכן פיזית נוצר לי על ידי הספרייה שאני משתמש בה. תראו כמה קל ונוח לפרש אותו גם בעיניים 🙂

אשמח לעוד רעיונות לגבי העיצוב ומה להוסיף/לשנות בכלל.

וכרגיל, להורדת קוד המקור (וצפייה בכלל בהיסטוריה), אפשר בGitHub.

מחשבה אחת על “ממשק גרפי לציטוטים חלק שלישי

  1. פינגבק: ממשק גרפי לציטוטים חלק רביעי | לראות שונה

כתיבת תגובה

הזינו את פרטיכם בטופס, או לחצו על אחד מהאייקונים כדי להשתמש בחשבון קיים:

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s