79d03159f3
This is not part of Makefile system at the moment. Just proof of concept to see what can be done svn: r16505
226 lines
7.5 KiB
Python
226 lines
7.5 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
|
|
"""
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
# Constants
|
|
#
|
|
#-------------------------------------------------------------------------
|
|
OPENGL = True
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
# 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 cli.clidbman import CLIDbManager, NAME_FILE, time_val
|
|
from gen.ggettext import gettext as _
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
# Classes
|
|
#
|
|
#-------------------------------------------------------------------------
|
|
|
|
#open_icon = QtGui.QIcon.fromTheme('open')
|
|
FAMTREE_ICONPATH = os.path.join(const.IMAGE_DIR, '22x22', 'gramps.png')
|
|
|
|
class FamTreeWrapper(QtCore.QObject):
|
|
"""
|
|
A QObject wrapper
|
|
"""
|
|
def __init__(self, thing, dbman):
|
|
QtCore.QObject.__init__(self)
|
|
self.__dbman = dbman
|
|
self.__name = thing[CLIDbManager.IND_NAME]
|
|
self.__path = thing[CLIDbManager.IND_PATH]
|
|
self.__path_namefile = thing[CLIDbManager.IND_PATH_NAMEFILE]
|
|
self.__last_access = thing[CLIDbManager.IND_TVAL_STR]
|
|
self.__use_icon = thing[CLIDbManager.IND_USE_ICON_BOOL]
|
|
self.__icon = thing[CLIDbManager.IND_STOCK_ID]
|
|
|
|
changed = QtCore.Signal()
|
|
changed_name = QtCore.Signal()
|
|
|
|
def _name(self): return self.__name
|
|
def _path(self): return self.__path
|
|
def _last_access(self): return self.__last_access
|
|
def _use_icon(self): return self.__use_icon
|
|
def _icon(self): return self.__icon
|
|
|
|
def _set_name(self, name):
|
|
self.__name = name
|
|
self.__dbman.rename_database(self.__path_namefile, name)
|
|
self.changed_name.emit()
|
|
|
|
name = QtCore.Property(unicode, _name, _set_name, notify=changed_name)
|
|
path = QtCore.Property(unicode, _path, notify=changed)
|
|
last_access = QtCore.Property(unicode, _last_access, notify=changed)
|
|
use_icon = QtCore.Property(bool, _use_icon, notify=changed)
|
|
icon = QtCore.Property(unicode, _icon, notify=changed)
|
|
|
|
class FamTreeListModel(QtCore.QAbstractListModel):
|
|
"""
|
|
A simple ListModel
|
|
"""
|
|
COLUMNS = ('name', 'path', 'last_access', 'use_icon', 'icon')
|
|
|
|
def __init__(self, famtrees):
|
|
QtCore.QAbstractListModel.__init__(self)
|
|
self._famtrees = famtrees
|
|
self.setRoleNames(dict(enumerate(FamTreeListModel.COLUMNS)))
|
|
|
|
def rowCount(self, parent=QtCore.QModelIndex()):
|
|
return len(self._famtrees)
|
|
|
|
def data(self, index, role):
|
|
if index.isValid() and role == FamTreeListModel.COLUMNS.index('name'):
|
|
return self._famtrees[index.row()]
|
|
return None
|
|
|
|
def append_famtree(self, famtree):
|
|
"""
|
|
Append a FamTreeWrapper to the family tree litsmodel
|
|
"""
|
|
self.beginInsertRows(QtCore.QModelIndex(), self.rowCount(), self.rowCount())
|
|
self._famtrees.append(famtree)
|
|
self.endInsertRows()
|
|
|
|
#-------------------------------------------------------------------------
|
|
#
|
|
# DbManager
|
|
#
|
|
#-------------------------------------------------------------------------
|
|
|
|
class DbManager(CLIDbManager, QtCore.QObject):
|
|
"""
|
|
Manages family tree list widget
|
|
"""
|
|
def __init__(self, dbstate, engine, onselectcallback):
|
|
"""
|
|
The manager is initialised with a dbstate on which GRAMPS is
|
|
working, and the engine to use context from.
|
|
"""
|
|
self.__busy = False
|
|
self.__onselect = onselectcallback
|
|
QtCore.QObject.__init__(self)
|
|
CLIDbManager.__init__(self, dbstate)
|
|
#constants needed in the QML
|
|
self.const = {
|
|
'titlelabel': "Gramps - %s" % _("Family Trees"),
|
|
'addbtnlbl': _("Add a Family Tree"),
|
|
'famtreeicon': FAMTREE_ICONPATH
|
|
}
|
|
#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.famtreecontext = QtDeclarative.QDeclarativeContext(parentcontext)
|
|
#Create ListModel to use
|
|
famtreesQT = [FamTreeWrapper(obj, self) for obj in self.current_names]
|
|
self.famtrees = FamTreeListModel(famtreesQT)
|
|
|
|
#register them in the context
|
|
self.famtreecontext.setContextProperty('Const', self.const)
|
|
self.famtreecontext.setContextProperty('DbManager', self)
|
|
self.famtreecontext.setContextProperty('FamTreeListModel', self.famtrees)
|
|
|
|
#create a Component to show
|
|
self.famtreeview = QtDeclarative.QDeclarativeComponent(engine)
|
|
self.famtreeview.loadUrl(QtCore.QUrl.fromLocalFile(
|
|
os.path.join(const.ROOT_DIR, "guiQML", 'views', 'dbman.qml')))
|
|
#and obtain the QObject of it
|
|
self.Qfamtreeview = self.famtreeview.create(self.famtreecontext)
|
|
|
|
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.Qfamtreeview)
|
|
graphicsview.show();
|
|
mainwindow.setCentralWidget(graphicsview)
|
|
mainwindow.show()
|
|
|
|
@QtCore.Slot(QtCore.QObject)
|
|
def famtreeSelected(self, wrapper):
|
|
"""
|
|
We load the selected family tree
|
|
"""
|
|
if self.__busy:
|
|
return
|
|
self.__busy = True
|
|
self.__onselect(wrapper._path())
|
|
self.__busy = False
|
|
|
|
@QtCore.Slot(QtCore.QObject)
|
|
def addfamtree(self, _):
|
|
"""
|
|
We add a family tree
|
|
"""
|
|
if self.__busy:
|
|
return
|
|
self.__busy = True
|
|
print 'User clicked on:', 'add fam tree'
|
|
new_path, title = self.create_new_db_cli(None)
|
|
path_name = os.path.join(new_path, NAME_FILE)
|
|
(tval, last) = time_val(new_path)
|
|
self.famtrees.append_famtree(FamTreeWrapper([title, new_path, path_name,
|
|
last, tval, False, '']))
|
|
self.__busy = False
|
|
|