יום שישי, 21 באוגוסט 2009

VALA: כך תוכלו להוסיף טיימר ומאזין עליו לתוכנית שלכם...

שימו לב שמבנה הממשק הגרפי שמור בקובץ - gui.ui ואנו פשוט שולפים אותו משם... לכן לא תוכלו להריץ את הדוגמא בלי שתצרו אחד משלכם...

using Gtk;

public class MyApp {

private Window window;
private uint timerID;

public MyApp () throws Error {
var builder = new Builder ();
builder.add_from_file ("gui.ui");
builder.connect_signals (this);
this.window = builder.get_object ("win_main") as Window;
this.window.destroy += Gtk.main_quit;
}

public void run () {
this.window.show_all ();
Gtk.main ();
}

//This should activate the timer.
[CCode (instance_pos = -1)]
public void on_btnActivate_clicked (Button source) {
timerID = Timeout.add (1000, on_timer_event);
}

//This should deactivate the timer..
[CCode (instance_pos = -1)]
public void on_btnDeactivate_clicked (Button source) {
Source.remove (timerID);
}

//Timer listener
public bool on_timer_event () {
stdout.printf ("timer event");
return true;
}
}

int main (string[] args) {
Gtk.init (ref args);
try {
var app = new MyApp ();
app.run ();
} catch (Error e) {
stderr.printf ("Could not load UI: %s\n", e.message);
return 1;
}
return 0;
}

VALA : הוספת מאזין ל Widget מסוג Notebook

כך ניראת פונקצייה של מאזין ל Widget מסוג Notebook :

public void on_Tabs_switch_page (Gtk.Notebook nb, void *p, uint pageNumber) {

}

יום שני, 17 באוגוסט 2009

שינוי צבע העמודים ב-Widget מסוג- Notebook

אם אתם עובדים עם Widget מסוג Notebook תגלו שאין לו מעפיין שמסוגל להחליף לו את צבע הרקע והוא בעצם יורש את צבע הרקע שמתחתיו. אז מה עושים? כאשר אתם כוללים Notebook בחלון שאתם בונים אתם תיראו שיש משטח עבודה נפרד עבור כל לשונית שאתם מגדירים בו. כדי לצבוע עמוד ספציפי, דבר ראשון תדביקו על אותו העמוד container מסוג Viewport.
דבר הבא הוא, להדביק עליו container נוסף מסוג Fixed ועליו לעצב את תוכן אותו העמוד.

אם למשל קראתם לאובייקט מסוג Viewport בשם -VPort אז:


Gdk.Color? color = null;
Gdk.Color.parse("#8595A0", out color);
this.VPort.modify_bg(Gtk.StateType.NORMAL, color);
כעת הצבע עבור עמוד ששייך לאותה הלשונית ישתנה בהתאם... זאת המחשה לאיך ששינתי את צבע העמוד של לשונית מסויימת לגוון כחול:

יום שבת, 15 באוגוסט 2009

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

רציתי להמליץ על אתר ממש מועיל לכל מי שחשוב לו המראה של ממשק המשתמש שהוא בונה.
אלו דוגמאות למה שאני עשיתי דרך האתר והכנסתי לתוך ממשק המשתמש של התוכנית שלי:




זאת כתובת האתר:

VALA: איך מוסיפים ל- ToolBar איקונים משלכם...

יצירה של חלון אם ToolBar בלי שימוש ב-Glade והוספת איקונים שלכם לתוכו...

using Gtk;

public class SearchWindow : Window {

public SearchWindow () {
this.title = "Just a simple window";
this.position = WindowPosition.CENTER;
set_default_size (400, 300);

var toolbar = new Toolbar ();

var image = new Image.from_file ("down.png");
var open_button = new ToolButton((Image)image,"down");
toolbar.add (open_button);

var vbox = new VBox (false, 0);
vbox.pack_start (toolbar, false, true, 0);
add (vbox);
}
}

בדוגמא האיקון שנוסף ל- ToolBar נקרא בשם - down.png וצריך להימצא ביחד אם קובץ בר הרצה שאתם יוצרים...

יום רביעי, 5 באוגוסט 2009

VALA: ככה שולפים ערך ascii של תו מסויים במחרוזת

int asciiCode=(int)("abcd"[0]);

דיי דומה ל C# הא?

VALA: ככה אתם מוסיפית שורת טקסט לקובץ:

זאת פונקצייה לדוגמא שמוסיפה טקסט לקובץ
public static bool addLineToFile(string file_path, string line) {
var file = File.new_for_path (file_path);
string buffer = line;
if (!file.query_exists (null)){
stderr.printf ("File '%s' doesn't exist.\n", file.get_path ());
return false;
}
try {
FileOutputStream file_stream =
file.append_to(FileCreateFlags.NONE,null);
file_stream.write((void*) buffer, line.len(), null);
}
catch(GLib.Error e) {
print("%s\n", e.message);
}
return true;
}

יום שלישי, 4 באוגוסט 2009

VALA: מחיקת התוכן של TextView

אם יש לכם תיבת טקסט מסוג TextView ואתם רוצים למחוק את התוכן שלה:

text_view.buffer.set_text ("", 0);

יום שני, 3 באוגוסט 2009

VALA: כך תציגו MessageBox...

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

public static void msg_error(string error_message) {
Gtk.MessageDialog message = new
Gtk.MessageDialog(null, DialogFlags.MODAL,
MessageType.ERROR, ButtonsType.OK,
error_message);
message.run();
message.destroy();
}
זהו MessageBox שמציג אפשרות בחירה Yes/No :

public static void msg_error(string error_message) {
Gtk.MessageDialog messagedialog = new Gtk.MessageDialog(null,
Gtk.DialogFlags.DESTROY_WITH_PARENT | Gtk.DialogFlags.MODAL,
Gtk.MessageType.QUESTION, Gtk.ButtonsType.YES_NO, error_message);

int response = messagedialog.run();

if (response==Gtk.ResponseType.YES)
print("You have clicked on Yes");
else if (response==Gtk.ResponseType.NO)
print("You have clicked on No");
messagedialog.destroy();
}

VALA: איך מריצים תוכנית מתוך התוכנית שלכם ומציגים את הפלט שלה

שלום לכולם. אז אם חשבתם לעצמכם איך להריץ תוכנית מתוך התוכנית שלכם ותוך כדי שהיא תרוץ , תוכלו להציג את הפלט שלה, זאת דוגמא בשבילכם:

//Event listener for executed program's output.
public bool read_from_channel(IOChannel source, IOCondition cond) {
string str;
size_t c;
try {
source.read_to_end(out str, out c);
stdout.printf("%s", str);
}
catch (Error e) {
stderr.printf ("Could not load UI: %s\n", e.message);
return false;
}
return true;
}

//Executes some program.
public void execProgram(string command_line, string program_path, string arguments) {
string[] argv = new string[2];
argv[0] = program_path;
if(arguments != "")
argv[1] = arguments;
Pid child_pid;
int input_fd;
int output_fd;
int error_fd;
try {
Process.spawn_async_with_pipes(
command_line,
argv, //argv
null, // environment
SpawnFlags.SEARCH_PATH,
null, // child_setup
out child_pid,
out input_fd,
out output_fd,
out error_fd);
}
catch (Error e) {
stderr.printf ("Could not execute the program: %s\n", e.message);
return;
}
var iochan = new IOChannel.unix_new(output_fd);
iochan.add_watch(IOCondition.IN, read_from_channel);
}

הפונקצייה - read_from_channel מאזינה לפלט חדש מהתוכנית הרצה ומציגה אותו.
הפונקצייה - execProgram מריצה את התוכנית שברצונכם להריץ...

VALA: שינוי צבע של הגופן והרקע של תיבת טקסט...

אם אתם רוצים לשנות את צבע הרקע בתיבת הטקסט שלכם או את צבע הגופן:
private void ChangeColor(){
Gdk.Color? color = null;
Gdk.Color.parse("#ff6666", out color);
myTextView.modify_base(Gtk.StateType.NORMAL, color);
Gdk.Color.parse("#27ef73", out color);
myTextView.modify_text(Gtk.StateType.NORMAL, color);
}

יום ראשון, 2 באוגוסט 2009

VALA: אם רציתם לפתוח דפדפן ברירת מחדל של המערכת בכתובת מסויימת או סתם קובץ...

ככה תוכלו לפתוח דפדפן או סתם קובץ בתוכנת ברירת מחדל שהוגדרה במערכת:

public void on_btnSearch_clicked (Button source) {

Gtk.show_uri(null,"http://google.com",10);

}
מחרוזות לדוגמא שניתן לפתוח בשיטה זאת (נקראות URI):
file:///home/george/Desktop/image.png
http://java-gnome.sourceforge.net/
mailto:george@example.com

יום שבת, 1 באוגוסט 2009

VALA: אם רציתם להוסיף טקסט ל-TextView אז...

אין פונקצייה אחת שישר מוסיפה טקסט לטקסט שכבר קיים ב Widget מסוג TextView, אבל זאת פונקצייה לדוגמא שעושה את העבודה:
public static void GtkTextviewAppend(Widget textview, string text)
{
TextIter ei;
Gtk.TextBuffer tbuffer = ((TextView)textview).get_buffer();
tbuffer.get_end_iter(out ei);
tbuffer.insert(ei, text, -1);
}

TextView :VALA מוצג בלי מסגרת מסביבו


בזמן שאני כותב את התוכנה הראשונה שלי בשפת VALA, אני גיליתי שכאשר אני משתמש ב-Widget בשם TextView (שהוא בעצם תיבת טקסט עם יותר משורה אחת להבדיל מ-TextEntry) אין לי אופצייה להציג גבול מסביבו. כלומר, זה ניראה ככה בלי הגבול:


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