From 956816acaa08d32f39ce1242e1da3763f417b2e2 Mon Sep 17 00:00:00 2001 From: Sergio Costas Date: Mon, 4 Aug 2014 17:18:56 +0200 Subject: [PATCH] Added ABOUT window --- data/interface/wabout.ui | 41 +++++++++++++++++++++++++++++++ data/interface/wmain.ui | 1 + data/pixmaps/devede.png | Bin 0 -> 10402 bytes src/devede/about.py | 38 ++++++++++++++++++++++++++++ src/devede/configuration_data.py | 1 + src/devede/mplayer_detector.py | 2 +- src/devede/project.py | 7 +++++- 7 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 data/interface/wabout.ui create mode 100644 data/pixmaps/devede.png create mode 100644 src/devede/about.py diff --git a/data/interface/wabout.ui b/data/interface/wabout.ui new file mode 100644 index 0000000..96f8df9 --- /dev/null +++ b/data/interface/wabout.ui @@ -0,0 +1,41 @@ + + + + + + False + False + True + center + dialog + False + Devede NG + 2014 Raster Software Vigo + Sergio Costas Rodríguez + devede.png + + gpl-3-0 + + + False + vertical + 2 + + + False + end + + + False + True + end + 0 + + + + + + + + + diff --git a/data/interface/wmain.ui b/data/interface/wmain.ui index 3625d7a..8643c35 100644 --- a/data/interface/wmain.ui +++ b/data/interface/wmain.ui @@ -159,6 +159,7 @@ False True True + diff --git a/data/pixmaps/devede.png b/data/pixmaps/devede.png new file mode 100644 index 0000000000000000000000000000000000000000..098fca16f207c17a4304f3836c117252d5feb13c GIT binary patch literal 10402 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 M07*qoM6N<$f_%bu&j0`b literal 0 HcmV?d00001 diff --git a/src/devede/about.py b/src/devede/about.py new file mode 100644 index 0000000..188b4af --- /dev/null +++ b/src/devede/about.py @@ -0,0 +1,38 @@ +# Copyright 2014 (C) Raster Software Vigo (Sergio Costas) +# +# This file is part of DeVeDe-NG +# +# DeVeDe-NG is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# DeVeDe-NG is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see + +from gi.repository import Gtk +import os +import devede.configuration_data + +class about_window: + + def __init__(self): + + self.config = devede.configuration_data.configuration.get_config() + + builder = Gtk.Builder() + builder.set_translation_domain(self.config.gettext_domain) + + builder.add_from_file(os.path.join(self.config.glade,"wabout.ui")) + builder.connect_signals(self) + w_window = builder.get_object("about_devedeng") + w_window.set_version(self.config.version) + + w_window.show_all() + w_window.run() + w_window.destroy() diff --git a/src/devede/configuration_data.py b/src/devede/configuration_data.py index ad47705..3d2b83c 100644 --- a/src/devede/configuration_data.py +++ b/src/devede/configuration_data.py @@ -35,6 +35,7 @@ class configuration(GObject.GObject): def __init__(self): GObject.GObject.__init__(self) + self.version = "0.1 Alpha 1" def fill_config(self): diff --git a/src/devede/mplayer_detector.py b/src/devede/mplayer_detector.py index 221def2..5ba43fb 100644 --- a/src/devede/mplayer_detector.py +++ b/src/devede/mplayer_detector.py @@ -77,7 +77,7 @@ class mplayer_detector(devede.executor.executor): if (check_audio): frames = "0" else: - frames = "1" + frames = "5" command_line = ["mplayer","-loop","1","-identify", "-vo", "null", "-ao", "null", "-frames", frames , file_name] diff --git a/src/devede/project.py b/src/devede/project.py index 5a765a8..85a3a4c 100644 --- a/src/devede/project.py +++ b/src/devede/project.py @@ -33,6 +33,7 @@ import devede.mkisofs import devede.end_job import devede.vcdimager_converter import devede.shutdown +import devede.about class devede_project: @@ -479,4 +480,8 @@ class devede_project: def on_settings_activate(self,b): - w = devede.settings.settings_window() \ No newline at end of file + w = devede.settings.settings_window() + + def on_about_activate(self,b): + + w = devede.about.about_window() \ No newline at end of file