vymview.cpp
author insilmaril
Mon, 14 Jun 2010 13:59:17 +0000
changeset 848 e265f07f2173
parent 842 bec082472471
permissions -rw-r--r--
Fixed tmp relink, colored headings in TreeView
insilmaril@726
     1
#include "vymview.h"
insilmaril@726
     2
insilmaril@804
     3
#include "branchitem.h"
insilmaril@732
     4
#include "mainwindow.h"
insilmaril@726
     5
#include "mapeditor.h"
insilmaril@769
     6
#include "treeeditor.h"
insilmaril@726
     7
insilmaril@732
     8
extern Main *mainWindow;
insilmaril@732
     9
insilmaril@732
    10
insilmaril@742
    11
VymView::VymView(VymModel *m)
insilmaril@726
    12
{
insilmaril@742
    13
	model=m;
insilmaril@742
    14
insilmaril@726
    15
	// Create TreeView
insilmaril@769
    16
	treeEditor=new TreeEditor (model);
insilmaril@788
    17
	//treeEditor->setModel ((QAbstractItemModel*)model);
insilmaril@769
    18
	//treeEditor->setMinimumWidth (50);
insilmaril@761
    19
insilmaril@788
    20
	treeEditor->setColumnWidth (0,150);
insilmaril@788
    21
	treeEditor->setAnimated (true);
insilmaril@726
    22
insilmaril@801
    23
	selModel=new QItemSelectionModel (model);
insilmaril@801
    24
insilmaril@728
    25
	model->setSelectionModel (selModel);
insilmaril@804
    26
	treeEditor->setSelectionModel (selModel);
insilmaril@727
    27
insilmaril@726
    28
	// Create good old MapEditor
insilmaril@761
    29
	mapEditor=model->getMapEditor();
insilmaril@761
    30
	if (!mapEditor) mapEditor=new MapEditor (model);
insilmaril@772
    31
insilmaril@808
    32
	// Create Layout 
insilmaril@829
    33
	QVBoxLayout* mainLayout = new QVBoxLayout (this); //FIXME-4 not needed
insilmaril@829
    34
	QSplitter *splitter= new QSplitter (this);
insilmaril@808
    35
insilmaril@808
    36
	QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
insilmaril@808
    37
    splitter->setSizePolicy(sizePolicy);
insilmaril@808
    38
	mainLayout->addWidget (splitter);
insilmaril@808
    39
insilmaril@801
    40
	// Connect selections
insilmaril@801
    41
insilmaril@804
    42
		// Selection in Model changed	
insilmaril@801
    43
		connect (
insilmaril@801
    44
			selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@801
    45
			this,SLOT (changeSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@801
    46
insilmaril@804
    47
		// Tell MapEditor to update selection
insilmaril@807
    48
		/* FIXME-3 done implicit here in VymView
insilmaril@801
    49
		connect (
insilmaril@801
    50
			selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@801
    51
			mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@807
    52
			*/
insilmaril@801
    53
insilmaril@823
    54
		// Needed to update selbox during animation
insilmaril@804
    55
		connect (
insilmaril@804
    56
			model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@804
    57
			mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@804
    58
insilmaril@801
    59
	// Connect data changed signals	
insilmaril@753
    60
	connect (
insilmaril@753
    61
		model, SIGNAL (dataChanged(const QModelIndex &, const QModelIndex &)), 
insilmaril@761
    62
		mapEditor,SLOT (updateData(const QModelIndex &) ) );
insilmaril@726
    63
insilmaril@800
    64
	connect (
insilmaril@800
    65
		model, SIGNAL (sortFilterChanged (const QString &)),
insilmaril@800
    66
		treeEditor, SLOT (setSortFilter (const QString &) ) );
insilmaril@800
    67
insilmaril@746
    68
	connect (
insilmaril@753
    69
		model, SIGNAL (noteHasChanged(QModelIndex) ),
insilmaril@753
    70
		mainWindow, SLOT (updateNoteEditor (QModelIndex) ) );
insilmaril@746
    71
		
insilmaril@763
    72
	connect (
insilmaril@763
    73
		model, SIGNAL (expandAll() ),
insilmaril@763
    74
		this, SLOT (expandAll () ) );
insilmaril@763
    75
		
insilmaril@763
    76
	connect (
insilmaril@804
    77
		model, SIGNAL (expandOneLevel() ),
insilmaril@804
    78
		this, SLOT (expandOneLevel() ) );
insilmaril@804
    79
		
insilmaril@804
    80
	connect (
insilmaril@804
    81
		model, SIGNAL (collapseOneLevel() ),
insilmaril@804
    82
		this, SLOT (collapseOneLevel() ) );
insilmaril@804
    83
		
insilmaril@804
    84
	connect (
insilmaril@763
    85
		model, SIGNAL (showSelection() ),
insilmaril@763
    86
		this, SLOT (showSelection() ) );
insilmaril@763
    87
		
insilmaril@837
    88
	connect (
insilmaril@837
    89
		model, SIGNAL (updateLayout() ),
insilmaril@837
    90
		mapEditor, SLOT (autoLayout() ) );
insilmaril@837
    91
		
insilmaril@761
    92
	mapEditor->setAntiAlias (mainWindow->isAliased());
insilmaril@761
    93
	mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform());
insilmaril@726
    94
insilmaril@808
    95
	splitter->addWidget (treeEditor);
insilmaril@808
    96
	splitter->addWidget (mapEditor);
insilmaril@726
    97
insilmaril@726
    98
	// Set geometry
insilmaril@761
    99
	QList <int> widths;
insilmaril@788
   100
	widths<<200;
insilmaril@761
   101
	widths<<600;
insilmaril@808
   102
	splitter->setSizes(widths);
insilmaril@726
   103
}
insilmaril@726
   104
insilmaril@772
   105
VymView::~VymView()
insilmaril@772
   106
{
insilmaril@772
   107
	//cout << "Destructor VymView\n";
insilmaril@772
   108
}
insilmaril@772
   109
insilmaril@772
   110
VymModel* VymView::getModel()
insilmaril@772
   111
{
insilmaril@772
   112
	return model;
insilmaril@772
   113
}
insilmaril@772
   114
insilmaril@772
   115
MapEditor* VymView::getMapEditor()
insilmaril@772
   116
{
insilmaril@772
   117
	return mapEditor;
insilmaril@772
   118
}
insilmaril@772
   119
insilmaril@842
   120
TreeEditor* VymView::getTreeEditor()
insilmaril@842
   121
{
insilmaril@842
   122
	return treeEditor;
insilmaril@842
   123
}
insilmaril@842
   124
insilmaril@769
   125
void VymView::initFocus()
insilmaril@769
   126
{
insilmaril@769
   127
	mapEditor->setFocus();
insilmaril@769
   128
}
insilmaril@769
   129
insilmaril@807
   130
void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel)	
insilmaril@727
   131
{
insilmaril@807
   132
	//cout << "VV::changeSelection   newsel.count="<<newsel.indexes().count()<<endl;
insilmaril@804
   133
insilmaril@807
   134
	mainWindow->changeSelection (model,newsel,oldsel);	
insilmaril@807
   135
	mapEditor->updateSelection (newsel,oldsel);
insilmaril@804
   136
insilmaril@804
   137
	if (newsel.indexes().count()>0)
insilmaril@804
   138
	{
insilmaril@804
   139
insilmaril@807
   140
		
insilmaril@804
   141
		QModelIndex ix=newsel.indexes().first();
insilmaril@804
   142
		selModel->setCurrentIndex (ix,QItemSelectionModel::ClearAndSelect  );
insilmaril@804
   143
		treeEditor->setCurrentIndex (ix);
insilmaril@804
   144
		showSelection();
insilmaril@807
   145
		
insilmaril@804
   146
	}
insilmaril@801
   147
}
insilmaril@777
   148
insilmaril@763
   149
void VymView::expandAll()
insilmaril@763
   150
{
insilmaril@769
   151
	treeEditor->expandAll();
insilmaril@763
   152
}
insilmaril@763
   153
insilmaril@804
   154
void VymView::expandOneLevel()
insilmaril@804
   155
{
insilmaril@804
   156
	int level=999999;
insilmaril@804
   157
	int d;
insilmaril@804
   158
	BranchItem *cur=NULL;
insilmaril@804
   159
	BranchItem *prev=NULL;
insilmaril@804
   160
	QModelIndex pix;
insilmaril@804
   161
insilmaril@804
   162
	// Find level to expand
insilmaril@804
   163
	model->nextBranch(cur,prev);
insilmaril@804
   164
	while (cur) 
insilmaril@804
   165
	{
insilmaril@804
   166
		pix=model->index (cur);
insilmaril@804
   167
		d=cur->depth();
insilmaril@804
   168
		if (!treeEditor->isExpanded(pix) && d < level)
insilmaril@804
   169
			level=d;
insilmaril@804
   170
		model->nextBranch(cur,prev);	
insilmaril@804
   171
	}
insilmaril@804
   172
insilmaril@804
   173
	// Expand all to level
insilmaril@804
   174
	cur=NULL;
insilmaril@804
   175
	prev=NULL;
insilmaril@804
   176
	model->nextBranch(cur,prev);
insilmaril@804
   177
	while (cur) 
insilmaril@804
   178
	{
insilmaril@804
   179
		pix=model->index (cur);
insilmaril@804
   180
		d=cur->depth();
insilmaril@804
   181
		if (!treeEditor->isExpanded(pix) && d <= level && cur->branchCount()>0)
insilmaril@804
   182
			treeEditor->setExpanded(pix,true);
insilmaril@804
   183
		model->nextBranch(cur,prev);	
insilmaril@804
   184
	}
insilmaril@804
   185
	/* FIXME-3 optimize expanding by using flat version of next
insilmaril@804
   186
	model->nextBranch(cur,prev,false);
insilmaril@804
   187
	while (cur) 
insilmaril@804
   188
	{
insilmaril@804
   189
		cout << "ok: "<<cur->getHeadingStd()<<endl./re/videochristinaprison1_wmvl.wmv
insilmaril@804
   190
;
insilmaril@804
   191
		model->nextBranch(cur,prev,false);	
insilmaril@804
   192
	}
insilmaril@804
   193
	*/
insilmaril@804
   194
}
insilmaril@804
   195
insilmaril@804
   196
void VymView::collapseOneLevel()
insilmaril@804
   197
{
insilmaril@804
   198
	int level=-1;
insilmaril@804
   199
	int d;
insilmaril@804
   200
	BranchItem *cur=NULL;
insilmaril@804
   201
	BranchItem *prev=NULL;
insilmaril@804
   202
	QModelIndex pix;
insilmaril@804
   203
insilmaril@804
   204
	// Find level to collapse
insilmaril@804
   205
	model->nextBranch(cur,prev);
insilmaril@804
   206
	while (cur) 
insilmaril@804
   207
	{
insilmaril@804
   208
		pix=model->index (cur);
insilmaril@804
   209
		d=cur->depth();
insilmaril@804
   210
		if (treeEditor->isExpanded(pix) && d > level)
insilmaril@804
   211
			level=d;
insilmaril@804
   212
		model->nextBranch(cur,prev);	
insilmaril@804
   213
	}
insilmaril@804
   214
insilmaril@804
   215
	// collapse all to level
insilmaril@804
   216
	cur=NULL;
insilmaril@804
   217
	prev=NULL;
insilmaril@804
   218
	model->nextBranch(cur,prev);
insilmaril@804
   219
	while (cur) 
insilmaril@804
   220
	{
insilmaril@804
   221
		pix=model->index (cur);
insilmaril@804
   222
		d=cur->depth();
insilmaril@804
   223
		if (treeEditor->isExpanded(pix) && d >= level)
insilmaril@804
   224
			treeEditor->setExpanded(pix,false);
insilmaril@804
   225
		model->nextBranch(cur,prev);	
insilmaril@804
   226
	}
insilmaril@804
   227
}
insilmaril@804
   228
insilmaril@763
   229
void VymView::showSelection()
insilmaril@763
   230
{
insilmaril@772
   231
	QModelIndex ix=model->getSelectedIndex();
insilmaril@772
   232
	treeEditor->scrollTo( ix, QAbstractItemView::EnsureVisible);
insilmaril@807
   233
	mapEditor->scrollTo ( ix);	// FIXME-3 also called from MapEditor::updateSelection...
insilmaril@763
   234
}
insilmaril@763
   235
insilmaril@823
   236
void VymView::toggleTreeEditor()
insilmaril@823
   237
{
insilmaril@823
   238
	if (treeEditor->isVisible() )
insilmaril@823
   239
		treeEditor->hide();
insilmaril@823
   240
	else
insilmaril@823
   241
		treeEditor->show();
insilmaril@823
   242
}
insilmaril@823
   243
insilmaril@823
   244