Commit cea1ccce authored by nextime's avatar nextime

add old svn trunk files

parent de40190a
This diff is collapsed.
#!/bin/bash
find . -name '*~' -exec rm {} \;
find . -name '*.pyc' -exec rm {} \;
skyliveng (NOT RELEASED YET) unstable; urgency=low
* Non-maintainer upload.
-- (Medianix Devel) <devel@unixmedia.it> Sun, 07 Jun 2009 01:24:18 +0200
skyliveng (0.1.5-1) unstable; urgency=low
* New Release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Tue, 26 May 2009 17:14:33 +0200
skyliveng (0.1.3-1) unstable; urgency=low
* New release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Thu, 12 Feb 2009 14:48:51 +0100
skyliveng (0.1.2-2) unstable; urgency=low
* New release.
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Thu, 29 Jan 2009 15:15:37 +0100
skyliveng (0.1.2-1) unstable; urgency=low
* New release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Thu, 11 Dec 2008 21:03:38 +0100
skyliveng (0.1-7) unstable; urgency=low
* Renumbering version
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Sun, 29 Jun 2008 18:14:25 +0200
skyliveng (0.1rc6-1) unstable; urgency=low
* new Release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Sun, 29 Jun 2008 18:11:49 +0200
skyliveng (0.1rc5-3) unstable; urgency=low
* Menus!
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Sun, 29 Jun 2008 18:02:59 +0200
skyliveng (0.1rc5-2) unstable; urgency=low
* Bugfix
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Sun, 29 Jun 2008 17:16:58 +0200
skyliveng (0.1RC5-1) unstable; urgency=low
* New upstream release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Sun, 29 Jun 2008 17:06:33 +0200
skyliveng (0.1b-1) unstable; urgency=low
* New upstream release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Mon, 18 Feb 2008 02:00:23 +0100
skyliveng (0.1-6) unstable; urgency=low
* Added python-imaging dependency
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Tue, 18 Dec 2007 15:07:44 +0100
skyliveng (0.1-5) unstable; urgency=low
* Nocomment.
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Mon, 17 Dec 2007 22:48:50 +0100
skyliveng (0.1-4) unstable; urgency=low
* I hope this is the latest bug
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Mon, 17 Dec 2007 22:40:51 +0100
skyliveng (0.1-3) unstable; urgency=low
* Another one
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Mon, 17 Dec 2007 22:34:28 +0100
skyliveng (0.1-2) unstable; urgency=low
* Fix dependency bug
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Mon, 17 Dec 2007 22:26:52 +0100
skyliveng (0.1-1) unstable; urgency=low
* Initial release
-- Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it> Mon, 17 Dec 2007 22:04:32 +0100
Source: skyliveng
Section: astronomy
Priority: extra
Maintainer: Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2
Package: skyliveng
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}, python, python-wxgtk2.6|python-wxgtk2.8, python-crypto, python-pycard, python-pyfits, python-imaging, python-numpy, python-twisted, python-openssl|python-pyopenssl, python-lxml, python-gst0.10, gstreamer0.10-fluendo-mp3, liboggz1, libgnomevfs2-extra
Suggests: python-psyco
Description: Skylive client (www.skylive.it)
Skylive project client to administer remote telescopes
of skylive (www.skylive.it)
This package was debianized by unknown <Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it>> on
Mon, 17 Dec 2007 22:04:32 +0100.
It was downloaded from http://www.astronomix.org/trac/wiki/SkyliveNG
Upstream Author(s):
Franco Lanza <nextime@nexlab.it>
Sandro Aliano <ita595@hotmail.com>
Copyright:
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
License:
GPLv3: read the file /usr/share/doc/skyliveng/LICENSE.txt
The Debian packaging is (C) 2007, unknown <Unixmedia S.r.l. (Medianix Devel) <devel@unixmedia.it>> and
is licensed under the GPL, see `/usr/share/common-licenses/GPL'.
# Please also look if there are files or directories which have a
# different copyright/license attached and list them here.
usr/bin
usr/share
usr/share/applications
src/LICENSE.txt
src/README.txt
#!/usr/bin/make -f
# -*- makefile -*-
# Sample debian/rules that uses debhelper.
# This file was originally written by Joey Hess and Craig Small.
# As a special exception, when this file is copied by dh-make into a
# dh-make output file, you may use that output file without restriction.
# This special exception was added by Craig Small in version 0.37 of dh-make.
# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1
configure: configure-stamp
configure-stamp:
dh_testdir
# Add here commands to configure the package.
touch configure-stamp
build: build-stamp
build-stamp: configure-stamp
dh_testdir
# Add here commands to compile the package.
#$(MAKE)
#docbook-to-man debian/skyliveng.sgml > skyliveng.1
touch $@
clean:
dh_testdir
dh_testroot
rm -f build-stamp configure-stamp
# Add here commands to clean up after the build process.
#-$(MAKE) clean
dh_clean
install: build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian/skyliveng.
#$(MAKE) DESTDIR=$(CURDIR)/debian/skyliveng install
mkdir -p $(CURDIR)/debian/skyliveng/usr/share/skylive
cp -ap $(CURDIR)/src/appcomponents $(CURDIR)/src/gui $(CURDIR)/src/ICONA.ico \
$(CURDIR)/src/proxyconf.py $(CURDIR)/src/skylive-ng.py $(CURDIR)/src/fitsopener.py \
$(CURDIR)/debian/skyliveng/usr/share/skylive/
cp -ap $(CURDIR)/src/gui $(CURDIR)/src/skylive \
$(CURDIR)/debian/skyliveng/usr/share/skylive/
cp -ap $(CURDIR)/debian/skylive.sh $(CURDIR)/debian/skyliveng/usr/bin/skylive
chmod +x $(CURDIR)/debian/skyliveng/usr/bin/skylive
cp -ap $(CURDIR)/src/skyliveng.desktop $(CURDIR)/debian/skyliveng/usr/share/applications
# Build architecture-independent files here.
binary-indep: build install
# We have nothing to do by default.
# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
dh_installchangelogs
dh_installdocs
dh_installexamples
# dh_install
dh_installmenu
dh_desktop
# dh_installdebconf
# dh_installlogrotate
# dh_installemacsen
# dh_installpam
# dh_installmime
# dh_python
# dh_installinit
# dh_installcron
# dh_installinfo
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
# dh_perl
# dh_makeshlibs
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure
#!/bin/sh
cd /usr/share/skylive
./skylive-ng.py $@ > /dev/null 2>&1
?package(skyliveng):needs="X11" section="Applications/Science/Astronomy"\
title="SkyLive NG" command="/usr/bin/skylive"
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- Copyright (c) Microsoft Corporation. All rights reserved. -->
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable/>
<assemblyIdentity
type="win32"
name="Microsoft.VC90.CRT"
version="9.0.21022.8"
processorArchitecture="x86"
publicKeyToken="1fc8b3b9a1e18e3b"
/>
<file name="msvcr90.dll" /> <file name="msvcp90.dll" /> <file name="msvcm90.dll" />
</assembly>
____ _ _ _ _ _ ____
/ ___|| | ___ _| (_)_ _____ | \ | |/ ___|
\___ \| |/ / | | | | \ \ / / _ \_____| \| | | _
___) | <| |_| | | |\ V / __/_____| |\ | |_| |
|____/|_|\_\\__, |_|_| \_/ \___| |_| \_|\____|
|___/ Version 0.1.4
--------------------------------------------------
I really shuld write something here...
"""
Copyright (C) 2007 Franco Lanza <nextime@nexlab.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
"""
__version__ = "$Revision:$"
__date__ = "$Date:$"
"""
import wx
from Pycard import event, widget, model
class ContainerSpec( widget.WidgetSpec ) :
def __init__( self ) :
events = [ event.MouseClickEvent ]
attributes = {}
widget.WidgetSpec.__init__( self, 'Container', 'Widget', events, attributes )
class Container( widget.Widget, model.Scriptable, wx.Panel ) :
"""
A container panel for composite components.
"""
_spec = ContainerSpec()
def __init__( self, aParent, aResource ) :
model.Scriptable.__init__( self, aParent )
wx.Panel.__init__(
self, aParent, widget.makeNewId(aResource.id),
aResource.position,
aResource.size,
style = wx.CLIP_SIBLINGS,
name = aResource.name
)
widget.Widget.__init__( self, aParent, aResource )
import sys
from Pycard import registry
registry.Registry.getInstance().register(sys.modules[__name__].Container)
"""
__version__ = "$Revision: 1.24 $"
__date__ = "$Date: 2004/08/11 01:58:03 $"
"""
import wx
from Pycard import event, graphic, widget
USE_GENERIC = wx.Platform == '__WXGTK__' or wx.Platform == '__WXMSW__'
if USE_GENERIC:
from wx.lib.statbmp import GenStaticBitmap as StaticBitmap
else:
StaticBitmap = wx.StaticBitmap
class ImageSpec(widget.WidgetSpec):
def __init__(self):
events = []
attributes = {
'file' : { 'presence' : 'optional', 'default':'' },
# KEA shouldn't there be a 'file' attribute here
# could call it 'image' to match background above
# but it is mandatory
#'bitmap' : { 'presence' : 'optional', 'default' : None },
# KEA kill border for now, until variations of what is possible are worked out
# use ImageButton if you want images with transparent border
#'border' : { 'presence' : 'optional', 'default' : '3d', 'values' : [ '3d', 'transparent', 'none' ] },
'size' : { 'presence' : 'optional', 'default' : [ -1, -1 ] },
}
widget.WidgetSpec.__init__( self, 'Image', 'Widget', events, attributes )
class Image(widget.Widget, StaticBitmap):
"""
A static image.
"""
_spec = ImageSpec()
def __init__(self, aParent, aResource):
self._bitmap = graphic.Bitmap(aResource.file, aResource.size)
self._file = aResource.file
self._size = tuple(aResource.size)
w = aResource.size[0]
if w == -2:
w = self._bitmap.getWidth()
h = aResource.size[1]
if h == -2:
h = self._bitmap.getHeight()
size = (w, h)
#size = wx.Size( self._bitmap.GetWidth(), self._bitmap.GetHeight() )
##if aResource.border == 'transparent':
## mask = wx.MaskColour(self._bitmap, wxBLACK)
## self._bitmap.SetMask(mask)
StaticBitmap.__init__(
self,
aParent,
widget.makeNewId(aResource.id),
self._bitmap.getBits(),
aResource.position,
size,
style = wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_SIBLINGS,
name = aResource.name
)
widget.Widget.__init__( self, aParent, aResource )
wx.EVT_WINDOW_DESTROY(self, self._OnDestroy)
# Try to remove flickering on windows.
#wx.EVT_ERASE_BACKGROUND( self, lambda evt: None)
self._bindEvents(event.WIDGET_EVENTS)
def _OnDestroy(self, event):
# memory leak cleanup
self._bitmap = None
event.Skip()
# KEA added getBitmap, setBitmap
def _getBitmap( self ) :
return self._bitmap
def _setBitmap( self, aValue ) :
self._bitmap = aValue
self.SetBitmap( aValue.getBits() )
# may actually need to refresh the panel as well
# depending on the size of the new bitmap compared
# to the old one
# in addition, the size of the image or imagebutton needs
# to be set appropriately after changing the bitmap so
# there are still a few issues to work out
self.Refresh()
"""
# KEA do we query the Bitmap to find the actual dimensions
# _size can contain -1, and -2
# or provide a special getBitmapSize method?
# this getSize is actually the same as its parent
def _getSize( self ) :
return self.GetSizeTuple() # get the actual size, not (-1, -1)
"""
# KEA special handling for -2 size option
def _setSize(self, aSize):
self._size = tuple(aSize)
w = aSize[0]
if w == -2:
w = self._bitmap.getWidth()
h = aSize[1]
if h == -2:
h = self._bitmap.getHeight()
self.SetSize((w, h))
# KEA 2001-08-02
# right now the image is loaded from a filename
# during initialization
# but later these might not make any sense
# if setBitmap is used directly in user code
def _getFile( self ) :
return self._file
# KEA 2001-08-14
# if we're going to support setting the file
# after initialization, then this will need to handle the bitmap loading
# overhead
def _setFile( self, aFile ) :
self._file = aFile
self._setBitmap(graphic.Bitmap(aFile))
def _setBackgroundColor( self, aColor ) :
aColor = self._getDefaultColor( aColor )
if self._file == '':
bmp = self._bitmap.getBits()
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.SetBackground(wx.Brush(aColor))
dc.Clear()
dc.SelectObject(wx.NullBitmap)
self.SetBackgroundColour( aColor )
self.Refresh() # KEA wxPython bug?
backgroundColor = property(widget.Widget._getBackgroundColor, _setBackgroundColor)
bitmap = property(_getBitmap, _setBitmap)
file = property(_getFile, _setFile)
size = property(widget.Widget._getSize, _setSize)
import sys
from Pycard import registry
registry.Registry.getInstance().register(sys.modules[__name__].Image)
"""
__version__ = "$Revision: 1.17 $"
__date__ = "$Date: 2004/05/13 02:40:24 $"
"""
import wx
from wx import html
from Pycard import event, log, widget
import webbrowser
class InfoHtmlWindowSpec(widget.WidgetSpec):
def __init__(self):
events = []
attributes = {
'size' : { 'presence' : 'optional', 'default' : [ 50, 50 ] },
'text' : { 'presence' : 'optional', 'default' : '' },
}
widget.WidgetSpec.__init__(self, 'InfoHtmlWindow', 'Widget', events, attributes )
class InfoHtmlWindow(widget.Widget, html.HtmlWindow):
"""
An HTML window.
"""
_spec = InfoHtmlWindowSpec()
def __init__(self, aParent, aResource):
self._addressField = None
html.HtmlWindow.__init__(
self,
aParent,
widget.makeNewId(aResource.id),
aResource.position,
aResource.size,
#style = wx.HW_SCROLLBAR_AUTO | wx.CLIP_SIBLINGS,
name = aResource.name
)
widget.Widget.__init__(self, aParent, aResource)
self._setText(aResource.text)
self._bindEvents(event.WIDGET_EVENTS)
def setAddressField(self, field):
self._addressField = field
def _getText(self) :
return self.GetOpenedPage()
def _setText(self, aString):
if aString == '' or aString[0] == '<':
self.SetPage(aString)
else:
# filename
self.LoadPage(aString)
#self._delegate.Refresh()
def base_LoadPage(self, url):
log.debug("base_LoadPage " + url)
if self._addressField is not None:
self._addressField.text = url
log.debug("loaded")
html.HtmlWindow.base_LoadPage(self, url)
def LoadPage(self, url):
log.debug("LoadPage " + url)
if self._addressField is not None:
self._addressField.text = url
log.debug("loaded")
html.HtmlWindow.LoadPage(self, url)
def SetPage(self, text):
log.debug("SetPage " + text)
#if self._addressField is not None:
# self._addressField.text = text
# log.debug("set")
html.HtmlWindow.SetPage(self, text)
def OnLinkClicked(self, link):
log.debug("OnLinkClicked " + str(link))
webbrowser.open(str(link.GetHref()))
text = property(_getText, _setText)
import sys
from Pycard import registry
registry.Registry.getInstance().register(sys.modules[__name__].InfoHtmlWindow)
"""
__version__ = "$Revision: 1.4 $"
__date__ = "$Date: 2004/11/01 01:11:22 $"
"""
import wx
from Pycard import event, widget
class PageContainerEvent(event.Event):
def decorate(self, aWxEvent, source):
aWxEvent = event.Event.decorate(self, aWxEvent, source)
aWxEvent.oldSelection = aWxEvent.GetOldSelection()
aWxEvent.selection = aWxEvent.GetSelection()
return aWxEvent
class PageContainerPageChangedEvent(PageContainerEvent):
name = 'pageChanged'
binding = wx.EVT_NOTEBOOK_PAGE_CHANGED
id = wx.wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED
class PageContainerPageChangingEvent(PageContainerEvent):
name = 'pageChanging'
binding = wx.EVT_NOTEBOOK_PAGE_CHANGING
id = wx.wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING
PageContainerEvents = (PageContainerPageChangedEvent,
PageContainerPageChangingEvent)
class PageContainerSpec(widget.WidgetSpec):
def __init__(self):
events = list(PageContainerEvents)
attributes = {
# KEA 2004-09-14
# we could provide an attribute for the labels
#'label' : { 'presence' : 'optional', 'default':'Button' },
#'default':{'presence':'optional', 'default':0}
}
widget.WidgetSpec.__init__(self, 'PageContainer', 'Widget', events, attributes )
class PageContainer(widget.Widget, wx.PageContainer):
_spec = PageContainerSpec()
def __init__(self, aParent, aResource):
wx.PageContainer.__init__(self,
aParent,
widget.makeNewId(aResource.id),
aResource.position,
aResource.size,
style = wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_SIBLINGS,
name = aResource.name
)
widget.Widget.__init__(self, aParent, aResource)
self._bindEvents(self._spec._events)
def _getPageNames(self):
names = []
for i in range(self.GetPageCount()):
names.append(self.GetPageText(i))
return names
def _getStringSelection(self):
return self.GetPageText(self.GetSelection())
def _setStringSelection(self, s):
names = self._getPageNames()
try:
self.SetSelection(names.index(s))
except:
# what kind of exception should we throw here for
# an invalid string selection?
pass
# KEA 2004-09-14
# rather than using all these methods there could
# be a list wrapper where the __add__, __del__, etc.
# methods call the right method below
# but that might be needlessly complicated
# I didn't add aliases for all methods
# in particular I'm not sure about image support
addPage = wx.PageContainer.AddPage
deleteAllPages = wx.PageContainer.DeleteAllPages
deletePage = wx.PageContainer.DeletePage
getPage = wx.PageContainer.GetPage
getPageCount = wx.PageContainer.GetPageCount
getPageText = wx.PageContainer.GetPageText
#getSelection = wx.PageContainer.GetSelection
insertPage = wx.PageContainer.InsertPage
removePage = wx.PageContainer.RemovePage
setPageText = wx.PageContainer.SetPageText
#setSelection = wx.PageContainer.SetSelection
selection = property(wx.PageContainer.GetSelection, wx.PageContainer.SetSelection)
stringSelection = property(_getStringSelection, _setStringSelection)
import sys
from Pycard import registry
registry.Registry.getInstance().register(sys.modules[__name__].PageContainer)
"""
Copyright (C) 2007 Franco Lanza <nextime@nexlab.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
import wx
from Pycard import event, graphic, widget
USE_GENERIC = wx.Platform == '__WXGTK__'
if USE_GENERIC:
from wx.lib.statbmp import GenStaticBitmap as StaticBitmap
else:
StaticBitmap = wx.StaticBitmap
ScrolledWindow = wx.ScrolledWindow
class ScrolledImageSpec(widget.WidgetSpec):
def __init__(self):
events = []
attributes = {
'file' : { 'presence' : 'optional', 'default':'' },
'size' : { 'presence' : 'optional', 'default' : [ -1, -1 ] },
}
widget.WidgetSpec.__init__( self, 'Image', 'Widget', events, attributes )
class ScrolledImage(widget.Widget, StaticBitmap):
"""
A static image.
"""
_spec = ScrolledImageSpec()
def __init__(self, aParent, aResource):
self._bitmap = graphic.Bitmap(aResource.file, aResource.size)
self._file = aResource.file
self._size = tuple(aResource.size)
w = aResource.size[0]
if w == -2:
w = self._bitmap.getWidth()
h = aResource.size[1]
if h == -2:
h = self._bitmap.getHeight()
size = (w, h)
#size = wx.Size( self._bitmap.GetWidth(), self._bitmap.GetHeight() )
##if aResource.border == 'transparent':
## mask = wx.MaskColour(self._bitmap, wxBLACK)
## self._bitmap.SetMask(mask)
self.sw = ScrolledWindow(self)
StaticBitmap.__init__(self.sw, aParent, widget.makeNewId(aResource.id), self._bitmap.getBits(),
aResource.position, size, style = wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_SIBLINGS,
name = aResource.name )
widget.Widget.__init__( self, aParent, aResource )
wx.EVT_WINDOW_DESTROY(self, self._OnDestroy)
self._bindEvents(event.WIDGET_EVENTS)
def _OnDestroy(self, event):
# memory leak cleanup
self._bitmap = None
event.Skip()
# KEA added getBitmap, setBitmap
def _getBitmap( self ) :
return self._bitmap
def _setBitmap( self, aValue ) :
self._bitmap = aValue
self.SetBitmap( aValue.getBits() )
# may actually need to refresh the panel as well
# depending on the size of the new bitmap compared
# to the old one
# in addition, the size of the image or imagebutton needs
# to be set appropriately after changing the bitmap so
# there are still a few issues to work out
self.Refresh()
"""
# KEA do we query the Bitmap to find the actual dimensions
# _size can contain -1, and -2
# or provide a special getBitmapSize method?
# this getSize is actually the same as its parent
def _getSize( self ) :
return self.GetSizeTuple() # get the actual size, not (-1, -1)
"""
# KEA special handling for -2 size option
def _setSize(self, aSize):
self._size = tuple(aSize)
w = aSize[0]
if w == -2:
w = self._bitmap.getWidth()
h = aSize[1]
if h == -2:
h = self._bitmap.getHeight()
self.SetSize((w, h))
# KEA 2001-08-02
# right now the image is loaded from a filename
# during initialization
# but later these might not make any sense
# if setBitmap is used directly in user code
def _getFile( self ) :
return self._file
# KEA 2001-08-14
# if we're going to support setting the file
# after initialization, then this will need to handle the bitmap loading
# overhead
def _setFile( self, aFile ) :
self._file = aFile
self._setBitmap(graphic.Bitmap(aFile))
def _setBackgroundColor( self, aColor ) :
aColor = self._getDefaultColor( aColor )
if self._file == '':
bmp = self._bitmap.getBits()
dc = wx.MemoryDC()
dc.SelectObject(bmp)
dc.SetBackground(wx.Brush(aColor))
dc.Clear()
dc.SelectObject(wx.NullBitmap)
self.SetBackgroundColour( aColor )
self.Refresh() # KEA wxPython bug?
backgroundColor = property(widget.Widget._getBackgroundColor, _setBackgroundColor)
bitmap = property(_getBitmap, _setBitmap)
file = property(_getFile, _setFile)
size = property(widget.Widget._getSize, _setSize)
import sys
from Pycard import registry
registry.Registry.getInstance().register(sys.modules[__name__].ScrolledImage)
"""
__version__ = "$Revision: 1.29 $"
__date__ = "$Date: 2005/12/25 13:44:50 $"
"""
import wx
from Pycard import event, widget
from Pycard.components import list as orlist
ContainerMixin = orlist.ContainerMixin
ListSelectEvent = orlist.ListSelectEvent
ListMouseDoubleClickEvent = orlist.ListMouseDoubleClickEvent
class UListSpec(widget.WidgetSpec):
def __init__(self):
events = list(orlist.ListEvents)
attributes = {
'items' : { 'presence' : 'optional', 'default' : [] },
'stringSelection' : { 'presence' : 'optional', 'default' : None }
}
widget.WidgetSpec.__init__( self, 'UList', 'Widget', events, attributes )
self._events.remove(event.MouseDoubleClickEvent)
class UList(orlist.List):
"""
A list that only allows a single item to be selected.
"""
_spec = UListSpec()
def __init__(self, aParent, aResource):
wx.ListBox.__init__(
self,
aParent,
widget.makeNewId(aResource.id),
aResource.position,
aResource.size,
aResource.items,
style = wx.LB_SINGLE | wx.LB_ALWAYS_SB | wx.NO_FULL_REPAINT_ON_RESIZE | wx.CLIP_SIBLINGS,
name = aResource.name
)
widget.Widget.__init__(self, aParent, aResource)
if aResource.stringSelection:
self._setStringSelection(aResource.stringSelection)
self._bindEvents(self._spec._events)
import sys
from Pycard import registry
registry.Registry.getInstance().register(sys.modules[__name__].UList)
#!/usr/bin/env python
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
"""
__version__ = "$Revision: 0.1 $"
__date__ = "$Date: 2007/09/25 22:13:23 $"
"""
from gui import fitsopener
if __name__ == "__main__":
fitsopener.run()
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model, dialog
from skylive import config
import wx
class AskStream(model.Background):
def on_initialize(self, event):
self.parent = self.getParent()
def on_close(self, event):
self.parent.on_CloseAskStream(event)
event.skip()
def on_exit_command(self, event):
self.close()
def on_size(self, event):
self.panel.SetSize(self.size)
def on_ButtonYes_mouseClick(self, event):
self.parent.on_realStartStream(event)
def on_ButtonNo_mouseClick(self, event):
self.parent.on_realNoStream(event)
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgFocus',
'title':u'AudioVideo',
'size':(285, 126),
'components': [
{'type':'StaticText',
'name':'ask',
'position':(15, 5),
'backgroundColor':(238, 238, 236, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
'text':'Do you want to listen our audio stream?',
},
{'type':'CheckBox',
'name':'save',
'position':(97, 47),
'backgroundColor':(238, 238, 236, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
'label':"don't ask anymore",
'checked': True,
},
{'type':'Button',
'name':'ButtonNo',
'position':(142, 19),
'size':(32, -1),
'backgroundColor':(238, 238, 236, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
'label':'No',
},
{'type':'Button',
'name':'ButtonYes',
'position':(97, 18),
'size':(32, -1),
'backgroundColor':(238, 238, 236, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
'label':'Yes',
},
] # end components
,
'sizers':
[
{
'name' : 'ALL',
'typ' : 'i',
'children' : [
{
'name' : 'TOP SIZER',
'typ' : 'v',
'horGrowth' : 1,
'verGrowth' : 1,
'children' : [
{
'name' : 'versizer001',
'typ' : 'v',
'children' : [
{
'name' : 'ask' },
{
'name' : 'horsizer000',
'typ' : 'h',
'children' : [
{
'name' : 'ButtonYes' },
{
'name' : 'ButtonNo' },
] # end of horsizer000
},
{
'name' : 'save' },
] # end of versizer001
},
] # end of TOP SIZER
},
{
'name' : 'UNPLACED',
'typ' : 'i' },
] # end of ALL
},
] # end of sizers
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model
class Booking(model.Background):
def on_initialize(self, event):
pass
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':'Standard Template with File->Exit menu',
'size':(441, 289),
'style':['resizeable'],
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
]
},
'components': [
{'type':'ToggleButton',
'name':'ToggleButton111111111',
'position':(361, 150),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton111111111',
},
{'type':'ToggleButton',
'name':'ToggleButton11111111',
'position':(361, 132),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton11111111',
},
{'type':'ToggleButton',
'name':'ToggleButton1111111',
'position':(361, 114),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton1111111',
},
{'type':'ToggleButton',
'name':'ToggleButton111111',
'position':(361, 95),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton111111',
},
{'type':'ToggleButton',
'name':'ToggleButton11111',
'position':(361, 77),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton11111',
},
{'type':'ToggleButton',
'name':'ToggleButton1111',
'position':(361, 58),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton1111',
},
{'type':'ToggleButton',
'name':'ToggleButton111',
'position':(361, 39),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton111',
},
{'type':'ToggleButton',
'name':'ToggleButton11',
'position':(361, 20),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
'label':'ToggleButton11',
},
{'type':'ToggleButton',
'name':'ToggleButton1',
'position':(361, 2),
'size':(25, 19),
'backgroundColor':(255, 0, 0, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(255, 0, 0, 255),
},
{'type':'Calendar',
'name':'Calendar1',
'position':(36, 102),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
},
] # end components
,
'sizers':
[
{
'name' : 'ALL',
'typ' : 'i',
'children' : [
{
'name' : 'TOP SIZER',
'typ' : 'v',
'horGrowth' : 1,
'verGrowth' : 1 },
{
'name' : 'UNPLACED',
'typ' : 'i',
'children' : [
{
'name' : 'Calendar1' },
{
'name' : 'ToggleButton1' },
{
'name' : 'ToggleButton11' },
{
'name' : 'ToggleButton111' },
{
'name' : 'ToggleButton1111' },
{
'name' : 'ToggleButton11111' },
{
'name' : 'ToggleButton111111' },
{
'name' : 'ToggleButton1111111' },
{
'name' : 'ToggleButton11111111' },
{
'name' : 'ToggleButton111111111' },
] # end of UNPLACED
},
] # end of ALL
},
] # end of sizers
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model, dialog, timer
import os, wx, webbrowser
from skylive import config
from skylive.utils import genutils
import time
class ChatPrivate(model.Background):
def on_initialize(self, event):
self.parent = self.getParent()
if self.parent.lang == "it":
self.blinkMsg = "Nuovo messaggio"
else:
self.blinkMsg = "New message"
self.deactiv = False
self.canSelect = False
self.canbeep, self.canpopup = config.get_pvtPref()
self.components.ChatMsg.setFocus()
if genutils.platform() == 'Darwin':
self.blinkTimer = timer.Timer(self.components.ChatArea, -1)
self.origTitle = self.title
self.iconOn = True
self.last_idle = time.time()
self.SetSizeHints(200, 200)
self.resizeAll()
def on_close(self, event):
self.parent.on_PrivChatClose(self.touser)
event.skip()
def on_exit_command(self, event):
self.close()
def on_menuSavePrivChat_select(self, event):
self.chatPrivText = self.components.ChatArea.text
self.chat_file_path = os.path.expanduser("~")
self.chat_file_save_path = os.path.normpath(self.chat_file_path+"/skylive-ng_chat")
self.usr_file_name = self.tousercomp+".txt"
result = dialog.saveFileDialog(self, "Save Text file as:", self.chat_file_save_path, self.usr_file_name, 'Text Files: (*.txt)|*.txt')
if result.accepted:
self.path = result.paths[0]
self.chat_file = open(self.path,"w")
self.chat_file.write("Start private chat text whit "+self.tousercomp+"\n"+self.chatPrivText)
self.chat_file.close()
dialog.alertDialog(self, "Private chat text saved in "+self.path)
def on_Send_mouseClick(self, event):
txt = self.components.ChatMsg.text
self.components.ChatMsg.text = ''
if len(txt.replace(" ", "")) > 0:
self.components.ChatArea.appendText("<"+self.parent.config.getUsername()+"> "+txt+"\n")
#self.parent.callInTwisted('sendNetworkData', self.parent.srvproto.chatSendPrivate(self.tousercomp, txt))
self.parent.TwistedLoop.sendNetworkData(self.parent.srvproto.chatSendPrivate(self.tousercomp, txt))
def on_ChatMsg_keyPress(self, event):
if event.GetKeyCode() == wx.WXK_RETURN:
self.on_Send_mouseClick(event)
event.skip()
else:
event.skip()
def on_ChatArea_gainFocus(self, event):
# Ugly, bad, orrible hack to make
# the fucking windows work with RETURN keypress.
if not self.canSelect:
if os.name == 'nt':
if len(self.components.ChatMsg.text) > 0:
self.on_Send_mouseClick(False)
event.skip()
self.components.ChatMsg.setFocus()
def on_deactivate(self, event):
self.deactiv = True
def on_activate(self, event):
self.deactiv = False
#self.components.ChatMsg.setFocus()
if genutils.platform() == 'Darwin':
self.blinkTimer.Stop()
self.title = self.origTitle
def on_ChatArea_textUpdate(self, event):
if self.canbeep and self.deactiv:
print '\a'
if self.canpopup and self.deactiv:
self.Restore()
if True and self.deactiv:
if genutils.platform() == 'Darwin':
self.blinkTimer.Start(1000)
else:
self.RequestUserAttention()
def on_ChatArea_mouseDown(self, event):
self.canSelect = True
event.skip()
def on_ChatArea_mouseUp(self, event):
self.canSelect = False
event.skip()
def on_ChatArea_mouseDoubleClick(self, event):
x = ''
y = ''
url = False
posA = 0
posB = 0
noUrl = False
cpoint = self.components.ChatArea.getSelection()
while 'http' not in x and '>' not in x:
x = self.components.ChatArea.getString(cpoint[0]-posA, cpoint[0]-posA+4)
if '>' in x or '<' in x:
noUrl = True
posA+=1
if not noUrl:
while y != ' ' and y != '\n':
y = self.components.ChatArea.getString(cpoint[1]+posB, cpoint[1]+posB+1)
posB+=1
A = cpoint[0]-posA+1
B = cpoint[1]+posB-1
text = self.components.ChatArea.getString(A, B)
if len(text.split(' ')) > 1:
urlTry = text.split(' ')[0]
else:
urlTry = text
if len(urlTry) > 12:
url = urlTry
try:
if url:
webbrowser.open(url)
except:
self.dialog.alertdialog(self, "Default WebBrowser is not defined")
def on_ChatArea_keyPress(self, event):
key = event.GetKeyCode()
if key in range (31, 128):
self.components.ChatMsg.setFocus()
self.components.ChatMsg.appendText(unicode(chr(key)))
else:
self.components.ChatMsg.setFocus()
event.skip()
def on_ChatArea_timer(self, event):
if self.iconOn:
self.title = self.blinkMsg
self.iconOn = False
else:
self.iconOn = True
self.title = self.origTitle
event.skip()
def on_size(self, event):
w, h = self.size
if w >= 200 and h >= 200:
self.resizeAll()
def resizeAll(self):
winW, winH = self.size
areaW=winW-26
areaH=winH-97
self.components.ChatArea.size = (areaW, areaH)
inputW = areaW-78
inputH = 27
self.components.ChatMsg.size = (inputW, inputH)
self.components.ChatMsg.position = (10, areaH+13)
self.components.Send.position = (inputW+15, areaH+15)
self.panel.SetSize(self.size)
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':u'Standard Template with File->Exit menu',
'style': ['resizeable'],
'size':(325, 363),
'icon':'./gui/img/ICONA.ico',
'backgroundColor':(192, 192, 192),
'useSizers':0,
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuSavePrivChat',
'label':'S&ave chat',
},
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
]
},
'components': [
{'type':'Button',
'name':'Send',
'position':(235, 281),
'size':(73, -1),
'label':'Send',
},
{'type':'TextField',
'name':'ChatMsg',
'position':(10, 279),
#'size':(220, 27),
'size':(-1, -1),
},
{'type':'TextArea',
'name':'ChatArea',
'position':(10, 10),
#'size':(298, 266),
'size':(-1, -1),
'backgroundColor':(135, 232, 201),
'editable':False
},
] # end components
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model, timer
class DownProgr(model.Background):
def on_initialize(self, event):
self.parent = self.getParent()
def on_close(self, event):
event.skip()
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'DownProgr',
'title':u'Download',
'icon':'gui/img/ICONA.ico',
'size':(310, 120),
'backgroundColor':(192, 192, 192),
'components': [
{'type':'StaticBox',
'name':'downBox',
'position':(5, 5),
'size':(300, 105),
'label':'Download Progress',
},
{'type':'StaticText',
'name':'downpr',
'position':(15, 75),
'size':(250, 30),
'text':'Progress:',
},
{'type':'StaticText',
'name':'progPerc',
'position':(270, 43),
'size':(50, 25),
'text':'0%',
},
{'type':'Gauge',
'name':'progBar',
'position':(15, 40),
'size':(250, 25),
'max':100,
'value':0,
},
] # end components
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model, dialog, graphic
from Pycard.twistedsupport import twistedModel
from twisted.internet import reactor
import Image, ImageOps, numpy
import wx, os, platform
import imageadj
from skylive.utils import genutils as utils
from skylive.lang import language
from skylive.fits import fitsimage, levels
class FitsOpener(model.Background,):
def on_initialize(self, event):
try:
self._parent = self.getParent()
self.userhome = self._parent.usrDefSavePath
self.lang = self._parent.lang
except:
self.lang = 'en'
self.userhome = os.path.expanduser("~")
self.gui = 'imager'
self.ItemText = language.getItemText
def on_open_command(self, event):
try:
if self._parent.lastPath and os.path.exists(self._parent.lastPath):
lpath = self._parent.lastPath
else:
lpath = self.userhome
except:
lpath = self.userhome
selectFits = dialog.fileDialog(self, "Select Image:", lpath, ' ', 'FITS Image: (*.fit)|*.fit')
if selectFits.accepted:
self.fitsFile = selectFits.paths[0]
try:
self._parent.lastPath = os.path.split(self.fitsFile)[0]
except:
pass
self.loadFits(self.fitsFile)
def on_exit_command(self, event):
self.close()
def on_adjust_command(self, event=False):
sysType = platform.system()
if not os.path.exists(os.path.normpath("./gui/imageadj."+sysType+".rsrc.py")):
sysType = "Linux"
self.adjustImg = model.childWindow(self, imageadj.imageAdj, "./gui/imageadj."+sysType+".rsrc.py")
try:
self.adjustImg._parent = self
except:
pass
self.adjustImg.visible = True
try:
self.adjustImg._parent.origImage = [self.pilImage, self.xsizeBit, self.ysizeBit, self.min, self.max, self.med, self.img2, self.ToResize ]
except:
pass
def loadFits(self, fitsFile):
fitsfile = fitsimage.FitsImage(fitsFile, False)
scidata = fitsfile.image
self.autoMax = fitsfile.autoMaxLevel
self.autoMin = fitsfile.autoMinLevel
self.ToResize = fitsfile.pilResized
self.min = fitsfile.min
self.max = fitsfile.max
self.med = fitsfile.med
self.pilImage = fitsfile.pilOrI
self.img = fitsfile.pilImage
self.img2 = fitsfile.pilRaw
self.xsizeBit = fitsfile.xsizeBit
self.ysizeBit = fitsfile.ysizeBit
image = wx.EmptyImage(fitsfile.xsizeBit, fitsfile.ysizeBit)
image.SetData(fitsfile.pilImage.convert("RGB").tostring())
self.imageBitmap = graphic.Bitmap()
self.imageBitmap.setImageBits(image)
self.components.ImageShow.bitmap = self.imageBitmap
self.size = (fitsfile.xsizeBit+20, fitsfile.ysizeBit+100)
try:
self.MenuBar.setEnabled('menuPhoto', True)
except:
self.menuBar.setEnabled('menuPhoto', True)
if fitsfile.pilResized:
self.title = "Vista al "+str(fitsfile.percresize)+"% delle dimensioni originali"
def getAndSaveImage(self):
try:
imageFromPil = self.pilImage
except:
imageFromPil = False
if imageFromPil:
aStyle = wx.SAVE | wx.HIDE_READONLY | wx.OVERWRITE_PROMPT
result = dialog.saveFileDialog(self, self.getText('SaveDialog_SaveAs'), self.userhome, self._parent.components.FileName.text, 'BMP File: (*.bmp)|*.bmp|JPG File: (*.jpg)|*.jpg', aStyle)
if result.accepted:
path=result.paths[0]
if not os.path.splitext(os.path.split(path)[1])[1]:
dialog.alertDialog(self, self.getText('SaveDialog_alertSaveAs'))
self.getAndSaveImage()
else:
imageFromPil.save(path)
def on_saveas_command(self, event):
self.getAndSaveImage()
def getText(self, item):
return self.ItemText(self.lang, self.gui, item)
def on_size(self, event):
self.panel.SetSize(self.size)
def run():
#app = model.Application(FitsOpener, './gui/fitsopener.rsrc.py')
app = twistedModel.TwistedModelApplication(FitsOpener, './gui/fitsopener.rsrc.py')
app.MainLoop()
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':u"Fits's Opener",
'size':(820, 581),
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuFileOpen',
'label':u'O&pen..',
'command':'open',
},
{'type':'MenuItem',
'name':'menusaveas',
'label':u'Save as..',
'command':'saveas',
},
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
{'type':'Menu',
'name':'menuPhoto',
'label':'&Adjust',
'enabled':False,
'items': [
{'type':'MenuItem',
'name':'menuAdjustPhoto',
'label':'A&djust',
'command':'adjust',
},
]
},
]
},
'components': [
{'type':'Image',
'name':'ImageShow',
'position':(10, 10),
'size':(320, 240),
'file':u'./gui/img/Live.jpg',
},
] # end components
} # end background
] # end backgrounds
} }
from Pycard import model, dialog
class FocusDialog(model.Background):
def on_initialize(self, event):
self.parent = self.getParent()
def on_close(self, event):
self.parent.on_CloseFocus(event)
event.skip()
def on_exit_command(self, event):
self.close()
def on_size(self, event):
self.panel.SetSize(self.size)
def on_ButtonLess_mouseClick(self, event):
self.parent.on_FocusLess(event)
def on_ButtonPlus_mouseClick(self, event):
self.parent.on_FocusPlus(event)
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgFocus',
'title':u'Focus',
'size':(84, 71),
#'style':['wx.FRAME_TOOL_WINDOW', 'wx.MINIMIZE_BOX', 'wx.STAY_ON_TOP', 'wx.CLOSE_BOX', 'wx.CAPTION', 'wx.FRAME_SHAPED'],
'components': [
{'type':'Button',
'name':'ButtonLess',
'position':(47, 5),
'size':(32, -1),
'backgroundColor':(238, 238, 236, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
'label':'-',
},
{'type':'Button',
'name':'ButtonPlus',
'position':(5, 5),
'size':(32, -1),
'backgroundColor':(238, 238, 236, 255),
'font':{'faceName': u'Sans', 'family': 'sansSerif', 'size': 9},
'foregroundColor':(16, 16, 16, 255),
'label':'+',
},
] # end components
,
'sizers':
[
{
'name' : 'ALL',
'typ' : 'i',
'children' : [
{
'name' : 'TOP SIZER',
'typ' : 'v',
'horGrowth' : 1,
'verGrowth' : 1,
'children' : [
{
'name' : 'horsizer000',
'typ' : 'h',
'children' : [
{
'name' : 'ButtonPlus' },
{
'name' : 'ButtonLess' },
] # end of horsizer000
},
] # end of TOP SIZER
},
{
'name' : 'UNPLACED',
'typ' : 'i' },
] # end of ALL
},
] # end of sizers
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
import wx
import math
from Pycard import model, resource
from skylive.lang import language
ID_OK=10
ID_CANCEL=15
ID_REG=20
ID_LOST=21
ID_NO=11
ID_LATER=12
ItemText = language.getItemText
def getText(item):
from skylive import config
lang = config.get_usrLang()
return ItemText(lang, 'gui', item)
class loginDialog(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, None, wx.NewId(), "SkyLive Login",
style=wx.DEFAULT_DIALOG_STYLE | wx.STAY_ON_TOP | wx.CAPTION)
self.main_sizer = wx.FlexGridSizer(cols=2, vgap=5, hgap=5)
self.username = wx.TextCtrl(self, 1, size=(150, -1))
self.main_sizer.Add(wx.StaticText(self, -1, "Username"),1, wx.ALIGN_CENTER)
self.main_sizer.Add(self.username, 1, wx.ALIGN_CENTER)
#self.main_sizer.Add(wx.StaticText(self, -1, " "),1, wx.ALIGN_CENTER)
self.password = wx.TextCtrl(self, -1, style=wx.TE_PASSWORD, size=(150, -1))
self.main_sizer.Add(wx.StaticText(self, -1, "Password"),1, wx.ALIGN_CENTER)
self.main_sizer.Add(self.password, 1, wx.ALIGN_CENTER)
#self.main_sizer.Add(wx.StaticText(self, -1, " "),1, wx.ALIGN_CENTER)
self.button_sizer = wx.FlexGridSizer(cols=2, vgap=5, hgap=5)
self.ok_button = wx.Button(self, ID_OK, "OK")
#self.main_sizer.Add(wx.StaticText(self, -1, " "),1, wx.ALIGN_CENTER)
self.button_sizer.Add(self.ok_button,1, wx.ALIGN_CENTER)
#self.main_sizer.Add(wx.StaticText(self, -1, " "),1, wx.ALIGN_CENTER)
wx.EVT_BUTTON(self, ID_OK, self.Ok)
self.cancel_button = wx.Button(self, ID_CANCEL, "CANCEL")
#self.main_sizer.Add(wx.StaticText(self, -1, " "),1, wx.ALIGN_CENTER)
self.button_sizer.Add(self.cancel_button, 1, wx.ALIGN_CENTER)
wx.EVT_BUTTON(self, ID_CANCEL, self.cancel)
# XXX Questo lo rimettiamo!
#self.reg_button = wx.Button(self, ID_REG, "new login")
#self.button_sizer.Add(self.reg_button, 1, wx.ALIGN_CENTER)
#wx.EVT_BUTTON(self, ID_REG, self.register)
# XXX Questo lo rimettiamo!
#self.lost_button = wx.Button(self, ID_LOST, "lost login")
#self.button_sizer.Add(self.lost_button, 1, wx.ALIGN_CENTER)
#wx.EVT_BUTTON(self, ID_LOST, self.lostaccount)
#self.hbox = wx.BoxSizer(wx.HORIZONTAL)
self.hbox = wx.BoxSizer(wx.VERTICAL)
self.hbox.Add(self.main_sizer, 1, wx.ALL | wx.EXPAND, 10)
self.hbox.Add(self.button_sizer, 1, wx.ALIGN_CENTER_HORIZONTAL, 1)
self.SetSizer(self.hbox)
self.SetAutoLayout(1)
self.hbox.Fit(self)
def register(self, event):
self.SetReturnCode( ID_REG )
self.EndModal( ID_REG )
#import register
#self.Pop = model.childWindow(self, register.Register, "./gui/register.rsrc.py")
#self.Pop.title = self.getText('downloadtitle')+size+" kb"
#self.Pop.components.downpr.text = self.getText('downloadtext')+size+" kb"
#self.Pop.visible = True
def lostaccount(self, event):
import lostaccount
self.Pop = model.childWindow(self, lostaccount.LostAccount, "./gui/lostaccount.rsrc.py")
#self.Pop.title = self.getText('downloadtitle')+size+" kb"
#self.Pop.components.downpr.text = self.getText('downloadtext')+size+" kb"
self.Pop.visible = True
def Ok(self, event):
self.SetReturnCode( ID_OK )
self.EndModal( ID_OK )
def cancel(self, event):
self.SetReturnCode( ID_CANCEL )
self.EndModal( ID_CANCEL )
def OldLogin():
dl=loginDialog()
dl.Enable(enable=True)
mainbg = wx.GetApp().getCurrentBackground()
ret = dl.ShowModal()
if ID_OK==ret:
user = dl.username.GetValue()
pwd = dl.password.GetValue()
if len(user) < 1:
user=None
if len(pwd) < 4:
pwd=None
print 'OK'
return [user, pwd]
elif ID_CANCEL==ret:
user = "stoplogin"
pwd = "stoplogin"
print 'CANCEL'
return [user, pwd]
elif ID_REG==ret:
import register,time
Pop = model.childWindow(mainbg, register.Register, "./gui/register.rsrc.py")
Pop.visible = True
Pop.done = False
while not Pop.done:
time.sleep(0.2)
print 'USCITO!'
else:
print 'NONE'
return [None, None]
def Login():
done=False
todo='login'
while not done:
if todo=='login':
dl=loginDialog()
dl.Enable(enable=True)
ret = dl.ShowModal()
if ID_OK==ret:
user = dl.username.GetValue()
pwd = dl.password.GetValue()
if len(user) < 1:
user=None
if len(pwd) < 4:
pwd=None
print 'OK'
done=True
retvar = [user, pwd]
elif ID_CANCEL==ret:
user = "stoplogin"
pwd = "stoplogin"
print 'CANCEL'
done=True
retvar = [user, pwd]
elif ID_REG==ret:
todo='register'
else:
print 'NONE'
done=True
retvar = [None, None]
elif todo=='register':
import register
dl=register.Register(wx.GetApp().getCurrentBackground(),
resource.ResourceFile("./gui/register.rsrc.py").getResource())
dl.visible=True
ret = dl.ShowModal()
print 'USCITO'
return retvar
upgradeText="""
Una nuova versione di SkyliveNG e' disponibile.
Vuoi aggiornare ora?
A new version of the SkyliveNG client is available.
Do you want to upgrade now?
"""
class upgradeDialog(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, None, wx.NewId(), "SkyliveNG Upgrade",
style=wx.DEFAULT_DIALOG_STYLE | wx.STAY_ON_TOP | wx.CAPTION)
self.main_sizer = wx.FlexGridSizer(cols=1, vgap=5, hgap=5)
self.main_sizer.Add(wx.StaticText(self, -1, getText("upgradeText")),1, wx.ALIGN_CENTER)
self.button_sizer = wx.FlexGridSizer(cols=3, vgap=5, hgap=5)
self.ok_button = wx.Button(self, ID_OK, "OK")
self.button_sizer.Add(self.ok_button,1, wx.ALIGN_CENTER)
wx.EVT_BUTTON(self, ID_OK, self.Ok)
self.no_button = wx.Button(self, ID_NO, "NO")
self.button_sizer.Add(self.no_button, 1, wx.ALIGN_CENTER)
wx.EVT_BUTTON(self, ID_NO, self.no)
self.later_button = wx.Button(self, ID_LATER, "LATER")
self.button_sizer.Add(self.later_button, 1, wx.ALIGN_CENTER)
wx.EVT_BUTTON(self, ID_LATER, self.later)
self.hbox = wx.BoxSizer(wx.VERTICAL)
self.hbox.Add(self.main_sizer, 1, wx.ALL | wx.EXPAND, 10)
self.hbox.Add(self.button_sizer, 0, wx.ALIGN_CENTER_HORIZONTAL, 1)
self.SetSizer(self.hbox)
self.SetAutoLayout(1)
self.hbox.Fit(self)
def Ok(self, event):
self.SetReturnCode( ID_OK )
self.EndModal( ID_OK )
def later(self, event):
self.SetReturnCode( ID_LATER )
self.EndModal( ID_LATER )
def no(self, event):
self.SetReturnCode( ID_NO )
self.EndModal( ID_NO )
def Upgrade():
du = upgradeDialog()
du.Enable(enable=True)
mainbg = wx.GetApp().getCurrentBackground()
ret = du.ShowModal()
if ID_OK==ret:
return 'UPGRADE'
elif ID_NO==ret:
return 'NOUPGRADE'
return 'LATERUPGRADE'
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':u'Image Adjust',
'size':(446, 255),
'icon':'gui/img/ICONA.ico',
'backgroundColor':(192, 192, 192),
'components': [
{'type':'StaticBox',
'name':'adjustBox',
'position':(7, 10),
'size':(432, 160),
'label':'Image Adjust',
},
{'type':'StaticBox',
'name':'toolsBox',
'position':(7, 180),
'size':(432, 48),
'label':'Tools',
},
{'type':'StaticText',
'name':'luminanceTXT',
'position':(20, 68),
'text':'Luminance',
},
{'type':'Slider',
'name':'Bright',
'position':(95, 65),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':100,
},
{'type':'StaticText',
'name':'contrastTXT',
'position':(20, 33),
'text':'Contrast',
},
{'type':'Slider',
'name':'Contrast',
'position':(95, 30),
'size':(299, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':100,
},
{'type':'StaticText',
'name':'contrShow',
'position':(400, 33),
'text':'1',
},
{'type':'StaticText',
'name':'brightShow',
'position':(400, 68),
'text':'1',
},
{'type':'StaticText',
'name':'StaticText4',
'position':(20, 138),
'text':'Str. Max',
},
{'type':'Slider',
'name':'strMax',
'position':(95, 135),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':200,
},
{'type':'StaticText',
'name':'StaticText3',
'position':(20, 103),
'text':'Str. Min',
},
{'type':'Slider',
'name':'strMin',
'position':(95, 100),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':0,
},
{'type':'StaticText',
'name':'strMinVal',
'position':(400, 103),
'text':'0',
},
{'type':'StaticText',
'name':'strMaxVal',
'position':(400, 138),
'text':'200',
},
{'type':'Button',
'name':'resetButton',
'position':(20, 199),
'size':(-1, 23),
'label':'Reset Change',
},
{'type':'Button',
'name':'negativeButton',
'position':(130, 199),
'size':(-1, 23),
'label':'Negative',
},
{'type':'Button',
'name':'autoContrastButton',
'position':(240, 199),
'size':(-1, 23),
'label':'AutoContrast',
},
{'type':'Button',
'name':'equalizeButton',
'position':(350, 199),
'size':(-1, 23),
'label':'Equalize',
},
] # end components
} # end background
] # end backgrounds
} }
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':u'Image Adjust',
'size':(446, 238),
'icon':'gui/img/ICONA.ico',
'backgroundColor':(192, 192, 192),
'components': [
{'type':'StaticText',
'name':'luminanceTXT',
'position':(20, 68),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Luminance',
},
{'type':'Slider',
'name':'Bright',
'position':(95, 65),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':100,
},
{'type':'StaticText',
'name':'contrastTXT',
'position':(20, 33),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Contrast',
},
{'type':'Slider',
'name':'Contrast',
'position':(95, 30),
'size':(299, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':100,
},
{'type':'StaticText',
'name':'contrShow',
'position':(400, 33),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'1',
},
{'type':'StaticText',
'name':'brightShow',
'position':(400, 68),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'1',
},
{'type':'StaticText',
'name':'maxTXT',
'position':(20, 138),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Str. Max',
},
{'type':'Slider',
'name':'strMax',
'position':(95, 135),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':200,
},
{'type':'StaticText',
'name':'minTXT',
'position':(20, 103),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Str. Min',
},
{'type':'Slider',
'name':'strMin',
'position':(95, 100),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':0,
},
{'type':'StaticText',
'name':'strMinVal',
'position':(400, 103),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'0',
},
{'type':'StaticText',
'name':'strMaxVal',
'position':(400, 138),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'200',
},
{'type':'StaticBox',
'name':'adjustBox',
'position':(7, 10),
'size':(432, 160),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Image Adjust',
},
{'type':'StaticBox',
'name':'toolsBox',
'position':(7, 180),
'size':(432, 48),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Tools',
},
{'type':'Button',
'name':'resetButton',
'position':(20, 196),
'size':(92, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Reset Change',
},
{'type':'Button',
'name':'negativeButton',
'position':(130, 196),
'size':(-1, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Negative',
},
{'type':'Button',
'name':'autoContrastButton',
'position':(240, 196),
'size':(83, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'AutoContrast',
},
{'type':'Button',
'name':'equalizeButton',
'position':(350, 196),
'size':(-1, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Equalize',
},
] # end components
} # end background
] # end backgrounds
} }
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':u'Image Adjust',
'size':(446, 260),
'icon':'gui/img/ICONA.ico',
'backgroundColor':(192, 192, 192),
'components': [
{'type':'StaticText',
'name':'luminanceTXT',
'position':(20, 68),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Luminance',
},
{'type':'Slider',
'name':'Bright',
'position':(95, 65),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':100,
},
{'type':'StaticText',
'name':'contrastTXT',
'position':(20, 33),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Contrast',
},
{'type':'Slider',
'name':'Contrast',
'position':(95, 30),
'size':(299, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':100,
},
{'type':'StaticText',
'name':'contrShow',
'position':(400, 33),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'1',
},
{'type':'StaticText',
'name':'brightShow',
'position':(400, 68),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'1',
},
{'type':'StaticText',
'name':'StaticText4',
'position':(20, 138),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Str. Max',
},
{'type':'Slider',
'name':'strMax',
'position':(95, 135),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':200,
},
{'type':'StaticText',
'name':'StaticText3',
'position':(20, 103),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'Str. Min',
},
{'type':'Slider',
'name':'strMin',
'position':(95, 100),
'size':(300, -1),
'labels':False,
'layout':'horizontal',
'max':200,
'min':0,
'value':0,
},
{'type':'StaticText',
'name':'strMinVal',
'position':(400, 103),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'0',
},
{'type':'StaticText',
'name':'strMaxVal',
'position':(400, 138),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'text':'200',
},
{'type':'StaticBox',
'name':'adjustBox',
'position':(7, 10),
'size':(432, 160),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Image Adjust',
},
{'type':'StaticBox',
'name':'toolsBox',
'position':(7, 180),
'size':(432, 48),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Tools',
},
{'type':'Button',
'name':'resetButton',
'position':(20, 196),
'size':(92, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Reset Change',
},
{'type':'Button',
'name':'negativeButton',
'position':(130, 196),
'size':(-1, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Negative',
},
{'type':'Button',
'name':'autoContrastButton',
'position':(240, 196),
'size':(83, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'AutoContrast',
},
{'type':'Button',
'name':'equalizeButton',
'position':(350, 196),
'size':(-1, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Equalize',
},
] # end components
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model, graphic
import ImageEnhance, wx, ImageOps
try:
from PIL import Image
except:
import Image
from skylive.lang import language
class imageAdj(model.Background):
def on_initialize(self, event):
self.parent = self.getParent()
self.image = self._parent.origImage
self.lang = self.parent.lang
self.gui = 'imageadj'
self.ItemText = language.getItemText
self.setGui()
self.origImage = self.image[0]
self.origImage2 = self.image[6]
self.resetValues()
def resetValues(self):
self.brightedImg = False
self.contrastedImg = False
self.negSel = False
self.components.Contrast.value = 100
self.components.Bright.value = 100
self.contrValue = 1.0
self.brightValue = 1.0
#self.minNewVal = -1 # assigned -1 because min max value are positive when setted
#self.maxNewVal = -1
# hack to put stretch bars to the right levels on open and on reset
self.maxNewVal = self._parent.autoMax
self.minNewVal = self._parent.autoMin
self.components.strMax.value = self.minNewVal
self.components.strMax.value = self.maxNewVal
self.stretchImage()
# end hack
self.components.contrShow.text = str(int(self.contrValue*100))+"%"
self.components.brightShow.text = str(int(self.brightValue*100))+"%"
self.actualModImage = self.origImage
self.getMinMax(self.origImage)
def on_Contrast_select(self, event):
self.contrValue = float(self.components.Contrast.value) / 100
self.components.contrShow.text = str(int(self.contrValue*100))+"%"
if self.brightedImg:
if self.brightedImg != self.actualModImage:
ImageToMod = self.actualModImage
else:
ImageToMod = self.brightedImg
else:
if self.origImage != self.actualModImage:
ImageToMod = self.actualModImage
else:
ImageToMod = self.origImage
modImage = ImageEnhance.Contrast(ImageToMod)
newmodImage = modImage.enhance(self.contrValue)
self.contrastedImg = newmodImage
self.refreshImg(newmodImage)
def on_Bright_select(self, event):
self.brightValue = float(self.components.Bright.value) / 100
self.components.brightShow.text = str(int(self.brightValue*100))+"%"
if self.contrastedImg:
if self.contrastedImg != self.actualModImage:
ImageToMod = self.actualModImage
else:
ImageToMod = self.contrastedImg
else:
if self.origImage != self.actualModImage:
ImageToMod = self.actualModImage
else:
ImageToMod = self.origImage
modImage = ImageEnhance.Brightness(ImageToMod)
newmodImage = modImage.enhance(self.brightValue)
self.brightedImg = newmodImage
self.refreshImg(newmodImage)
def refreshImg(self, imgmod):
self._parent.pilImage = imgmod
if self.image[7]:
imgTomod = imgmod.resize((self.image[1], self.image[2]))
else:
imgTomod = imgmod
image = wx.EmptyImage(self.image[1], self.image[2])
image.SetData(imgTomod.convert("RGB").tostring())
newBitmap = graphic.Bitmap()
newBitmap.setImageBits(image)
self._parent.components.ImageShow.bitmap = newBitmap
if self.contrValue == 1.0:
self.contrastedImg = False
if self.brightValue == 1.0:
self.brightedImg = False
def on_resetButton_mouseClick(self, event):
self.resetValues()
self.origImage = self.image[0]
self.refreshImg(self.origImage)
def on_negativeButton_mouseClick(self, event):
if self.negSel:
self.components.negativeButton.label = u"Negative"
self.negSel = False
else:
self.components.negativeButton.label = u"Positive"
self.negSel = True
newmodImage = ImageOps.invert(self.actualModImage)
self.refreshImg(newmodImage)
self.actualModImage = newmodImage
def on_autoContrastButton_mouseClick(self, event):
newmodImage = ImageOps.autocontrast(self.actualModImage, 0)
self.refreshImg(newmodImage)
self.actualModImage = newmodImage
def on_equalizeButton_mouseClick(self, event):
newmodImage = ImageOps.equalize(self.actualModImage)
self.refreshImg(newmodImage)
self.actualModImage = newmodImage
def stretchImage(self):
if self.minNewVal == -1:
min = self.strMinImg
else:
min = self.minNewVal
if self.maxNewVal == -1:
max = self.strMaxImg
else:
max = self.maxNewVal
if (max - min) != 0:
scale = self.image[5] / (max - min)
offset = -min * scale
newmodImage = self.origImage2.point(lambda i: i * scale + offset)
newmodImage = ImageOps.grayscale(newmodImage)
imgToview = self.applyPrevContrBright(newmodImage)
self.refreshImg(imgToview)
self.actualModImage = imgToview
else:
pass
def getMinMax(self, imgmod):
#min,max = imgmod.getextrema()
min = self.image[3]
max = self.image[4]
self.components.strMin.min = min
self.components.strMin.max = max
self.components.strMin.value = self.minNewVal
self.components.strMinVal.text = str(int(self.minNewVal))
self.components.strMax.min = min
self.components.strMax.max = max
self.components.strMax.value = self.maxNewVal
self.components.strMaxVal.text = str(int(self.maxNewVal))
self.strMinImg = min
self.strMaxImg = max
def on_strMin_select(self, event):
self.minNewVal = self.components.strMin.value
self.components.strMinVal.text = str(self.minNewVal)
self.stretchImage()
def on_strMax_select(self, event):
self.maxNewVal = self.components.strMax.value
self.components.strMaxVal.text = str(self.maxNewVal)
self.stretchImage()
def getText(self, item):
return self.ItemText(self.lang, self.gui, item)
def setGui(self):
self.components.luminanceTXT.text = self.getText('luminanceTXT')
self.components.contrastTXT.text = self.getText('contrastTXT')
self.components.adjustBox.label = self.getText('adjustBox')
self.components.toolsBox.label = self.getText('toolsBox')
self.components.resetButton.label = self.getText('resetButton')
self.components.negativeButton.label = self.getText('negativeButton')
self.components.autoContrastButton.label = self.getText('autoContrastButton')
self.components.equalizeButton.label = self.getText('equalizeButton')
def applyPrevContrBright(self, img):
brightImage = ImageEnhance.Brightness(img)
brightedIMG = brightImage.enhance(self.brightValue)
contrastImage = ImageEnhance.Contrast(brightedIMG)
contrastedImage = contrastImage.enhance(self.contrValue)
return contrastedImage
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'Imager',
'title':u'SkyliveNG Imager',
'size':(340, 320),
'icon':'gui/img/ICONA.ico',
'style':['resizeable'],
'backgroundColor':(192, 192, 192),
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
{'type':'Menu',
'name':'menuPhoto',
'label':'&Adjust',
'items': [
{'type':'MenuItem',
'name':'menuAdjustPhoto',
'label':'A&djust',
'command':'adjust',
},
]
},
{'type':'Menu',
'name':'menuInfo',
'label':'&Info',
'enabled':False,
'items': [
{'type':'MenuItem',
'name':'menuInfoPhoto',
'label':'Read H&eader',
'command':'readHeader',
},
]
},
]
},
'components': [
{'type':'Button',
'name':'ButtonDownload',
'position':(50, 260),
'size':(105, 23),
'label':'Download FIT',
'visible':False,
},
{'type':'Button',
'name':'ButtonSave',
'position':(30, 260),
'size':(75, 23),
'label':'Save image',
'visible':False,
},
{'type':'Button',
'name':'ButtonClose',
'position':(200, 260),
'size':(75, 23),
'label':'Close',
'visible':False,
},
{'type':'Button',
'name':'ButtonCompare',
'position':(300, 260),
'size':(190, 30),
'label':'Compare with DSS_SEARCH',
'visible':False,
},
{'type': 'Button',
'name':'ButtonSaveAs',
'position':(110, 260),
'size':(85, 23),
'label':'Save as..',
'visible':False,
},
{'type':'Image',
'name':'ImageShow',
'position':(10, 10),
'size':(320, 240),
'backgroundColor':(255, 255, 255),
'file':'./gui/img/Live.jpg',
},
] # end components
} # end background
] # end backgrounds
} }
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'Imager',
'title':u'SkyliveNG Imager',
'size':(340, 320),
'icon':'gui/img/ICONA.ico',
'style':['resizeable'],
'backgroundColor':(192, 192, 192),
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'File',
'items': [
{'type':'MenuItem',
'name':'menuFileExit',
'label':'Exit',
'command':'exit',
},
]
},
{'type':'Menu',
'name':'menuPhoto',
'label':'Adjust',
'enabled':False,
'items': [
{'type':'MenuItem',
'name':'menuAdjustPhoto',
'label':'Adjust',
'command':'adjust',
},
]
},
{'type':'Menu',
'name':'menuInfo',
'label':'Info',
'enabled':False,
'items': [
{'type':'MenuItem',
'name':'menuInfoPhoto',
'label':'Read Header',
'command':'readHeader',
},
]
},
]
},
'components': [
{'type':'Button',
'name':'ButtonDownload',
'position':(50, 260),
'size':(85, 23),
'label':'Download FIT',
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'visible':False,
},
{'type':'Button',
'name':'ButtonSave',
'position':(30, 260),
'size':(75, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Save image',
'visible':False,
},
{'type':'Button',
'name':'ButtonClose',
'position':(200, 260),
'size':(75, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Close',
'visible':False,
},
{'type':'Button',
'name':'ButtonCompare',
'position':(280, 260),
'size':(160, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Compare with DSS_SEARCH',
'visible':False,
},
{'type': 'Button',
'name':'ButtonSaveAs',
'position':(110, 260),
'size':(85, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Save as..',
'visible':False,
},
{'type':'Image',
'name':'ImageShow',
'position':(10, 10),
'size':(320, 240),
'backgroundColor':(255, 255, 255),
'file':'./gui/img/Live.jpg',
},
] # end components
} # end background
] # end backgrounds
} }
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'Imager',
'title':u'SkyliveNG Imager',
'size':(348, 343),
'icon':'gui/img/ICONA.ico',
'style':['resizeable'],
'backgroundColor':(192, 192, 192),
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
{'type':'Menu',
'name':'menuPhoto',
'label':'&Adjust',
'enabled':False,
'items': [
{'type':'MenuItem',
'name':'menuAdjustPhoto',
'label':'A&djust',
'command':'adjust',
},
]
},
{'type':'Menu',
'name':'menuInfo',
'label':'&Info',
'enabled':False,
'items': [
{'type':'MenuItem',
'name':'menuInfoPhoto',
'label':'Read H&eader',
'command':'readHeader',
},
]
},
]
},
'components': [
{'type':'Button',
'name':'ButtonDownload',
'position':(50, 260),
'label':'Download FIT',
'visible':False,
},
{'type':'Button',
'name':'ButtonSave',
'position':(30, 260),
'size':(75, 23),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Save image',
'visible':False,
},
{'type':'Button',
'name':'ButtonClose',
'position':(200, 260),
'size':(-1, 23),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Close',
'visible':False,
},
{'type':'Button',
'name':'ButtonCompare',
'position':(280, 260),
'size':(160, 23),
'font':{'style': 'bold', 'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Compare with DSS_SEARCH',
'visible':False,
},
{'type': 'Button',
'name':'ButtonSaveAs',
'position':(110, 260),
'size':(85, 23),
'font':{'faceName': u'Arial', 'family': 'sansSerif', 'size': 8},
'label':'Save as..',
'visible':False,
},
{'type':'Image',
'name':'ImageShow',
'position':(10, 10),
'size':(320, 240),
'backgroundColor':(255, 255, 255),
'file':'./gui/img/Live.jpg',
},
] # end components
} # end background
] # end backgrounds
} }
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model, dialog, graphic
import os, wx, platform
import gui, imageadj, info
from zipfile import ZipFile as zip
from skylive.lang import language
class SkyliveImager(model.Background):
def on_initialize(self, event):
try:
self.parent = self.getParent()
self.autoMax = self.parent.autoMax
self.autoMin = self.parent.autoMin
self.userhome = self.parent.usrDefSavePath
self.header = self.parent.fitsHeader
except:
pass
#this don't work with wxPython 2.6
self.lang = self.parent.lang
self.gui = 'imager'
self.ItemText = language.getItemText
self.setGui()
try:
self.defineFrom()
except:
pass
def refresh(self):
if self.origImage[7]:
imgTomod = self.origImage[0].resize((self.origImage[1], self.origImage[2]))
else:
imgTomod = self.origImage[0]
image = wx.EmptyImage(self.origImage[1], self.origImage[2])
image.SetData(imgTomod.convert("RGB").tostring())
newBitmap = graphic.Bitmap()
newBitmap.setImageBits(image)
self.components.ImageShow.bitmap = newBitmap
print "FATTO"
def on_exit_command(self, event):
self.close()
def on_ButtonClose_mouseClick(self, event):
self.close()
def on_ButtonDownload_mouseClick(self, event):
try:
#self._parent.callInTwisted('downloadFits', self.telescope)
self._parent.TwistedLoop.downloadFits(self.telescope)
except:
pass
self.close()
def on_ButtonSave_mouseClick(self, event):
# XXX: impostare meglio estensione e filename
# XXX: gestire anche la conversione in bmp/jpg/altro
# XXX: gestire anche il saveimage per lo snapshot
if self.actionSave =="fit":
defaultFN = self._parent.components.FileName.text+".fit"
result = dialog.saveFileDialog(self, self.getText('SaveDialog_FIT'), self.userhome, defaultFN, 'FITS Files: (*.fit)|*.fit')
if result.accepted:
path = result.paths[0]
if os.path.exists(path):
try:
os.unlink(path)
readFile = zip(self.fitfile, 'r')
fitsData = readFile.read("SkyFrame.fit")
readFile.close()
savedFile = open(path, 'wb')
savedFile.write(fitsData)
savedFile.close()
except:
dialog.alertDialog("ERROR: Cannot overwrite "+str(path))
else:
readFile = zip(self.fitfile, 'r')
fitsData = readFile.read("SkyFrame.fit")
readFile.close()
savedFile = open(path, 'wb')
savedFile.write(fitsData)
savedFile.close()
elif self.actionSave == "bmp":
result = dialog.saveFileDialog(self, self.getText('SaveDialog_BMP'), self.userhome, 'snap.bmp', 'BMP Files: (*.bmp)|*.bmp')
if result.accepted:
path=result.paths[0]
if os.path.exists(path):
try:
os.unlink(path)
self.SnapBitmap.saveFile(path)
except:
dialog.alertDialog("ERROR: Cannot overwrite "+str(path))
else:
self.SnapBitmap.saveFile(path)
else:
pass
try:
self.mainPathChange(path)
except:
pass
def on_adjust_command(self, event=None):
if platform.system == "Microsoft":
sysType = "Windows"
else:
sysType = platform.system()
if not os.path.exists(os.path.normpath("./gui/imageadj."+sysType+".rsrc.py")):
sysType = "Linux"
self.adjustImg = model.childWindow(self, imageadj.imageAdj, "./gui/imageadj."+sysType+".rsrc.py")
self.adjustImg._parent = self
self.adjustImg.visible = True
def defineFrom(self):
if self.fromEvent == "photodown":
self.components.ButtonSave.label = self.getText('ButtonSave_FIT')
self.actionSave = "fit"
try:
self.MenuBar.setEnabled('menuPhoto', True)
self.MenuBar.setEnabled('menuInfo', True)
except:
self.menuBar.setEnabled('menuPhoto', True)
self.menuBar.setEnabled('menuInfo', True)
elif self.fromEvent == "snapshot":
self.components.ButtonSave.label = self.getText('ButtonSave_BMP')
self.actionSave = "bmp"
else:
pass
def on_readHeader_command(self, event):
hd = self.header
rsrc = "./gui/info.rsrc.py"
try:
if self.parent.systemType == 'Darwin':
rsrc = "./gui/info.rsrc.Darwin.py"
except:
pass
self.headerPop = model.childWindow(self, info.infoBox, rsrc)
self.headerPop.title = "Fits Header"
self.headerPop.components.infobox.text='FIELD\t\t\tVALUE\n'
fields = self.header.keys()
for x in fields:
try:
txtHeader = str(hd[x])+'\n'
self.headerPop.components.infobox.appendText(txtHeader)
except:
pass
def on_ButtonCompare_mouseClick(self, event):
try:
#self._parent.callInTwisted('downloadDss', self.imageData[0], self.imageData[1],
self._parent.TwistedLoop.downloadDss(self.imageData[0], self.imageData[1],
self.imageData[2], self.imageData[3])
except:
pass
def getText(self, item):
return self.ItemText(self.lang, self.gui, item)
def setGui(self):
self.components.ButtonDownload.label = self.getText('ButtonDownload')
self.components.ButtonCompare.label = self.getText('ButtonCompare')
self.components.ButtonClose.label = self.getText('ButtonClose')
self.components.ButtonSaveAs.label = self.getText('ButtonSaveAs')
submenu = ['menuFileExit', 'menuAdjustPhoto', 'menuInfoPhoto']
try:
for item in submenu:
idmenuItem = self.menuBar.getMenuId(item)
self.MenuBar.SetLabel(idmenuItem, self.getText(item))
except:
pass
def on_ButtonSaveAs_mouseClick(self, event):
self.getAndSaveImage()
def getAndSaveImage(self):
try:
imageFromPil = self.pilImage
except:
imageFromPil = False
if imageFromPil:
aStyle = wx.SAVE | wx.HIDE_READONLY | wx.OVERWRITE_PROMPT
result = dialog.saveFileDialog(self, self.getText('SaveDialog_SaveAs'), self.userhome, self._parent.components.FileName.text, 'BMP File: (*.bmp)|*.bmp|JPG File: (*.jpg)|*.jpg', aStyle)
if result.accepted:
path=result.paths[0]
if not os.path.splitext(os.path.split(path)[1])[1]:
dialog.alertDialog(self, self.getText('SaveDialog_alertSaveAs'))
self.getAndSaveImage()
else:
imageFromPil.save(path)
self.mainPathChange(path)
def mainPathChange(self, path):
newpath = path
if not os.path.isdir(path):
newpath, file = os.path.split(path)
if newpath != self.userhome and os.path.isdir(newpath):
print 'diverso cambio'
self.parent.components.PathField.text = newpath
self.parent.config.put_usrDefaultPath(newpath)
self.parent.usrDefSavePath = newpath
"""
Copyright (C) 2007-2009 Franco Lanza <nextime@nexlab.it>
Copyright (C) 2007-2009 Sandro Aliano <ita595@hotmail.com>
Copyright (C) 2007-2009 Ivan Bellia <skylive@skylive.it>
Web site: http://www.astronomix.org/trac/Skylive-NG
This file is part of Skylive-NG.
Skylive-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.
Skylive-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 Skylive-NG. If not, see <http://www.gnu.org/licenses/>.
"""
from Pycard import model
class infoBox(model.Background):
def on_initialize(self, event):
pass
def on_closeinfo_mouseClick(self, event):
self.close()
def on_size(self, event):
self.SetSizeHints(200, 150)
w, h = self.size
if w > 199 and h > 149:
self.components.htmlbox.size = (w-20, h-35)
self.components.closeinfo.posizion = ((w/2)-25, (h-35)+10)
self.panel.SetSize(self.size)
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':' ',
'icon':'gui/img/ICONA.ico',
'size':(530, 310),
'components': [
{'type':'Button',
'name':'closeinfo',
'position':(230, 285),
'size':(50, 25),
'label':u'Close',
},
{'type':'TextArea',
'name':'infobox',
'position':(10, 10),
'size':(510, 275),
'editable':False,
},
{'type':'InfoHtmlWindow',
'name':'htmlbox',
'position':(10, 10),
'size':(510, 275),
'editable':False,
'visible':False,
},
] # end components
} # end background
] # end backgrounds
} }
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="*.*.*" type="win32" />
<description>*</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls"
version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
</assembly>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment