האם כל מה שאנחנו יודעים על עיצוב GUI לא נכון?

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

אז ככה – התחלתי ללמוד wxWidgets. זוהי ערכת פיתוח שמאפשר ייצירת ממשקים חלונאיים (GUI) בצורה שאינה תלויית פלטפורמה, כאשר הממשקים יוצאים במראה מקומי על כל פלטפורמה. בעברית, כותבים קוד פעם אחת, הוא נראה כמו תוכנת GTK על לינוקס, כמו תוכנת Windows רגילה על חלונות, וכמו תוכנת OsX על מאק. לא מזה אני מתלהב.

מה שכן מלהיב אותי זו הצורה שבה מייצרים את החלונות (אם רוצים, כמובן). הצורה המסורתית היא לשבת עם עורך WSIWYG (‏What you see is what you get) ולמקם כפתורים על המסך. על פניו, זו הצורה האידאלית לעשות את זה. הבעיה מתחילה ברגע שבו החלון שבו נמצאים הכפתורים צריך גם לשנות את גודלו. בצורה המסורתית, כל הכפתורים ממוקמים יחסית למערכת צירים שמתחילה בפינה השמאלית עליונה של החלון. אם החלון גדל, מה שיקרה זה שכל הכפתורים ישארו במקומם, וייווצר שטח מת מימין ומלמטה לאיזור המכופתר. כך זה ב-Visual Basic, כך זה ב-Visual Studio, וכך זה היה תמיד.

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

השיטה של wxWidgets מזכירה קצת HTML. במקום לספר למערכת אילו כפתורים יש ואיפה הם נמצאים, אנחנו מספרים למערכת מהו המבנה העקרוני של החלון. אנחנו יכולים לייצר אזורים אנכיים ואזורים אופקיים, ולהגדיר היררכיות (לדוגמא, איזור אנכי שמגדיר “שורות” יורדות, שבו יש אזורים אופקיים שמגדירים כל “שורה”, ובתוך אחת השורות אפשר עוד למקם איזור אנכי לכפתורים ספציפיים). החלק הבאמת יפה הוא שברגע שהגדרנו את זה כך, המערכת עצמה תדע אלו כפתורים להגדיל ואלו להזיז כאשר גודל החלון משתנה. היא גם תדע מהו הגודל המינימלי שהגיוני להגדיר לחלון. במילים אחרות, סט שלם של ניהול שהיה כאב ראש מאוד גדול ומאוד לא קשור למה שהתוכנה בעצם עושה נחסך לנו.

רק למען ההגינות, נראה כאילו בגרסה שעכשיו מיקרוסופט מנסה לדחוף של ‎.Net הם הכניסו משהו מאוד דומה. מכיוון שנראה כאילו שב-wxWidgets יש את זה כבר כמה שנים, תזכרו מי העתיק ממי….

שחר

Bear