From 73f278bec474bd79406c86ecac2afe0473f3ff2b Mon Sep 17 00:00:00 2001 From: Benedito Lobo Date: Sun, 1 Feb 2026 16:44:59 -0300 Subject: [PATCH] inicinado --- README.md | 67 +++++++++++++++++++++++++ benedito-globo | Bin 0 -> 27800 bytes benedito-globo.desktop | 11 +++++ compile.sh | 23 +++++++++ install-deps.sh | 52 ++++++++++++++++++++ webview-app.vala | 109 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 262 insertions(+) create mode 100644 README.md create mode 100755 benedito-globo create mode 100755 benedito-globo.desktop create mode 100755 compile.sh create mode 100755 install-deps.sh create mode 100644 webview-app.vala diff --git a/README.md b/README.md new file mode 100644 index 0000000..a001c5d --- /dev/null +++ b/README.md @@ -0,0 +1,67 @@ +# Benedito Globo WebView App + +Um aplicativo WebView simples criado em Vala que carrega o site https://beneditoglobo.com.br + +## Recursos + +- 🌐 Navegador web completo com WebKit +- ⬅️ ➡️ Botões de navegação (voltar/avançar) +- 🔄 Botão de recarregar página +- 📝 Barra de endereço editável +- 🪟 Janela de 1200x800 pixels + +## Dependências + +Para compilar e executar este aplicativo, você precisa instalar as seguintes dependências: + +### Ubuntu/Debian +```bash +sudo apt-get update +sudo apt-get install valac libgtk-3-dev libwebkit2gtk-4.1-dev +``` + +### Fedora +```bash +sudo dnf install vala gtk3-devel webkit2gtk3-devel +``` + +### Arch Linux +```bash +sudo pacman -S vala gtk3 webkit2gtk +``` + +## Compilação + +Para compilar o aplicativo, execute: + +```bash +valac --pkg gtk+-3.0 --pkg webkit2gtk-4.1 webview-app.vala -o benedito-globo +``` + +## Execução + +Após compilar, execute o aplicativo: + +```bash +./benedito-globo +``` + +## Como usar + +1. O aplicativo abre automaticamente com o site https://beneditoglobo.com.br carregado +2. Use os botões de navegação para voltar/avançar no histórico +3. Clique no botão de recarregar para atualizar a página +4. Digite uma nova URL na barra de endereço e pressione Enter ou clique em "Ir" + +## Estrutura do Código + +- **BeneditoGloboApp**: Classe principal que herda de `Gtk.Window` +- **webview**: Componente WebKit.WebView para renderizar páginas web +- **toolbar**: Barra de ferramentas com controles de navegação +- **load_url()**: Método para carregar URLs (adiciona https:// automaticamente se necessário) + +## Tecnologias Utilizadas + +- **Vala**: Linguagem de programação orientada a objetos +- **GTK+ 3**: Toolkit para interface gráfica +- **WebKit2GTK**: Engine de renderização web diff --git a/benedito-globo b/benedito-globo new file mode 100755 index 0000000000000000000000000000000000000000..b2cd7db9a6c2c889e9eb59aa4e90caf2010541c3 GIT binary patch literal 27800 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 /dev/null; then + echo "❌ Erro: valac não está instalado" + echo "Execute: sudo apt-get install valac libgtk-3-dev libwebkit2gtk-4.1-dev" + exit 1 +fi + +# Compilar o aplicativo +valac --pkg gtk+-3.0 --pkg webkit2gtk-4.1 webview-app.vala -o benedito-globo + +if [ $? -eq 0 ]; then + echo "✅ Compilação concluída com sucesso!" + echo "Execute o aplicativo com: ./benedito-globo" +else + echo "❌ Erro na compilação" + exit 1 +fi diff --git a/install-deps.sh b/install-deps.sh new file mode 100755 index 0000000..49fe34f --- /dev/null +++ b/install-deps.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Script de instalação de dependências para o Benedito Globo WebView App + +echo "📦 Instalando dependências necessárias..." +echo "" + +# Detectar distribuição Linux +if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$ID +else + echo "❌ Não foi possível detectar a distribuição Linux" + exit 1 +fi + +case $OS in + ubuntu|debian|linuxmint|pop) + echo "🐧 Detectado: $OS" + echo "Instalando: valac, libgtk-3-dev, libwebkit2gtk-4.1-dev" + sudo apt-get update + sudo apt-get install -y valac libgtk-3-dev libwebkit2gtk-4.1-dev + ;; + fedora|rhel|centos) + echo "🎩 Detectado: $OS" + echo "Instalando: vala, gtk3-devel, webkit2gtk3-devel" + sudo dnf install -y vala gtk3-devel webkit2gtk3-devel + ;; + arch|manjaro) + echo "🏔️ Detectado: $OS" + echo "Instalando: vala, gtk3, webkit2gtk" + sudo pacman -S --noconfirm vala gtk3 webkit2gtk + ;; + *) + echo "⚠️ Distribuição não reconhecida: $OS" + echo "Por favor, instale manualmente:" + echo " - valac (compilador Vala)" + echo " - GTK+ 3 development files" + echo " - WebKit2GTK development files" + exit 1 + ;; +esac + +if [ $? -eq 0 ]; then + echo "" + echo "✅ Dependências instaladas com sucesso!" + echo "Agora você pode compilar o aplicativo com: ./compile.sh" +else + echo "" + echo "❌ Erro ao instalar dependências" + exit 1 +fi diff --git a/webview-app.vala b/webview-app.vala new file mode 100644 index 0000000..bc8ee27 --- /dev/null +++ b/webview-app.vala @@ -0,0 +1,109 @@ +using Gtk; +using WebKit; + +public class BeneditoGloboApp : Gtk.Window { + private WebKit.WebView webview; + private Gtk.Entry url_entry; + private Gtk.Button back_button; + private Gtk.Button forward_button; + private Gtk.Button reload_button; + + public BeneditoGloboApp() { + this.title = "Benedito G lobo"; + this.set_default_size(1200, 800); + this.window_position = WindowPosition.CENTER; + this.destroy.connect(Gtk.main_quit); + + // Create main vertical box + var vbox = new Gtk.Box(Gtk.Orientation.VERTICAL, 0); + + // Create toolbar + var toolbar = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5); + toolbar.margin = 5; + + // Navigation buttons + back_button = new Gtk.Button.from_icon_name("go-previous", Gtk.IconSize.BUTTON); + back_button.clicked.connect(() => { + webview.go_back(); + }); + + forward_button = new Gtk.Button.from_icon_name("go-next", Gtk.IconSize.BUTTON); + forward_button.clicked.connect(() => { + webview.go_forward(); + }); + + reload_button = new Gtk.Button.from_icon_name("view-refresh", Gtk.IconSize.BUTTON); + reload_button.clicked.connect(() => { + webview.reload(); + }); + + // URL entry + url_entry = new Gtk.Entry(); + url_entry.set_text("https://beneditoglobo.com.br"); + url_entry.activate.connect(() => { + load_url(url_entry.get_text()); + }); + + // Go button + var go_button = new Gtk.Button.with_label("Ir"); + go_button.clicked.connect(() => { + load_url(url_entry.get_text()); + }); + + // Add widgets to toolbar + toolbar.pack_start(back_button, false, false, 0); + toolbar.pack_start(forward_button, false, false, 0); + toolbar.pack_start(reload_button, false, false, 0); + toolbar.pack_start(url_entry, true, true, 0); + toolbar.pack_start(go_button, false, false, 0); + + // Create WebView + webview = new WebKit.WebView(); + + // Update URL entry when page loads + webview.load_changed.connect((load_event) => { + if (load_event == WebKit.LoadEvent.COMMITTED) { + url_entry.set_text(webview.get_uri()); + } + + // Update button sensitivity + back_button.sensitive = webview.can_go_back(); + forward_button.sensitive = webview.can_go_forward(); + }); + + // Create scrolled window for webview + var scrolled = new Gtk.ScrolledWindow(null, null); + scrolled.add(webview); + + // Add widgets to main box + vbox.pack_start(toolbar, false, false, 0); + vbox.pack_start(scrolled, true, true, 0); + + this.add(vbox); + + // Load initial URL + load_url("https://beneditoglobo.com.br"); + } + + private void load_url(string url) { + string final_url = url; + + // Add https:// if no protocol is specified + if (!url.has_prefix("http://") && !url.has_prefix("https://")) { + final_url = "https://" + url; + } + + webview.load_uri(final_url); + } + + public static int main(string[] args) { + Gtk.init(ref args); + + var app = new BeneditoGloboApp(); + app.show_all(); + + Gtk.main(); + + return 0; + } +}