vymview.cpp
author insilmaril
Tue, 02 Mar 2010 13:59:19 +0000
changeset 825 1ad892c1a709
parent 823 0bba81dde1bc
child 829 832e96c9abb6
permissions -rw-r--r--
Added file for later dockwidget showing all search results at once
insilmaril@726
     1
#include "vymview.h"
insilmaril@726
     2
insilmaril@804
     3
#include "branchitem.h"
insilmaril@808
     4
#include "findwidget.h"
insilmaril@732
     5
#include "mainwindow.h"
insilmaril@726
     6
#include "mapeditor.h"
insilmaril@769
     7
#include "treeeditor.h"
insilmaril@726
     8
insilmaril@732
     9
extern Main *mainWindow;
insilmaril@732
    10
insilmaril@732
    11
insilmaril@742
    12
VymView::VymView(VymModel *m)
insilmaril@726
    13
{
insilmaril@742
    14
	model=m;
insilmaril@742
    15
insilmaril@808
    16
	// Create findWidget
insilmaril@808
    17
	findWidget=new FindWidget (this);
insilmaril@810
    18
	findWidget->hide();
insilmaril@808
    19
insilmaril@726
    20
	// Create TreeView
insilmaril@769
    21
	treeEditor=new TreeEditor (model);
insilmaril@788
    22
	//treeEditor->setModel ((QAbstractItemModel*)model);
insilmaril@769
    23
	//treeEditor->setMinimumWidth (50);
insilmaril@761
    24
insilmaril@788
    25
	treeEditor->setColumnWidth (0,150);
insilmaril@788
    26
	treeEditor->setAnimated (true);
insilmaril@726
    27
insilmaril@822
    28
	// FIXME-3 use proxySelModel=treeEditor->selectionModel();
insilmaril@801
    29
	selModel=new QItemSelectionModel (model);
insilmaril@801
    30
insilmaril@801
    31
	//model->setSelectionModel (proxySelModel);
insilmaril@728
    32
	model->setSelectionModel (selModel);
insilmaril@804
    33
	treeEditor->setSelectionModel (selModel);
insilmaril@727
    34
insilmaril@726
    35
	// Create good old MapEditor
insilmaril@761
    36
	mapEditor=model->getMapEditor();
insilmaril@761
    37
	if (!mapEditor) mapEditor=new MapEditor (model);
insilmaril@772
    38
insilmaril@808
    39
	// Create Layout 
insilmaril@808
    40
	QVBoxLayout* mainLayout = new QVBoxLayout (this);
insilmaril@808
    41
	QSplitter *splitter= new QSplitter;
insilmaril@808
    42
insilmaril@808
    43
	QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
insilmaril@808
    44
    //sizePolicy.setHorizontalStretch(0);
insilmaril@808
    45
    //sizePolicy.setVerticalStretch(0);
insilmaril@808
    46
    //sizePolicy.setHeightForWidth(this->sizePolicy().hasHeightForWidth());
insilmaril@808
    47
    splitter->setSizePolicy(sizePolicy);
insilmaril@808
    48
	mainLayout->addWidget (splitter);
insilmaril@808
    49
	mainLayout->addWidget (findWidget);
insilmaril@808
    50
insilmaril@801
    51
	// Connect selections
insilmaril@801
    52
insilmaril@801
    53
		// Proxymodel changed
insilmaril@804
    54
		/*
insilmaril@801
    55
		connect (
insilmaril@801
    56
			proxySelModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@801
    57
			this,SLOT (changeProxySelection(const QItemSelection &,const QItemSelection &)));
insilmaril@804
    58
*/
insilmaril@801
    59
insilmaril@804
    60
		// Selection in Model changed	
insilmaril@801
    61
		connect (
insilmaril@801
    62
			selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@801
    63
			this,SLOT (changeSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@801
    64
insilmaril@804
    65
		// Tell MapEditor to update selection
insilmaril@807
    66
		/* FIXME-3 done implicit here in VymView
insilmaril@801
    67
		connect (
insilmaril@801
    68
			selModel, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@801
    69
			mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@807
    70
			*/
insilmaril@801
    71
insilmaril@823
    72
		// Needed to update selbox during animation
insilmaril@804
    73
		connect (
insilmaril@804
    74
			model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
insilmaril@804
    75
			mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
insilmaril@804
    76
insilmaril@801
    77
	// Connect data changed signals	
insilmaril@753
    78
	connect (
insilmaril@753
    79
		model, SIGNAL (dataChanged(const QModelIndex &, const QModelIndex &)), 
insilmaril@761
    80
		mapEditor,SLOT (updateData(const QModelIndex &) ) );
insilmaril@726
    81
insilmaril@800
    82
	connect (
insilmaril@800
    83
		model, SIGNAL (sortFilterChanged (const QString &)),
insilmaril@800
    84
		treeEditor, SLOT (setSortFilter (const QString &) ) );
insilmaril@800
    85
insilmaril@746
    86
	connect (
insilmaril@753
    87
		model, SIGNAL (noteHasChanged(QModelIndex) ),
insilmaril@753
    88
		mainWindow, SLOT (updateNoteEditor (QModelIndex) ) );
insilmaril@746
    89
		
insilmaril@763
    90
	connect (
insilmaril@763
    91
		model, SIGNAL (expandAll() ),
insilmaril@763
    92
		this, SLOT (expandAll () ) );
insilmaril@763
    93
		
insilmaril@763
    94
	connect (
insilmaril@804
    95
		model, SIGNAL (expandOneLevel() ),
insilmaril@804
    96
		this, SLOT (expandOneLevel() ) );
insilmaril@804
    97
		
insilmaril@804
    98
	connect (
insilmaril@804
    99
		model, SIGNAL (collapseOneLevel() ),
insilmaril@804
   100
		this, SLOT (collapseOneLevel() ) );
insilmaril@804
   101
		
insilmaril@804
   102
	connect (
insilmaril@763
   103
		model, SIGNAL (showSelection() ),
insilmaril@763
   104
		this, SLOT (showSelection() ) );
insilmaril@763
   105
		
insilmaril@808
   106
	// Find	
insilmaril@808
   107
	connect (
insilmaril@808
   108
		model, SIGNAL (showFindWidget() ),
insilmaril@808
   109
		this, SLOT (showFindWidget() ) );
insilmaril@808
   110
		
insilmaril@808
   111
	connect (
insilmaril@812
   112
		findWidget , SIGNAL (hideFindWidget() ),
insilmaril@812
   113
		this, SLOT (hideFindWidget() ) );
insilmaril@812
   114
		
insilmaril@812
   115
	connect (
insilmaril@808
   116
		findWidget, SIGNAL (nextButton (QString) ),
insilmaril@808
   117
		this, SLOT (findNext(QString) ) );
insilmaril@808
   118
		
insilmaril@761
   119
	mapEditor->setAntiAlias (mainWindow->isAliased());
insilmaril@761
   120
	mapEditor->setSmoothPixmap(mainWindow->hasSmoothPixmapTransform());
insilmaril@726
   121
insilmaril@808
   122
	splitter->addWidget (treeEditor);
insilmaril@808
   123
	splitter->addWidget (mapEditor);
insilmaril@726
   124
insilmaril@726
   125
	// Set geometry
insilmaril@761
   126
	QList <int> widths;
insilmaril@788
   127
	widths<<200;
insilmaril@761
   128
	widths<<600;
insilmaril@808
   129
	splitter->setSizes(widths);
insilmaril@726
   130
}
insilmaril@726
   131
insilmaril@772
   132
VymView::~VymView()
insilmaril@772
   133
{
insilmaril@772
   134
	//cout << "Destructor VymView\n";
insilmaril@772
   135
}
insilmaril@772
   136
insilmaril@772
   137
VymModel* VymView::getModel()
insilmaril@772
   138
{
insilmaril@772
   139
	return model;
insilmaril@772
   140
}
insilmaril@772
   141
insilmaril@772
   142
MapEditor* VymView::getMapEditor()
insilmaril@772
   143
{
insilmaril@772
   144
	return mapEditor;
insilmaril@772
   145
}
insilmaril@772
   146
insilmaril@769
   147
void VymView::initFocus()
insilmaril@769
   148
{
insilmaril@769
   149
	mapEditor->setFocus();
insilmaril@769
   150
}
insilmaril@769
   151
insilmaril@807
   152
void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel)	
insilmaril@727
   153
{
insilmaril@807
   154
	//cout << "VV::changeSelection   newsel.count="<<newsel.indexes().count()<<endl;
insilmaril@804
   155
insilmaril@807
   156
	mainWindow->changeSelection (model,newsel,oldsel);	
insilmaril@807
   157
	mapEditor->updateSelection (newsel,oldsel);
insilmaril@804
   158
insilmaril@804
   159
	if (newsel.indexes().count()>0)
insilmaril@804
   160
	{
insilmaril@804
   161
insilmaril@822
   162
	/* FIXME-3 use proxymodel
insilmaril@804
   163
		proxySelModel->select (
insilmaril@804
   164
			treeEditor->getProxyModel()->mapSelectionFromSource (newsel),
insilmaril@804
   165
			QItemSelectionModel::ClearAndSelect );
insilmaril@804
   166
		*/
insilmaril@807
   167
		
insilmaril@804
   168
		QModelIndex ix=newsel.indexes().first();
insilmaril@804
   169
		selModel->setCurrentIndex (ix,QItemSelectionModel::ClearAndSelect  );
insilmaril@804
   170
		treeEditor->setCurrentIndex (ix);
insilmaril@804
   171
		showSelection();
insilmaril@807
   172
		
insilmaril@804
   173
	}
insilmaril@801
   174
}
insilmaril@777
   175
insilmaril@810
   176
void VymView::changeProxySelection (const QItemSelection &newsel, const QItemSelection &)
insilmaril@801
   177
{
insilmaril@801
   178
	// Notify mainwindow to update satellites, but map selection to 
insilmaril@801
   179
	// original model first
insilmaril@801
   180
insilmaril@806
   181
	//cout << "VV::changeProxySelection   newsel.count="<<newsel.indexes().count()<<endl;
insilmaril@804
   182
	if (!newsel.indexes().isEmpty())
insilmaril@804
   183
	{
insilmaril@823
   184
	/* FIXME-3 need to set current, too
insilmaril@804
   185
	*/
insilmaril@804
   186
		proxySelModel->setCurrentIndex (
insilmaril@804
   187
			newsel.indexes().first(),
insilmaril@804
   188
			QItemSelectionModel::ClearAndSelect );
insilmaril@804
   189
	treeEditor->setCurrentIndex (newsel.indexes().first() );
insilmaril@804
   190
	}
insilmaril@804
   191
insilmaril@801
   192
	// Re-emit but map selection first
insilmaril@804
   193
	selModel->select (
insilmaril@804
   194
		treeEditor->getProxyModel()->mapSelectionToSource (newsel),
insilmaril@802
   195
		QItemSelectionModel::ClearAndSelect );
insilmaril@804
   196
insilmaril@803
   197
	showSelection();
insilmaril@727
   198
}
insilmaril@727
   199
insilmaril@763
   200
void VymView::expandAll()
insilmaril@763
   201
{
insilmaril@769
   202
	treeEditor->expandAll();
insilmaril@763
   203
}
insilmaril@763
   204
insilmaril@804
   205
void VymView::expandOneLevel()
insilmaril@804
   206
{
insilmaril@804
   207
	int level=999999;
insilmaril@804
   208
	int d;
insilmaril@804
   209
	BranchItem *cur=NULL;
insilmaril@804
   210
	BranchItem *prev=NULL;
insilmaril@804
   211
	QModelIndex pix;
insilmaril@804
   212
insilmaril@804
   213
	// Find level to expand
insilmaril@804
   214
	model->nextBranch(cur,prev);
insilmaril@804
   215
	while (cur) 
insilmaril@804
   216
	{
insilmaril@822
   217
		// FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur));
insilmaril@804
   218
		pix=model->index (cur);
insilmaril@804
   219
		d=cur->depth();
insilmaril@804
   220
		if (!treeEditor->isExpanded(pix) && d < level)
insilmaril@804
   221
			level=d;
insilmaril@804
   222
		model->nextBranch(cur,prev);	
insilmaril@804
   223
	}
insilmaril@804
   224
insilmaril@804
   225
	// Expand all to level
insilmaril@804
   226
	cur=NULL;
insilmaril@804
   227
	prev=NULL;
insilmaril@804
   228
	model->nextBranch(cur,prev);
insilmaril@804
   229
	while (cur) 
insilmaril@804
   230
	{
insilmaril@822
   231
		// FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur));
insilmaril@804
   232
		pix=model->index (cur);
insilmaril@804
   233
		d=cur->depth();
insilmaril@804
   234
		if (!treeEditor->isExpanded(pix) && d <= level && cur->branchCount()>0)
insilmaril@804
   235
			treeEditor->setExpanded(pix,true);
insilmaril@804
   236
		model->nextBranch(cur,prev);	
insilmaril@804
   237
	}
insilmaril@804
   238
	/* FIXME-3 optimize expanding by using flat version of next
insilmaril@804
   239
	model->nextBranch(cur,prev,false);
insilmaril@804
   240
	while (cur) 
insilmaril@804
   241
	{
insilmaril@804
   242
		cout << "ok: "<<cur->getHeadingStd()<<endl./re/videochristinaprison1_wmvl.wmv
insilmaril@804
   243
;
insilmaril@804
   244
		model->nextBranch(cur,prev,false);	
insilmaril@804
   245
	}
insilmaril@804
   246
	*/
insilmaril@804
   247
}
insilmaril@804
   248
insilmaril@804
   249
void VymView::collapseOneLevel()
insilmaril@804
   250
{
insilmaril@804
   251
	int level=-1;
insilmaril@804
   252
	int d;
insilmaril@804
   253
	BranchItem *cur=NULL;
insilmaril@804
   254
	BranchItem *prev=NULL;
insilmaril@804
   255
	QModelIndex pix;
insilmaril@804
   256
insilmaril@804
   257
	// Find level to collapse
insilmaril@804
   258
	model->nextBranch(cur,prev);
insilmaril@804
   259
	while (cur) 
insilmaril@804
   260
	{
insilmaril@822
   261
		// FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur));
insilmaril@804
   262
		pix=model->index (cur);
insilmaril@804
   263
		d=cur->depth();
insilmaril@804
   264
		if (treeEditor->isExpanded(pix) && d > level)
insilmaril@804
   265
			level=d;
insilmaril@804
   266
		model->nextBranch(cur,prev);	
insilmaril@804
   267
	}
insilmaril@804
   268
insilmaril@804
   269
	// collapse all to level
insilmaril@804
   270
	cur=NULL;
insilmaril@804
   271
	prev=NULL;
insilmaril@804
   272
	model->nextBranch(cur,prev);
insilmaril@804
   273
	while (cur) 
insilmaril@804
   274
	{
insilmaril@822
   275
		// FIXME-3 use proxy pix=treeEditor->getProxyModel()->mapFromSource (model->index (cur));
insilmaril@804
   276
		pix=model->index (cur);
insilmaril@804
   277
		d=cur->depth();
insilmaril@804
   278
		if (treeEditor->isExpanded(pix) && d >= level)
insilmaril@804
   279
			treeEditor->setExpanded(pix,false);
insilmaril@804
   280
		model->nextBranch(cur,prev);	
insilmaril@804
   281
	}
insilmaril@804
   282
}
insilmaril@804
   283
insilmaril@763
   284
void VymView::showSelection()
insilmaril@763
   285
{
insilmaril@772
   286
	QModelIndex ix=model->getSelectedIndex();
insilmaril@772
   287
	treeEditor->scrollTo( ix, QAbstractItemView::EnsureVisible);
insilmaril@807
   288
	mapEditor->scrollTo ( ix);	// FIXME-3 also called from MapEditor::updateSelection...
insilmaril@763
   289
}
insilmaril@763
   290
insilmaril@808
   291
void VymView::showFindWidget()
insilmaril@808
   292
{
insilmaril@810
   293
	findWidget->popup();
insilmaril@808
   294
}
insilmaril@808
   295
insilmaril@812
   296
void VymView::hideFindWidget()
insilmaril@812
   297
{
insilmaril@812
   298
	// findWidget hides itself, but we want to have focus back at mapEditor usually
insilmaril@812
   299
	if (mapEditor) mapEditor->setFocus();
insilmaril@812
   300
}
insilmaril@812
   301
insilmaril@808
   302
void VymView::findNext (QString s)
insilmaril@808
   303
{
insilmaril@808
   304
	bool cs=false;
insilmaril@808
   305
	BranchItem *bi=model->findText(s, cs);
insilmaril@808
   306
	if (bi)
insilmaril@810
   307
		findWidget->setStatus (FindWidget::Success);
insilmaril@810
   308
	else
insilmaril@810
   309
		findWidget->setStatus (FindWidget::Failed);
insilmaril@808
   310
insilmaril@808
   311
}
insilmaril@811
   312
insilmaril@811
   313
void VymView::findReset()
insilmaril@811
   314
{
insilmaril@811
   315
	model->findReset();
insilmaril@811
   316
	if (mapEditor) mapEditor->setFocus();
insilmaril@811
   317
}
insilmaril@811
   318
insilmaril@823
   319
void VymView::toggleTreeEditor()
insilmaril@823
   320
{
insilmaril@823
   321
	if (treeEditor->isVisible() )
insilmaril@823
   322
		treeEditor->hide();
insilmaril@823
   323
	else
insilmaril@823
   324
		treeEditor->show();
insilmaril@823
   325
}
insilmaril@823
   326
insilmaril@823
   327