gramps/src/guiQML/views/centralview.py
Benny Malengier 79d03159f3 Commit experimental QML interface, python gramps.py --qml to run
This is not part of Makefile system at the moment. Just proof of concept to see what can be done


svn: r16505
2011-01-30 16:39:28 +00:00

175 lines
5.6 KiB
Python

#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2010 Benny Malengier
#
# 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 2 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""
The main view from where other views are started
"""
#-------------------------------------------------------------------------
#
# Constants
#
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#
# Standard python modules
#
#-------------------------------------------------------------------------
import sys, os
#-------------------------------------------------------------------------
#
# set up logging
#
#-------------------------------------------------------------------------
import logging
LOG = logging.getLogger(".")
#-------------------------------------------------------------------------
#
# QT modules
#
#-------------------------------------------------------------------------
from PySide import QtCore
from PySide import QtGui
from PySide import QtDeclarative
from PySide import QtOpenGL
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import const
from gen.ggettext import gettext as _
#-------------------------------------------------------------------------
#
# Classes
#
#-------------------------------------------------------------------------
class DetailView(QtCore.QObject):
"""
Data known about a detail view that can be launched
"""
def __init__(self, name):
QtCore.QObject.__init__(self)
self.__name = name
def _name(self):
return self.__name
changed = QtCore.Signal()
#make Model.Column.property available in QML
name = QtCore.Property(unicode, _name, notify=changed)
class DetViewSumModel(QtCore.QAbstractListModel):
"""
A simple ListModel for the different detailed views
"""
COLUMNS = ('name', )
def __init__(self, detviews):
QtCore.QAbstractListModel.__init__(self)
self._detviews = detviews
self.setRoleNames(dict(enumerate(DetViewSumModel.COLUMNS)))
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self._detviews)
def data(self, index, role):
print 'role', role, DetViewSumModel.COLUMNS.index('name')
if index.isValid() and role == DetViewSumModel.COLUMNS.index('name'):
return self._detviews[index.row()]
return None
#-------------------------------------------------------------------------
#
# CentralView
#
#-------------------------------------------------------------------------
class CentralView(QtCore.QObject):
"""
Manages family tree list widget
"""
def __init__(self, dbstate, engine, viewshow):
"""
The manager is initialised with a dbstate on which GRAMPS is
working, and the engine to use context from.
"""
self.dbstate = dbstate
self.__viewshow = viewshow
QtCore.QObject.__init__(self)
self.const = {
'titlelabel': unicode("%s" % self.dbstate.db.get_dbname()),
}
print self.const['titlelabel']
#there is one DeclarativeEngine for global settings
self.__build_main_window(engine)
def __build_main_window(self, engine):
"""
Builds the QML interface
"""
parentcontext = engine.rootContext()
#Create a context for the family tree list
self.centralviewcontext = QtDeclarative.QDeclarativeContext(parentcontext)
#Create ListModel to use
detviews = DetViewSumModel([DetailView('People')])
#register them in the context
self.centralviewcontext.setContextProperty('Const', self.const)
self.centralviewcontext.setContextProperty('CentralView', self)
self.centralviewcontext.setContextProperty('DetViewSumModel', detviews)
#create a Component to show
self.centralview = QtDeclarative.QDeclarativeComponent(engine)
self.centralview.loadUrl(QtCore.QUrl.fromLocalFile(
os.path.join(const.ROOT_DIR, "guiQML", 'views', 'centralview.qml')))
#and obtain the QObject of it
self.Qcentralview = self.centralview.create(self.centralviewcontext)
def show(self, graphicsview, mainwindow):
"""
Paint the Component on the View and put it in the given mainwindow.
"""
#scene.addItem(self.Qfamtreeview)
graphicsview.setRootObject(self.Qcentralview)
graphicsview.show();
mainwindow.setCentralWidget(graphicsview)
mainwindow.show()
@QtCore.Slot(QtCore.QObject)
def detviewSelected(self, detview):
"""
We load the selected family tree
"""
print 'User clicked on:', detview.name
#now only Person piece to click on, so start that
from guiQML.views.personview import QMLPersonList
self.__viewshow(QMLPersonList)