diff options
Diffstat (limited to 'evaluate.py')
-rwxr-xr-x | evaluate.py | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/evaluate.py b/evaluate.py new file mode 100755 index 0000000..a8bb7e5 --- /dev/null +++ b/evaluate.py @@ -0,0 +1,214 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright (C) 2012 S. Daniel Francis <francis@sugarlabs.org> +# +# This program 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. +# +# This program 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, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. + +import os +import logging +logging.basicConfig(level=logging.DEBUG) +from gettext import gettext as _ +import glib +import info +logger = logging.getLogger(info.lower_name) + +appname = info.name +# Some desktops like Gnome3-Shell show the Glib Prgname +glib.set_prgname(appname) +import gtk + +try: + from sweetener.basic_options import DOCUMENT +except ImportError: + import sys + sys.path.append(os.path.abspath('./desktop')) + from sweetener.basic_options import DOCUMENT + +os.environ['DATA_DIR'] = os.path.abspath('./data') + +from toolbars import Options +from canvas import Canvas + +icon_theme = gtk.icon_theme_get_default() +icon_theme.append_search_path(os.path.abspath('./desktop/icons')) + + +class UnfullscreenButton(gtk.Window): + + def __init__(self): + gtk.Window.__init__(self) + + self.set_decorated(False) + self.set_resizable(False) + self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + + self.set_border_width(0) + + self.props.accept_focus = False + + #Setup estimate of width, height + w, h = gtk.icon_size_lookup(gtk.ICON_SIZE_LARGE_TOOLBAR) + self._width = w + self._height = h + + self.connect('size-request', self._size_request_cb) + + screen = self.get_screen() + screen.connect('size-changed', self._screen_size_changed_cb) + + self._button = gtk.Button(stock=gtk.STOCK_LEAVE_FULLSCREEN) + self._button.set_relief(gtk.RELIEF_NONE) + self._button.show() + self.add(self._button) + + def connect_button_press(self, cb): + self._button.connect('button-press-event', cb) + + def _reposition(self): + x = gtk.gdk.screen_width() - self._width + self.move(x, 0) + + def _size_request_cb(self, widget, req): + self._width = req.width + self._height = req.height + self._reposition() + + def _screen_size_changed_cb(self, screen): + self._reposition() + + +class Application(gtk.Window): + def __init__(self): + gtk.Window.__init__(self) + self.save_type = None + self.file_path = None + self.accel_group = gtk.AccelGroup() + self.add_accel_group(self.accel_group) + self.set_title(appname) +# self.set_icon_name('application-icon') + self.connect('delete-event', lambda w, e: self.stop()) + self.maximize() + self._vbox = gtk.VBox() + self.options = Options(self) + self.options.show() + self._vbox.pack_start(self.options, False, True, 0) + self.canvas = Canvas(self.options, self) + self.canvas.show() + self._vbox.pack_start(self.canvas, True, True, 0) + self.add(self._vbox) + self._vbox.show() + + self._is_fullscreen = False + self._unfullscreen_button = UnfullscreenButton() + self._unfullscreen_button.set_transient_for(self) + self._unfullscreen_button.connect_button_press( + lambda w, e: self.unfullscreen()) + self.connect('motion-notify-event', self.motion_cb) + + def motion_cb(self, widget, event): + if self._is_fullscreen: + x, y, state = self.get_window().get_pointer() + width, height = self.get_size() + button_width, button_height = self._unfullscreen_button.get_size() + if x >= width - button_width or y <= button_height: + self._unfullscreen_button.show() + else: + self._unfullscreen_button.hide() + + def fullscreen(self): + self.options.hide() + + self._is_fullscreen = True + + self._unfullscreen_button.show() + gtk.Window.fullscreen(self) + + def unfullscreen(self): + self.options.show() + self._is_fullscreen = False + + self._unfullscreen_button.hide() + gtk.Window.unfullscreen(self) + + def export(self, widget, data): + format_name = data[3] + filter_mime = data[2] + mime_type = data[1] + # TRANS: This string could be already translated at hello-integration, if not, please translate there, not only here. + filechooser = gtk.FileChooserDialog(_("Export..."), self, + gtk.FILE_CHOOSER_ACTION_SAVE, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OK, gtk.RESPONSE_OK)) + file_filter = gtk.FileFilter() + file_filter.set_name(format_name) + file_filter.add_mime_type(filter_mime) + filechooser.add_filter(file_filter) + filechooser.run() + file_path = filechooser.get_filename() + filechooser.destroy() + self.canvas.exports[mime_type](file_path) + + def new(self): + self.file_path = None + self.canvas.new() + self.set_title(appname) + + def stop(self): + gtk.main_quit() + + def open(self): + # TRANS: This string could be already translated at hello-integration, if not, please translate there, not only here. + filechooser = gtk.FileChooserDialog(_('Open...'), self, + gtk.FILE_CHOOSER_ACTION_OPEN, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OPEN, gtk.RESPONSE_OK)) + filechooser.add_filter(self.filter) + response = filechooser.run() + self.file_path = filechooser.get_filename() + filechooser.destroy() + if response == gtk.RESPONSE_OK: + logger.debug('Read file %s' % self.file_path) + self.canvas.read_file(self.file_path) + self.set_title('%s - %s' % (self.file_path, appname)) + + def save(self): + if self.file_path == None: + self.save_as() + else: + logger.debug('Write file %s' % self.file_path) + self.canvas.write_file(self.file_path) + + def save_as(self): + # TRANS: This string could be already translated at hello-integration, if not, please translate there, not only here. + filechooser = gtk.FileChooserDialog(_('Save...'), self, + gtk.FILE_CHOOSER_ACTION_SAVE, + (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, + gtk.STOCK_OK, gtk.RESPONSE_OK)) + filechooser.add_filter(self.filter) + response = filechooser.run() + self.file_path = filechooser.get_filename() + filechooser.destroy() + if response == gtk.RESPONSE_OK: + logger.debug('Save file as %s' % self.file_path) + self.canvas.write_file(self.file_path) + self.set_title('%s - %s' % (self.file_path, appname)) + +if __name__ == '__main__': + window = Application() + window.show() + gtk.main() + exit() |