Compare commits
7 Commits
21bc19e893
...
experiment
| Author | SHA1 | Date | |
|---|---|---|---|
| 27f9a8e10b | |||
| 229f525653 | |||
| c211f3002a | |||
| 1edbe06401 | |||
| a787464c44 | |||
| fcc2567aa2 | |||
| 34d2af08c6 |
Binary file not shown.
Binary file not shown.
BIN
.vs/AIT/v17/.wsuo
Normal file
BIN
.vs/AIT/v17/.wsuo
Normal file
Binary file not shown.
54
.vs/AIT/v17/DocumentLayout.backup.json
Normal file
54
.vs/AIT/v17/DocumentLayout.backup.json
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\msys64\\home\\doryan\\AIT\\",
|
||||||
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\msys64\\home\\doryan\\AIT\\src\\main.rs||{3B902123-F8A7-4915-9F01-361F908088D0}",
|
||||||
|
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\main.rs||{3B902123-F8A7-4915-9F01-361F908088D0}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\msys64\\home\\doryan\\AIT\\.gitignore||{3B902123-F8A7-4915-9F01-361F908088D0}",
|
||||||
|
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:.gitignore||{3B902123-F8A7-4915-9F01-361F908088D0}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": 1,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 1,
|
||||||
|
"Title": ".gitignore",
|
||||||
|
"DocumentMoniker": "C:\\msys64\\home\\doryan\\AIT\\.gitignore",
|
||||||
|
"RelativeDocumentMoniker": ".gitignore",
|
||||||
|
"ToolTip": "C:\\msys64\\home\\doryan\\AIT\\.gitignore",
|
||||||
|
"RelativeToolTip": ".gitignore",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "00000000-0000-0000-0000-000000000000.000000|iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVDhPjVNLTgJBEG1lwpoFB3GNK9fieA48hD8iwT/ihwgSDAIHgAGXXsEV18CNzL/LquqZdsYM6kteXqcy3fWqpmpNRBgOhyABBEgpAFVKPIMUcYzUyOU\u002BXM/b2qtU3vkSfRjjZTCAMAw1A2LwzdFoBPP5HNqdzuL27n4juibWI\u002BUshBA1DIkhEx9iEorFotgslQqGYbxxAGFEqt1MxmPWJLbLZdZ\u002Bv89q5PMFPiTR6z2zdaxR0fXA0XTBcVywkb4fwHXjRteecIDNQ7UmExVYAdPcxYaqclN46na5WenMKjtlVnTYwcXlVYaDqImW9beD5N/TeGy32QHXm6hZ03ZgiSQHp2fnWQ4oBmJqWSqwAqZpZjt4aLXAD4J0VqyZsmoubfB8H2r1eoaD6NXZ9HcHO\u002BSA3f4AjifXl8rItOETM8ckB9WTWpYD9RdeZ1PWVWAHWXPQaDb59f/w8LiqHeh1pvGkCaP6qB8yXusoxmuNZ7XmII4O9vGuEF86osuDYRkpYQAAAABJRU5ErkJggg==",
|
||||||
|
"WhenOpened": "2024-08-18T21:59:06.655Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 0,
|
||||||
|
"Title": "main.rs",
|
||||||
|
"DocumentMoniker": "C:\\msys64\\home\\doryan\\AIT\\src\\main.rs",
|
||||||
|
"RelativeDocumentMoniker": "src\\main.rs",
|
||||||
|
"ToolTip": "C:\\msys64\\home\\doryan\\AIT\\src\\main.rs",
|
||||||
|
"RelativeToolTip": "src\\main.rs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
|
||||||
|
"WhenOpened": "2024-08-18T21:59:04.875Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
53
.vs/AIT/v17/DocumentLayout.json
Normal file
53
.vs/AIT/v17/DocumentLayout.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"Version": 1,
|
||||||
|
"WorkspaceRootPath": "C:\\msys64\\home\\doryan\\AIT\\",
|
||||||
|
"Documents": [
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\msys64\\home\\doryan\\AIT\\src\\main.rs||{3B902123-F8A7-4915-9F01-361F908088D0}",
|
||||||
|
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:src\\main.rs||{3B902123-F8A7-4915-9F01-361F908088D0}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"AbsoluteMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|C:\\msys64\\home\\doryan\\AIT\\.gitignore||{3B902123-F8A7-4915-9F01-361F908088D0}",
|
||||||
|
"RelativeMoniker": "D:0:0:{A2FE74E1-B743-11D0-AE1A-00A0C90FFFC3}|\u003CMiscFiles\u003E|solutionrelative:.gitignore||{3B902123-F8A7-4915-9F01-361F908088D0}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"DocumentGroupContainers": [
|
||||||
|
{
|
||||||
|
"Orientation": 0,
|
||||||
|
"VerticalTabListWidth": 256,
|
||||||
|
"DocumentGroups": [
|
||||||
|
{
|
||||||
|
"DockedWidth": 200,
|
||||||
|
"SelectedChildIndex": 1,
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 1,
|
||||||
|
"Title": ".gitignore",
|
||||||
|
"DocumentMoniker": "C:\\msys64\\home\\doryan\\AIT\\.gitignore",
|
||||||
|
"RelativeDocumentMoniker": ".gitignore",
|
||||||
|
"ToolTip": "C:\\msys64\\home\\doryan\\AIT\\.gitignore",
|
||||||
|
"RelativeToolTip": ".gitignore",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "00000000-0000-0000-0000-000000000000.000000|iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAF8SURBVDhPjVNLTgJBEG1lwpoFB3GNK9fieA48hD8iwT/ihwgSDAIHgAGXXsEV18CNzL/LquqZdsYM6kteXqcy3fWqpmpNRBgOhyABBEgpAFVKPIMUcYzUyOU\u002BXM/b2qtU3vkSfRjjZTCAMAw1A2LwzdFoBPP5HNqdzuL27n4juibWI\u002BUshBA1DIkhEx9iEorFotgslQqGYbxxAGFEqt1MxmPWJLbLZdZ\u002Bv89q5PMFPiTR6z2zdaxR0fXA0XTBcVywkb4fwHXjRteecIDNQ7UmExVYAdPcxYaqclN46na5WenMKjtlVnTYwcXlVYaDqImW9beD5N/TeGy32QHXm6hZ03ZgiSQHp2fnWQ4oBmJqWSqwAqZpZjt4aLXAD4J0VqyZsmoubfB8H2r1eoaD6NXZ9HcHO\u002BSA3f4AjifXl8rItOETM8ckB9WTWpYD9RdeZ1PWVWAHWXPQaDb59f/w8LiqHeh1pvGkCaP6qB8yXusoxmuNZ7XmII4O9vGuEF86osuDYRkpYQAAAABJRU5ErkJggg==",
|
||||||
|
"WhenOpened": "2024-08-18T21:59:06.655Z"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"$type": "Document",
|
||||||
|
"DocumentIndex": 0,
|
||||||
|
"Title": "main.rs",
|
||||||
|
"DocumentMoniker": "C:\\msys64\\home\\doryan\\AIT\\src\\main.rs",
|
||||||
|
"RelativeDocumentMoniker": "src\\main.rs",
|
||||||
|
"ToolTip": "C:\\msys64\\home\\doryan\\AIT\\src\\main.rs",
|
||||||
|
"RelativeToolTip": "src\\main.rs",
|
||||||
|
"ViewState": "AgIAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAA==",
|
||||||
|
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
|
||||||
|
"WhenOpened": "2024-08-18T21:59:04.875Z",
|
||||||
|
"EditorCaption": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
3
.vs/ProjectSettings.json
Normal file
3
.vs/ProjectSettings.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"CurrentProjectSetting": null
|
||||||
|
}
|
||||||
7
.vs/VSWorkspaceState.json
Normal file
7
.vs/VSWorkspaceState.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"ExpandedNodes": [
|
||||||
|
"",
|
||||||
|
"\\src"
|
||||||
|
],
|
||||||
|
"PreviewInSolutionExplorer": false
|
||||||
|
}
|
||||||
BIN
.vs/slnx.sqlite
Normal file
BIN
.vs/slnx.sqlite
Normal file
Binary file not shown.
45
.vscode/launch.json
vendored
Normal file
45
.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "lldb",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Debug executable 'AIT'",
|
||||||
|
"cargo": {
|
||||||
|
"args": [
|
||||||
|
"build",
|
||||||
|
"--bin=AIT",
|
||||||
|
"--package=AIT"
|
||||||
|
],
|
||||||
|
"filter": {
|
||||||
|
"name": "AIT",
|
||||||
|
"kind": "bin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceFolder}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "lldb",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Debug unit tests in executable 'AIT'",
|
||||||
|
"cargo": {
|
||||||
|
"args": [
|
||||||
|
"test",
|
||||||
|
"--no-run",
|
||||||
|
"--bin=AIT",
|
||||||
|
"--package=AIT"
|
||||||
|
],
|
||||||
|
"filter": {
|
||||||
|
"name": "AIT",
|
||||||
|
"kind": "bin"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"args": [],
|
||||||
|
"cwd": "${workspaceFolder}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
21
Cargo.lock
generated
21
Cargo.lock
generated
@@ -11,6 +11,7 @@ dependencies = [
|
|||||||
"gtk4",
|
"gtk4",
|
||||||
"libadwaita",
|
"libadwaita",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
"winres",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -712,7 +713,7 @@ dependencies = [
|
|||||||
"cfg-expr",
|
"cfg-expr",
|
||||||
"heck",
|
"heck",
|
||||||
"pkg-config",
|
"pkg-config",
|
||||||
"toml",
|
"toml 0.8.19",
|
||||||
"version-compare",
|
"version-compare",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -750,6 +751,15 @@ dependencies = [
|
|||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml"
|
||||||
|
version = "0.5.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
|
||||||
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "toml"
|
name = "toml"
|
||||||
version = "0.8.19"
|
version = "0.8.19"
|
||||||
@@ -898,6 +908,15 @@ dependencies = [
|
|||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winres"
|
||||||
|
version = "0.1.12"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c"
|
||||||
|
dependencies = [
|
||||||
|
"toml 0.5.11",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wyz"
|
name = "wyz"
|
||||||
version = "0.5.1"
|
version = "0.5.1"
|
||||||
|
|||||||
@@ -6,8 +6,11 @@ edition = "2021"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
adw = { version = "0.7.0", package = "libadwaita", features = ["v1_4"] }
|
adw = { version = "0.7.0", package = "libadwaita"}
|
||||||
bitvec = "1.0.1"
|
bitvec = "1.0.1"
|
||||||
gio = { version = "0.20.0", features = ["v2_74"] }
|
gio = { version = "0.20.0", features = ["v2_74"] }
|
||||||
gtk4 = { version = "0.9.0", features = ["v4_12"] }
|
gtk = { version = "0.9.0", package = "gtk4", features = ["v4_12"] }
|
||||||
tokio = { version = "1.39.2", features = ["rt", "time", "rt-multi-thread", "macros", "sync"] }
|
tokio = { version = "1.39.2", features = ["rt", "time", "rt-multi-thread", "macros", "sync"] }
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
winres = "0.1"
|
||||||
9
build.rs
Normal file
9
build.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
extern crate winres;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
if cfg!(target_os = "windows") {
|
||||||
|
let mut res = winres::WindowsResource::new();
|
||||||
|
res.set_icon("./src/view/resources/icon.ico"); // Replace this with the filename of your .ico file.
|
||||||
|
res.compile().unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
model::{models::*, Result},
|
model::{models::*, Result},
|
||||||
model_utils::hamming_code_seven_four::*,
|
model_utils::hamming_code_seven_four::*,
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use bitvec::{order::Lsb0, view::AsBits};
|
use bitvec::{order::Lsb0, view::AsBits};
|
||||||
use gtk::{prelude::*, *};
|
use gtk::{prelude::*, *};
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
use gio::glib::Object;
|
use gio::glib::Object;
|
||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use gtk4 as gtk;
|
#![windows_subsystem = "windows"]
|
||||||
|
|
||||||
extern crate gio;
|
extern crate gio;
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
pub mod builder_traits;
|
pub mod builder_traits;
|
||||||
pub mod models;
|
pub mod models;
|
||||||
|
|
||||||
use crate::gtk::glib;
|
use gtk::glib::{Object, wrapper};
|
||||||
|
|
||||||
use glib::Object;
|
|
||||||
|
|
||||||
pub type Result<T> = core::result::Result<T, Error>;
|
pub type Result<T> = core::result::Result<T, Error>;
|
||||||
pub type Error = std::boxed::Box<dyn std::error::Error>;
|
pub type Error = std::boxed::Box<dyn std::error::Error>;
|
||||||
|
|
||||||
glib::wrapper! {
|
wrapper! {
|
||||||
pub struct Frequency(ObjectSubclass<models::Frequency>);
|
pub struct Frequency(ObjectSubclass<models::Frequency>);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
|
||||||
use crate::gtk;
|
|
||||||
|
|
||||||
use gtk::{
|
use gtk::{
|
||||||
glib::{self, Properties},
|
glib::{self, Properties},
|
||||||
prelude::*,
|
prelude::*,
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
use adw::HeaderBar;
|
use adw::HeaderBar;
|
||||||
use gio::{glib::Variant, SimpleAction};
|
use gio::{glib::Variant, SimpleAction};
|
||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use gtk::{
|
use gtk::{
|
||||||
prelude::{BoxExt, GtkWindowExt},
|
prelude::{BoxExt, GtkWindowExt},
|
||||||
AboutDialog, Box, Image, Label, Orientation, ScrolledWindow, Window,
|
AboutDialog, Box, Image, Label, Orientation, ScrolledWindow, Window, License, NaturalWrapMode, PolicyType
|
||||||
};
|
};
|
||||||
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
@@ -23,8 +22,8 @@ pub fn open_about_dialogue(_action: &SimpleAction, _var: Option<&Variant>) {
|
|||||||
AboutDialog::builder()
|
AboutDialog::builder()
|
||||||
.authors(vec!["Сагиев А.Д.", "Ефимов И.П."])
|
.authors(vec!["Сагиев А.Д.", "Ефимов И.П."])
|
||||||
.version("1.0-beta")
|
.version("1.0-beta")
|
||||||
.program_name("Прикладная теория информаций")
|
.program_name("Прикладная теория информации")
|
||||||
.license_type(gtk4::License::Apache20)
|
.license_type(License::Apache20)
|
||||||
.logo(&logo)
|
.logo(&logo)
|
||||||
.website("https://gitea.doryan04.ru/doryan/AIT")
|
.website("https://gitea.doryan04.ru/doryan/AIT")
|
||||||
.build()
|
.build()
|
||||||
@@ -44,7 +43,7 @@ pub fn open_help_dialogue(_action: &SimpleAction, _var: Option<&Variant>) {
|
|||||||
.width_request(400)
|
.width_request(400)
|
||||||
.max_width_chars(50)
|
.max_width_chars(50)
|
||||||
.single_line_mode(false)
|
.single_line_mode(false)
|
||||||
.natural_wrap_mode(gtk4::NaturalWrapMode::Word)
|
.natural_wrap_mode(NaturalWrapMode::Word)
|
||||||
.label(crate::view::resources::HELP)
|
.label(crate::view::resources::HELP)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@@ -52,14 +51,14 @@ pub fn open_help_dialogue(_action: &SimpleAction, _var: Option<&Variant>) {
|
|||||||
|
|
||||||
let scrollable = ScrolledWindow::builder()
|
let scrollable = ScrolledWindow::builder()
|
||||||
.child(&help)
|
.child(&help)
|
||||||
.hscrollbar_policy(gtk4::PolicyType::Never)
|
.hscrollbar_policy(PolicyType::Never)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
let custom_header = HeaderBar::new();
|
let custom_header = HeaderBar::new();
|
||||||
|
|
||||||
Window::builder()
|
Window::builder()
|
||||||
.width_request(400)
|
.width_request(800)
|
||||||
.height_request(300)
|
.height_request(600)
|
||||||
.name("help")
|
.name("help")
|
||||||
.title("Помощь")
|
.title("Помощь")
|
||||||
.titlebar(&custom_header)
|
.titlebar(&custom_header)
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
use gtk4 as gtk;
|
use gio::glib::clone;
|
||||||
|
|
||||||
use std::{collections::VecDeque, sync::LazyLock};
|
use std::{collections::VecDeque, sync::LazyLock};
|
||||||
|
|
||||||
use gtk::{
|
use gtk::{
|
||||||
builders::{BoxBuilder, ButtonBuilder, LabelBuilder},
|
builders::{BoxBuilder, ButtonBuilder, LabelBuilder},
|
||||||
prelude::{BoxExt, ButtonExt, ObjectExt, WidgetExt},
|
prelude::{BoxExt, ButtonExt, ObjectExt, WidgetExt},
|
||||||
Box, Button, Label, Revealer, RevealerTransitionType,
|
Box, Button, Label, Revealer, RevealerTransitionType
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::model::builder_traits::Product;
|
use crate::model::builder_traits::Product;
|
||||||
@@ -94,20 +94,20 @@ impl InfoBarBuilder {
|
|||||||
|
|
||||||
info_bar_box.append(&info_bar_label);
|
info_bar_box.append(&info_bar_label);
|
||||||
info_bar_box.append(&info_bar_close_btn);
|
info_bar_box.append(&info_bar_close_btn);
|
||||||
info_bar_box.set_widget_name("info_bar");
|
|
||||||
|
|
||||||
let info_bar: &Revealer = &INFO_BAR_INSTANCE.instance;
|
let info_bar: &Revealer = &INFO_BAR_INSTANCE.instance;
|
||||||
|
|
||||||
info_bar.set_transition_type(RevealerTransitionType::SlideUp);
|
info_bar.set_transition_type(RevealerTransitionType::SlideUp);
|
||||||
info_bar.set_transition_duration(200);
|
info_bar.set_transition_duration(200);
|
||||||
|
|
||||||
info_bar.set_child(Some(&info_bar_box));
|
info_bar.set_child(Some(&info_bar_box));
|
||||||
|
info_bar.set_widget_name("infobar");
|
||||||
|
info_bar.set_css_classes(&[".warning"]);
|
||||||
|
|
||||||
let info_bar_to_close = info_bar.clone();
|
info_bar_close_btn.connect_clicked(clone!(
|
||||||
|
#[strong]
|
||||||
info_bar_close_btn.connect_clicked(move |_| {
|
info_bar,
|
||||||
info_bar_to_close.set_reveal_child(false);
|
move |_| info_bar.set_reveal_child(false)
|
||||||
});
|
));
|
||||||
|
|
||||||
&INFO_BAR_INSTANCE
|
&INFO_BAR_INSTANCE
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use crate::{model::builder_traits::*, view::properties::*};
|
use crate::{model::builder_traits::*, view::properties::*};
|
||||||
use gtk::{prelude::*, *};
|
use gtk::{prelude::*, *};
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
use std::fmt::{Debug, Display};
|
use std::fmt::{Debug, Display};
|
||||||
|
|
||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use gio::{
|
use gio::{
|
||||||
glib::Variant, prelude::ActionMapExtManual, ActionEntry, Menu, SimpleAction, SimpleActionGroup,
|
glib::Variant, prelude::ActionMapExtManual, ActionEntry, Menu, SimpleAction, SimpleActionGroup,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
use gtk4::{self as gtk, prelude::WidgetExt};
|
|
||||||
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
use gtk::{
|
use gtk::{
|
||||||
prelude::{BoxExt, IsA},
|
prelude::{BoxExt, IsA, WidgetExt},
|
||||||
Box, Orientation, Stack, StackSidebar, StackSwitcher, StackTransitionType, Widget,
|
Box, Orientation, Stack, StackSidebar, StackSwitcher, StackTransitionType, Widget,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use super::builder_traits::*;
|
use super::builder_traits::*;
|
||||||
use gtk::{Box, Label, Notebook};
|
use gtk::{Box, Label, Notebook};
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
model::builder_traits::Product,
|
model::builder_traits::Product,
|
||||||
view::{
|
view::{
|
||||||
|
|||||||
@@ -19,8 +19,6 @@ use gtk::{
|
|||||||
Align, *,
|
Align, *,
|
||||||
};
|
};
|
||||||
|
|
||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
pub fn signal_reducing_page(wrapper: &Box) {
|
pub fn signal_reducing_page(wrapper: &Box) {
|
||||||
let values = Rc::new(Cell::new(SignalReduce::default()));
|
let values = Rc::new(Cell::new(SignalReduce::default()));
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use gtk::builders::*;
|
use gtk::builders::*;
|
||||||
use gtk::Align;
|
use gtk::Align;
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,11 @@
|
|||||||
|
|
||||||
В данной лабораторной работе используется код Хэмминга 7-4, другими словами, код, который нужно закодировать, имеет длину в 4 бита, в то же время выходной код будет иметь 7 бит.
|
В данной лабораторной работе используется код Хэмминга 7-4, другими словами, код, который нужно закодировать, имеет длину в 4 бита, в то же время выходной код будет иметь 7 бит.
|
||||||
|
|
||||||
Программа умеет как закодировать ключевые слова, так и их проверять.
|
Программа умеет как кодировать ключевые слова, так и проверять их.
|
||||||
|
|
||||||
<b> Режим кодирования </b>
|
<b> Режим кодирования </b>
|
||||||
|
|
||||||
В этом режиме мы вводим код, в котором каждое "слово" имеет 4 бита. Это должно выглядеть следующим образом:
|
В этом режиме мы вводим код, в котором каждое "слово" имеет 4 бита. Это может выглядеть следующим образом:
|
||||||
|
|
||||||
<tt>1010 1100 1110 0000</tt>
|
<tt>1010 1100 1110 0000</tt>
|
||||||
|
|
||||||
@@ -15,13 +15,13 @@
|
|||||||
|
|
||||||
<tt>1100110 0111100 0101010 0000000</tt>
|
<tt>1100110 0111100 0101010 0000000</tt>
|
||||||
|
|
||||||
В противном случае вылезет информационный блок с предупреждением: "Проверьте корректность кода".
|
В противном случае появится информационный блок с предупреждением: "Проверьте корректность кода".
|
||||||
|
|
||||||
<b> Режим проверки </b>
|
<b> Режим проверки </b>
|
||||||
|
|
||||||
Данный режим проверяет код на ошибки. Проверка в лучшем случае пишет: "Все коды корректны", в противном случае, построчно показывает, в каких кодах есть ошибка.
|
Данный режим проверяет код на ошибки. Проверка в лучшем случае пишет: "Все коды корректны". При ошибочно введённом коде, программа построчно отобразит в каких кодах есть ошибка.
|
||||||
|
|
||||||
Пример ввода возьмём из предыдущего примера:
|
Пример ввода аналогичен предыдущему:
|
||||||
|
|
||||||
<tt>1100110 0111100 0101010 0000000</tt>
|
<tt>1100110 0111100 0101010 0000000</tt>
|
||||||
|
|
||||||
@@ -44,8 +44,8 @@
|
|||||||
<span size="x-large"><b> Затухание сигнала </b></span>
|
<span size="x-large"><b> Затухание сигнала </b></span>
|
||||||
|
|
||||||
|
|
||||||
Лабораторная работа подразумевает рассчитать для 19 значений частоты реактивное сопротивление конденсатора X<sub>c</sub>, напряжения сигнала на стороне приёмника информации V<sub>п</sub> и коэффициент затухания сигнала ζ.
|
Лабораторная работа подразумевает рассчитать для каждого из девятнадцати значений частоты реактивного сопротивление конденсатора X<sub>c</sub>, напряжение сигнала на стороне приёмника информации V<sub>п</sub> и коэффициент затухания сигнала ζ.
|
||||||
|
|
||||||
Значения вводятся согласно исходным данным для расчёта затухания сигнала. Значения можно вводить как с ",", так и ".".
|
Значения вводятся согласно исходным данным для расчёта затухания сигнала. Значения можно вводить как с ",", так и с ".".
|
||||||
|
|
||||||
При вводе одних и тех же данных без изменений будет вылезать предупреждение и операция расчёта не будет выполнена. Можно не менять данные в случае частоты, чтобы обновить данные расчёта в соответствии с новыми (К примеру, в случае длины провода, или сопротивления провода).
|
При вводе одних и тех же данных без изменений, будет показано предупреждение и операция расчёта не будет выполнена. Можно не менять данные в случае частоты, чтобы обновить данные расчёта в соответствии с новыми (К примеру, в случае длины провода, или сопротивления провода).
|
||||||
|
|||||||
BIN
src/view/resources/icon.ico
Normal file
BIN
src/view/resources/icon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 166 KiB |
BIN
src/view/resources/icon.png
Normal file
BIN
src/view/resources/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1023 B |
@@ -1,22 +1,10 @@
|
|||||||
#info_bar{
|
label{
|
||||||
background-color:#F1E6D9;
|
|
||||||
padding: 5px;
|
|
||||||
font-size: 11pt;
|
font-size: 11pt;
|
||||||
}
|
}
|
||||||
#info_bar > button {
|
|
||||||
transform: scale(0.9);
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
#info_bar > button:hover {
|
|
||||||
background-color: #00000010;
|
|
||||||
}
|
|
||||||
#info_bar > button:active {
|
|
||||||
background-color: #00000020;
|
|
||||||
}
|
|
||||||
textview {
|
textview {
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
padding: 7px 8px;
|
padding: 7px 8px;
|
||||||
background: #E6E6E6;
|
background: rgba(90, 90, 90, 0.5);
|
||||||
outline-offset: 2px;
|
outline-offset: 2px;
|
||||||
outline: 2px solid #81ABDF00;
|
outline: 2px solid #81ABDF00;
|
||||||
transition-duration: .15s;
|
transition-duration: .15s;
|
||||||
@@ -26,3 +14,9 @@ textview:focus-within {
|
|||||||
outline-offset: -2px;
|
outline-offset: -2px;
|
||||||
outline: 2px solid #81ABDF;
|
outline: 2px solid #81ABDF;
|
||||||
}
|
}
|
||||||
|
revealer#infobar > box {
|
||||||
|
padding: 8px;
|
||||||
|
border-spacing: 12px;
|
||||||
|
border-bottom: 1px solid lighten(darken(#f6f5f4, 10%), 5%);
|
||||||
|
background-color: #4a351b;
|
||||||
|
}
|
||||||
22
src/view/styles/base_light.css
Normal file
22
src/view/styles/base_light.css
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
label{
|
||||||
|
font-size: 11pt;
|
||||||
|
}
|
||||||
|
textview {
|
||||||
|
border-radius: 7px;
|
||||||
|
padding: 7px 8px;
|
||||||
|
background: rgba(141, 141, 141, 0.18);
|
||||||
|
outline-offset: 2px;
|
||||||
|
outline: 2px solid #81ABDF00;
|
||||||
|
transition-duration: .15s;
|
||||||
|
transition-timing-function: ease-in-out;
|
||||||
|
}
|
||||||
|
textview:focus-within {
|
||||||
|
outline-offset: -2px;
|
||||||
|
outline: 2px solid #81ABDF;
|
||||||
|
}
|
||||||
|
revealer#infobar > box {
|
||||||
|
padding: 8px;
|
||||||
|
border-spacing: 12px;
|
||||||
|
border-bottom: 1px solid lighten(darken(#f6f5f4, 18%), 5%);
|
||||||
|
background-color: #f1e6d9;
|
||||||
|
}
|
||||||
@@ -1,14 +1,25 @@
|
|||||||
use adw::gdk::Display;
|
use adw::gdk::Display;
|
||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use gtk::{
|
use gtk::{
|
||||||
style_context_add_provider_for_display, CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION,
|
style_context_add_provider_for_display, CssProvider, STYLE_PROVIDER_PRIORITY_APPLICATION, Settings
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn load_css() {
|
pub fn load_css(settings: &Settings) {
|
||||||
let style_provider = CssProvider::new();
|
let style_provider = CssProvider::new();
|
||||||
|
|
||||||
style_provider.load_from_string(include_str!("base.css"));
|
let theme = settings.gtk_theme_name();
|
||||||
|
|
||||||
|
match theme {
|
||||||
|
Some(theme_type) => {
|
||||||
|
let theme_string = theme_type.to_string();
|
||||||
|
if theme_string.contains("dark") || settings.is_gtk_application_prefer_dark_theme() {
|
||||||
|
style_provider.load_from_string(include_str!("base_dark.css"));
|
||||||
|
} else {
|
||||||
|
style_provider.load_from_string(include_str!("base_light.css"));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
None => eprintln!("Theme hasn't been determined."),
|
||||||
|
}
|
||||||
|
|
||||||
style_context_add_provider_for_display(
|
style_context_add_provider_for_display(
|
||||||
&Display::default().expect("Could not connect to a display"),
|
&Display::default().expect("Could not connect to a display"),
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
use crate::model::builder_traits::*;
|
use crate::model::builder_traits::*;
|
||||||
|
|
||||||
use adw::HeaderBar;
|
use adw::HeaderBar;
|
||||||
use gtk4 as gtk;
|
|
||||||
|
|
||||||
use gtk::{prelude::*, StackTransitionType::SlideLeftRight, *};
|
use gtk::{prelude::*, StackTransitionType::SlideLeftRight, *};
|
||||||
|
|
||||||
@@ -19,7 +18,18 @@ use crate::view::{
|
|||||||
use super::{components::MenuActions, styles::load_css};
|
use super::{components::MenuActions, styles::load_css};
|
||||||
|
|
||||||
pub fn ui(application: &adw::Application) {
|
pub fn ui(application: &adw::Application) {
|
||||||
load_css();
|
|
||||||
|
let default_settings = Settings::default();
|
||||||
|
|
||||||
|
if let Some(settings) = default_settings {
|
||||||
|
{
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
settings.set_gtk_font_name(Some("Segoe UI 9"));
|
||||||
|
}
|
||||||
|
settings.connect_gtk_application_prefer_dark_theme_notify(load_css);
|
||||||
|
settings.connect_gtk_theme_name_notify(load_css);
|
||||||
|
load_css(&settings);
|
||||||
|
}
|
||||||
|
|
||||||
let hamming_code = Box::builder()
|
let hamming_code = Box::builder()
|
||||||
.orientation(Orientation::Vertical)
|
.orientation(Orientation::Vertical)
|
||||||
@@ -30,7 +40,7 @@ pub fn ui(application: &adw::Application) {
|
|||||||
|
|
||||||
let info_bar = InfoBar::builder()
|
let info_bar = InfoBar::builder()
|
||||||
.set_text_label("Sample text")
|
.set_text_label("Sample text")
|
||||||
.set_button_icon("close")
|
.set_button_icon("window-close-symbolic")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
hamming_code::hamming_code_page(&hamming_code);
|
hamming_code::hamming_code_page(&hamming_code);
|
||||||
@@ -76,7 +86,7 @@ pub fn ui(application: &adw::Application) {
|
|||||||
.hexpand(true)
|
.hexpand(true)
|
||||||
.vexpand(true)
|
.vexpand(true)
|
||||||
.use_markup(true)
|
.use_markup(true)
|
||||||
.label("<b>Комплексная программа для лаб. работ</b>")
|
.label("<span size=\"larger\"><b>Комплексная программа для лаб. работ</b></span>")
|
||||||
.build(),
|
.build(),
|
||||||
);
|
);
|
||||||
title_bar.append(menu_button.get_button());
|
title_bar.append(menu_button.get_button());
|
||||||
|
|||||||
Reference in New Issue
Block a user