/
skylab
/
qemu-vm-mgr
Обзор
Документация
Войти
/
skylab
/
qemu-vm-mgr
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/ui.rs
64 строки
2 KB
Dmitry Oshurkov
+ config.load_last
31 янв 2026, 09:04
31 янв 2026, 09:04
6f75d30
Код
Авторство
О чём код?
use crate::Config; use ResponseType::Cancel; use gtk::ResponseType::Accept; use gtk::prelude::{BoxExt, ContainerExt, DialogExt, EntryExt, FileChooserExt, GtkWindowExt, WidgetExt}; use gtk::{DialogFlags, Entry, FileChooserAction, FileChooserButton, Label, ResponseType, Window}; use std::process::exit; use std::str::FromStr; pub fn query_vm_config(host: &str, path: &str) -> (String, String, Config) { let dialog = gtk::Dialog::with_buttons( Some("Конфигурация новой виртуальной машины"), Window::NONE, DialogFlags::MODAL, &[("Принять", Accept.into()), ("Отмена", Cancel.into())], ); dialog.set_default_width(400); let content_area = dialog.content_area(); let vbox: gtk::Box = gtk::Box::new(gtk::Orientation::Vertical, 5); let label = Label::new(Some(format!("{host} {path}").as_str())); vbox.pack_start(&label, false, false, 0); let ram = new_text_input(&vbox, "RAM size:", "6G"); let cpu = new_text_input(&vbox, "CPU count:", "4"); let monitor_port = new_text_input(&vbox, "QEMU monitor port:", "4444"); let disk = new_text_input(&vbox, "Disk size:", "58400M"); let cdrom = FileChooserButton::new("CD-ROM image", FileChooserAction::Open); vbox.pack_start(&cdrom, false, false, 0); content_area.add(&vbox); dialog.show_all(); if dialog.run() != Accept { exit(0); } else { dialog.close(); ( disk.text().to_string(), cdrom.filename().unwrap().as_path().to_str().unwrap().to_string(), Config { ram: ram.text().to_string(), cpu: u8::from_str(cpu.text().to_string().as_str()).unwrap(), monitor_port: u16::from_str(monitor_port.text().to_string().as_str()).unwrap(), extra_args: vec![], skip_hda_check: false, load_last: true, }, ) } } fn new_text_input(vbox: >k::Box, label: &str, default: &str) -> Entry { let h_box = gtk::Box::new(gtk::Orientation::Horizontal, 5); let label = Label::new(Some(label)); let entry = Entry::new(); entry.set_text(default); h_box.pack_start(&label, false, false, 0); h_box.pack_start(&entry, false, false, 0); vbox.pack_start(&h_box, false, false, 0); entry }