vymview.cpp
author insilmaril
Fri, 15 May 2009 15:22:15 +0000
changeset 769 a6931cd6309a
parent 767 6d2b32f305f9
child 772 e3f722759c7e
permissions -rw-r--r--
more changes on views
insilmaril@726
     1
#include "vymview.h"
insilmaril@726
     2
insilmaril@727
     3
#include <iostream>
insilmaril@742
     4
using namespace std;
insilmaril@727
     5
insilmaril@763
     6
#include "linkablemapobj.h"
insilmaril@732
     7
#include "mainwindow.h"
insilmaril@726
     8
#include "mapeditor.h"
insilmaril@769
     9
#include "treeeditor.h"
insilmaril@726
    10
insilmaril@732
    11
extern Main *mainWindow;
insilmaril@732
    12
insilmaril@732
    13
insilmaril@742
    14
VymView::VymView(VymModel *m)
insilmaril@726
    15
{
insilmaril@742
    16
	model=m;
insilmaril@742
    17
insilmaril@726
    18
	// Create TreeView
insilmaril@769
    19
	treeEditor=new TreeEditor (model);
insilmaril@769
    20
	treeEditor->setModel ((QAbstractItemModel*)model);
insilmaril@769
    21
	//treeEditor->setMinimumWidth (50);
insilmaril@761
    22
insilmaril@769
    23
	treeEditor->setColumnWidth (0,350);
insilmaril@726
    24
insilmaril@769
    25
	selModel=treeEditor->selectionModel();
insilmaril@728
    26
	model->setSelectionModel (selModel);
insilmaril@727
    27
	connect (
insilmaril@727
    28
		selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@727
    29
		this,SLOT (changeSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@727
    30
insilmaril@726
    31
	// Create good old MapEditor
insilmaril@761
    32
	mapEditor=model->getMapEditor();
insilmaril@761
    33
	if (!mapEditor) mapEditor=new MapEditor (model);
insilmaril@728
    34
	connect (
insilmaril@728
    35
		selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@761
    36
		mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@753
    37
		/*
insilmaril@729
    38
	connect (
insilmaril@729
    39
		selModel, SIGNAL (currentChanged(const QModelIndex &, const QModelIndex &)), 
insilmaril@729
    40
		me,SLOT (updateCurrent(const QModelIndex &,const QModelIndex &)));
insilmaril@753
    41
		*/
insilmaril@753
    42
		/*
insilmaril@753
    43
*/
insilmaril@753
    44
	connect (
insilmaril@753
    45
		model, SIGNAL (dataChanged(const QModelIndex &, const QModelIndex &)), 
insilmaril@761
    46
		mapEditor,SLOT (updateData(const QModelIndex &) ) );
insilmaril@726
    47
insilmaril@746
    48
	// VymModel may want to update selection or other data, e.g. during animation
insilmaril@728
    49
	connect (
insilmaril@728
    50
		model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@761
    51
		mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@761
    52
insilmaril@746
    53
	connect (
insilmaril@753
    54
		model, SIGNAL (noteHasChanged(QModelIndex) ),
insilmaril@753
    55
		mainWindow, SLOT (updateNoteEditor (QModelIndex) ) );
insilmaril@746
    56
		
insilmaril@763
    57
	connect (
insilmaril@763
    58
		model, SIGNAL (expandAll() ),
insilmaril@763
    59
		this, SLOT (expandAll () ) );
insilmaril@763
    60
		
insilmaril@763
    61
	connect (
insilmaril@763
    62
		model, SIGNAL (showSelection() ),
insilmaril@763
    63
		this, SLOT (showSelection() ) );
insilmaril@763
    64
		
insilmaril@726
    65
insilmaril@761
    66
	mapEditor->setAntiAlias (mainWindow->isAliased());
insilmaril@761
    67
	mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform());
insilmaril@726
    68
insilmaril@769
    69
	addWidget (treeEditor);
insilmaril@761
    70
	addWidget (mapEditor);
insilmaril@726
    71
insilmaril@726
    72
	// Set geometry
insilmaril@761
    73
	QList <int> widths;
insilmaril@761
    74
	widths<<120;
insilmaril@761
    75
	widths<<600;
insilmaril@761
    76
	setSizes(widths);
insilmaril@726
    77
}
insilmaril@726
    78
insilmaril@769
    79
void VymView::initFocus()
insilmaril@769
    80
{
insilmaril@769
    81
	mapEditor->setFocus();
insilmaril@769
    82
}
insilmaril@769
    83
insilmaril@726
    84
QItemSelectionModel* VymView::selectionModel() 
insilmaril@726
    85
{
insilmaril@769
    86
	if (treeEditor) 
insilmaril@728
    87
		return selModel;
insilmaril@728
    88
	else 
insilmaril@769
    89
		std::cout <<"VymView::selectionModel: hey, no treeEditor so far???\n";
insilmaril@726
    90
	return NULL;
insilmaril@726
    91
}
insilmaril@726
    92
insilmaril@746
    93
void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel)
insilmaril@727
    94
{
insilmaril@746
    95
	/*
insilmaril@746
    96
	cout <<"VymView::changeSelection (";
insilmaril@746
    97
	if (!newsel.indexes().isEmpty() )
insilmaril@746
    98
		cout << model->getItem(newsel.indexes().first() )->getHeading().toStdString();
insilmaril@746
    99
	cout << " <- ";
insilmaril@746
   100
	if (!oldsel.indexes().isEmpty() )
insilmaril@746
   101
		cout << model->getItem(oldsel.indexes().first() )->getHeading().toStdString();
insilmaril@746
   102
	cout << ")\n";
insilmaril@746
   103
	*/
insilmaril@727
   104
insilmaril@746
   105
	// Notify mainwindow to update satellites like NoteEditor, if needed (model==currenModel...)
insilmaril@746
   106
	mainWindow->changeSelection (model,newsel,oldsel);	// FIXME-3 maybe connect VymModel <-> MainWindow directly?
insilmaril@767
   107
	showSelection();
insilmaril@727
   108
}
insilmaril@727
   109
insilmaril@763
   110
void VymView::expandAll()
insilmaril@763
   111
{
insilmaril@769
   112
	treeEditor->expandAll();
insilmaril@763
   113
}
insilmaril@763
   114
insilmaril@763
   115
void VymView::showSelection()
insilmaril@763
   116
{
insilmaril@769
   117
	treeEditor->scrollTo(
insilmaril@763
   118
		model->getSelectedIndex(), 
insilmaril@763
   119
		//QAbstractItemView::PositionAtCenter   
insilmaril@763
   120
		QAbstractItemView::EnsureVisible
insilmaril@763
   121
	);
insilmaril@763
   122
insilmaril@763
   123
	LinkableMapObj* lmo=model->getSelectedLMO();
insilmaril@767
   124
	if (lmo) 
insilmaril@767
   125
		mapEditor->setScrollBarPosTarget (lmo->getBBox() );
insilmaril@763
   126
}
insilmaril@763
   127