Сегодня я выкладываю на всеобщее обозрение свой быдлокод (:-D) графического фронт-энда для транслятора icont…
Прежде всего, пара слов о том, почему код выкладывается здесь.
Код выкладывается здесь для демонстрации простейшего графического фронт-энда под Linux (и для демонстрации несовершенства Мира тоже 😀 ), а также я выкладываю этот код в знак того, что эта версия уже не будет поддерживаться, и как следствие, будет создана новая версия фронт-энда и причем с нуля.
Такая вот петрушка, господа!
Сам фронт-энд прост как пробка: из текстовых полей для исходного и конечного файла получаются аргументы для командной строки, которые склеиваются с командами для компиляции, выполнения или генерации ucode (в зависимости, естественно, от нажатой кнопки). Для этого шаманского действия из пути вырезается расширение файла (*.icn, даже для Linux), а результат сливается с уже подготовленными командами для командной строки, после чего полученная строка передается в мою любимую функцию system, выполняющую системные команды.
И при этом, все это безобразие написано на ObjectIcon.
Вот в общем код:
import gui(Align, Dialog, Event, Label, TextButton, TextField, TextPaint, TextDisplay) class gIcont(Dialog) private source_path, about, label_2, generate, label_1, run_file, executable, exe_path public component_setup() self.setup() end public new() cast(self,Dialog).new() return end private on_about(ev) local d d := Notice() d.show_modal() end private on_executable(ev) local source,exec source:=source_path.get_contents() exec:=exe_path.get_contents() create_exe(source,exec) end private on_gIcont(ev) dispose() end private on_generate(ev) local filename filename:=source_path.get_contents() generate_ucode(filename) end private on_run_file(ev) local filename filename:=source_path.get_contents() execute(filename) end private setup() local paint_2, paint_4, paint_1, paint_6, paint_3, paint_5 self.set_label("gIcont v.1.0 (Linux)") self.set_size(361, 257) source_path := TextField(). set_pos("8", "44"). set_size("340"). clear_constraints(). set_constraint("x_align", Align.L). set_constraint("x_fill", &yes). set_constraint("x_weight", 1.0). set_contents("~/"). set_font("Sans Mono,14") self.add(source_path) paint_1 := TextPaint("Source path :") label_1 := Label(). set_pos("4", "13"). clear_constraints(). set_constraint("x_align", Align.L). set_paint(paint_1) self.add(label_1) paint_2 := TextPaint("Executable path :") label_2 := Label(). set_pos("6", "96"). clear_constraints(). set_constraint("x_align", Align.L). set_paint(paint_2) self.add(label_2) exe_path := TextField(). set_pos("8", "127"). set_size("340"). clear_constraints(). set_constraint("x_align", Align.L). set_constraint("x_fill", &yes). set_constraint("x_weight", 1.0). set_contents("~/") self.add(exe_path) paint_3 := TextPaint("Create executable") executable := TextButton(). set_pos("9", "177"). clear_constraints(). connect(self.on_executable, Event.BUTTON_PRESS). set_toggles(&no). set_paint(paint_3) self.add(executable) paint_4 := TextPaint("Create ucode") generate := TextButton(). set_pos("199", "177"). set_size("149", "30"). clear_constraints(). connect(self.on_generate, Event.BUTTON_PRESS). set_toggles(&no). set_paint(paint_4) self.add(generate) paint_5 := TextPaint("Execute source") run_file := TextButton(). set_pos("9", "214"). set_size("186", "30"). clear_constraints(). connect(self.on_run_file, Event.BUTTON_PRESS). set_toggles(&no). set_paint(paint_5) self.add(run_file) paint_6 := TextPaint("About gIcont") about := TextButton(). set_pos("199", "214"). set_size("149", "30"). clear_constraints(). connect(self.on_about, Event.BUTTON_PRESS). set_toggles(&no). set_paint(paint_6) self.add(about) self.connect(self.on_gIcont, Event.WINDOW_CLOSE_BUTTON) end end procedure main() local d d := gIcont() d.show_modal() end procedure execute(filename) system("icont "||filename||" -x") end procedure generate_ucode(filename) system("icont -c "||filename) end procedure create_exe(source,exec) local poz,cmd,tmp if exec=="~/" | exec=="" then { if poz:=find(".icn",source) then tmp:=source[1:poz] else tmp:=source cmd:="icont -o "||tmp||" "||source system(cmd) } else { if poz:=find(".icn",exec) then tmp:=exec[1:poz] else tmp:=exec cmd:="icont -o "||tmp||" "||source system(cmd) } end class Notice(Dialog) private text_display_1 public component_setup() self.setup() end public new() cast(self,Dialog).new() return end private on_Notice(ev) dispose() end private setup() self.set_size(479, 303) self.set_label("About gIcont") text_display_1 := TextDisplay(). set_pos("2", "3"). set_size("475", "297"). clear_constraints(). set_constraint("x_fill", &yes). set_constraint("x_weight", 1.0). set_constraint("y_fill", &yes). set_constraint("y_weight", 1.0). set_font("Sans Mono,14"). set_contents(["Graphical Icont front-end", " (gIcont) v.1.1", "", "Created by disconnectix ", " ", "", " Simple GUI shell for icont translator.", "Experimental version.", "", " This software is part of project IDP -", "IconDevelPack (IconDevelopmentPackage) ", "available on code.google.com/p/icon-development-", "package/", "", " Written in ObjectIcon and distributed under", "BSD Licnse.", "", "", ""]) self.add(text_display_1) self.connect(self.on_Notice, Event.WINDOW_CLOSE_BUTTON) end end
P.S: По хорошему, надо было бы еще выложить файл gicont.layout, но… я потерял этот файл и к тому же без всякой задней мысли выпилил из конца листинга указание на файл layout’а… Так что извиняйте 🙁