| 1 |
|
| 2 |
class MainForm < VRForm |
| 3 |
|
| 4 |
include VRMenuUseable |
| 5 |
include VRStatusbarDockable |
| 6 |
|
| 7 |
def construct |
| 8 |
self.caption = 'Exerb Studio' |
| 9 |
self.move(50, 50, 300, 450) |
| 10 |
self.create_menu |
| 11 |
self.create_controls |
| 12 |
end |
| 13 |
|
| 14 |
def create_menu |
| 15 |
menu = newMenu.set( |
| 16 |
[ |
| 17 |
[ |
| 18 |
"&File", |
| 19 |
[ |
| 20 |
["Open Project...", "menu_file_open"], |
| 21 |
["Save Project...", "menu_file_save"], |
| 22 |
["E&xit", "menu_file_exit"], |
| 23 |
] |
| 24 |
], |
| 25 |
[ |
| 26 |
"&Build", |
| 27 |
[ |
| 28 |
["&Build", "menu_build_build"], |
| 29 |
] |
| 30 |
], |
| 31 |
[ |
| 32 |
"&Utility", |
| 33 |
[ |
| 34 |
["&Eval", "menu_util_eval"], |
| 35 |
] |
| 36 |
], |
| 37 |
[ |
| 38 |
"&Help", |
| 39 |
[ |
| 40 |
["&About", "menu_help_about"], |
| 41 |
] |
| 42 |
], |
| 43 |
] |
| 44 |
) |
| 45 |
self.setMenu(menu) |
| 46 |
end |
| 47 |
protected :create_menu |
| 48 |
|
| 49 |
def create_controls |
| 50 |
@imglist = VRLocalScreen.factory.newimagelist(16, 16) |
| 51 |
@imglist.addicon('res/folder_close.ico') |
| 52 |
@imglist.addicon('res/folder_open.ico') |
| 53 |
@imglist.addicon('mail.ico') |
| 54 |
|
| 55 |
self.addStatusbar("status bar") |
| 56 |
|
| 57 |
cx, cy, cw, ch = self.clientrect |
| 58 |
self.addControl(VRStatic, 'line1', '', cx, cy, cw, 0, WStyle::SS_ETCHEDHORZ) |
| 59 |
@lab1 = self.addControl(VRStatic, 'lab1', '', cx + 5, cy + 5, cw, 16) |
| 60 |
@lab2 = self.addControl(VRStatic, 'lab2', '', cx + 5, cy + 21, cw, 16) |
| 61 |
@tree = self.addControl(VRTreeview, 'tree', '', cx, cy + 38, cw, ch - 38 - 20, WStyle::WS_BORDER) |
| 62 |
@tree.setImagelist(@imglist) |
| 63 |
|
| 64 |
font = @screen.factory.newfont("Terminal", 14) |
| 65 |
[@lab1, @lab2, @tree].each { |ctrl| ctrl.setFont(font) } |
| 66 |
end |
| 67 |
protected :create_controls |
| 68 |
|
| 69 |
def menu_file_open_clicked |
| 70 |
@tree.clearItems |
| 71 |
Model::Store.clear |
| 72 |
|
| 73 |
@project = Model::Project.loadxml('exerb-studio.xml') |
| 74 |
@project.create_node(@tree, WConst::TVI_ROOT) |
| 75 |
end |
| 76 |
|
| 77 |
def menu_file_save_clicked |
| 78 |
@project.savexmlfile('sample.xml') |
| 79 |
end |
| 80 |
|
| 81 |
def menu_file_exit_clicked |
| 82 |
self.close |
| 83 |
end |
| 84 |
|
| 85 |
def menu_util_eval_clicked |
| 86 |
load 'form/eval.rb' |
| 87 |
VRLocalScreen.openModalDialog(self, nil, Form::Eval) |
| 88 |
end |
| 89 |
|
| 90 |
def menu_help_about_clicked |
| 91 |
VRLocalScreen.openModalDialog(self, nil, Form::About) |
| 92 |
end |
| 93 |
|
| 94 |
def tree_selchanged(hitem, lparam) |
| 95 |
@tree_selected_item = Model::Store.get(@tree.getItemLParamOf(hitem)) |
| 96 |
if @tree_selected_item |
| 97 |
@lab1.caption = @tree_selected_item.name |
| 98 |
@lab2.caption = (@tree_selected_item.kind_of?(Model::File) ? @tree_selected_item.filepath : '') |
| 99 |
end |
| 100 |
end |
| 101 |
|
| 102 |
def tree_clicked |
| 103 |
end |
| 104 |
|
| 105 |
def tree_dblclicked |
| 106 |
if @tree_selected_item && @tree_selected_item.kind_of?(Model::File) |
| 107 |
editor(@tree_selected_item.filepath) |
| 108 |
end |
| 109 |
end |
| 110 |
|
| 111 |
def editor(filepath) |
| 112 |
system(EDITOR + ' "' + filepath + '" &') |
| 113 |
end |
| 114 |
|
| 115 |
end |