Skip to content

Commit

Permalink
preparing flexible coverage view tree table sorting
Browse files Browse the repository at this point in the history
  • Loading branch information
jmhofer committed Jul 11, 2010
1 parent 202cd9c commit c4958fc
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 24 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* This file is part of eCobertura.
*
* Copyright (c) 2010 Joachim Hofer
* All rights reserved.
*
* eCobertura 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 3 of the License, or
* (at your option) any later version.
*
* eCobertura 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 eCobertura. If not, see <http://www.gnu.org/licenses/>.
*/
package ecobertura.ui.views.session

object ColumnType extends Enumeration {
type ColumnType = Value

val Name = Value
val CoveredLines, TotalLines, LinesPercentage = Value
val CoveredBranches, TotalBranches, BranchesPercentage = Value
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import org.eclipse.jface.action._
import org.eclipse.jface.layout.TreeColumnLayout
import org.eclipse.jface.viewers._

import org.eclipse.swt.events.SelectionEvent
import org.eclipse.swt.widgets._
import org.eclipse.swt.SWT

Expand Down Expand Up @@ -51,21 +52,14 @@ class CoverageSessionView extends ViewPart {
private var viewer: TreeViewer = null
private var sessionResetListener: Option[Option[CoverageSession] => Unit] = None

class NameSorter extends ViewerSorter {
override def compare(viewer: Viewer, first: Any, second: Any) = {
(first, second) match {
case (firstNode: CoverageSessionTreeNode, secondNode: CoverageSessionTreeNode) => {
firstNode.name.compareTo(secondNode.name)
}
case _ => first.toString.compareTo(second.toString)
}
}
}

private val viewSorter = new CoverageViewSorter

/**
* This is a callback that will allow us to create the viewer and initialize it.
*/
override def createPartControl(parent: Composite) = {
import ColumnType._

viewer = new TreeViewer(parent, SWT.SINGLE)
val swtTreeTable = viewer.getTree
swtTreeTable.setHeaderVisible(true)
Expand All @@ -76,16 +70,16 @@ class CoverageSessionView extends ViewPart {
val treeColumnLayout = new TreeColumnLayout
parent.setLayout(treeColumnLayout)

addTreeColumn("Name", SWT.LEFT, 9).setLabelProvider(new NameLabelProvider)
addTreeColumn("Lines", SWT.RIGHT, 1).setLabelProvider(new LinesCoveredLabelProvider)
addTreeColumn("Total", SWT.RIGHT, 1).setLabelProvider(new LinesTotalLabelProvider)
addTreeColumn("%", SWT.RIGHT, 1).setLabelProvider(new LinesPercentageLabelProvider)
addTreeColumn("Branches", SWT.RIGHT, 1).setLabelProvider(new BranchesCoveredLabelProvider)
addTreeColumn("Total", SWT.RIGHT, 1).setLabelProvider(new BranchesTotalLabelProvider)
addTreeColumn("%", SWT.RIGHT, 1).setLabelProvider(new BranchesPercentageLabelProvider)
addTreeColumn(Name, "Name", SWT.LEFT, 9).setLabelProvider(new NameLabelProvider)
addTreeColumn(CoveredLines, "Lines", SWT.RIGHT, 1).setLabelProvider(new LinesCoveredLabelProvider)
addTreeColumn(TotalLines, "Total", SWT.RIGHT, 1).setLabelProvider(new LinesTotalLabelProvider)
addTreeColumn(LinesPercentage, "%", SWT.RIGHT, 1).setLabelProvider(new LinesPercentageLabelProvider)
addTreeColumn(CoveredBranches, "Branches", SWT.RIGHT, 1).setLabelProvider(new BranchesCoveredLabelProvider)
addTreeColumn(TotalBranches, "Total", SWT.RIGHT, 1).setLabelProvider(new BranchesTotalLabelProvider)
addTreeColumn(BranchesPercentage, "%", SWT.RIGHT, 1).setLabelProvider(new BranchesPercentageLabelProvider)

viewer.setContentProvider(CoverageSessionModel.get)
viewer.setSorter(new NameSorter)
viewer.setSorter(new CoverageViewSorter)
viewer.setInput(CoverageSessionRoot)

viewer.addDoubleClickListener {
Expand All @@ -112,12 +106,25 @@ class CoverageSessionView extends ViewPart {
// Create the help context id for the viewer's control
// PlatformUI.getWorkbench.getHelpSystem.setHelp(viewer.getControl, "ecobertura.ui.viewer")

def addTreeColumn(name: String, alignment: Int, weight: Int) = {
def addTreeColumn(columnType: ColumnType, name: String, alignment: Int, weight: Int) = {
val column = new TreeViewerColumn(viewer, alignment)
column.getColumn.setText(name)
column.getColumn.setAlignment(alignment)
treeColumnLayout.setColumnData(column.getColumn, new ColumnWeightData(weight))

val swtColumn = column.getColumn
swtColumn.setText(name)
swtColumn.setAlignment(alignment)
treeColumnLayout.setColumnData(swtColumn, new ColumnWeightData(weight))
swtColumn.addSelectionListener((event: SelectionEvent) => {
viewSorter.columnType = columnType
val treeTable = viewer.getTree

val direction = if (treeTable.getSortColumn == swtColumn)
if (treeTable.getSortDirection == SWT.UP) SWT.DOWN else SWT.UP
else SWT.DOWN

treeTable.setSortDirection(direction);
treeTable.setSortColumn(swtColumn);
viewer.refresh();
})

column
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* This file is part of eCobertura.
*
* Copyright (c) 2010 Joachim Hofer
* All rights reserved.
*
* eCobertura 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 3 of the License, or
* (at your option) any later version.
*
* eCobertura 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 eCobertura. If not, see <http://www.gnu.org/licenses/>.
*/
package ecobertura.ui.views.session

import org.eclipse.jface.viewers._

// TODO handle sort oder and column type changes...
class CoverageViewSorter extends ViewerSorter {
import ColumnType._

var columnType = Name

override def compare(viewer: Viewer, first: Any, second: Any) = {
(first, second) match {
case (firstNode: CoverageSessionTreeNode, secondNode: CoverageSessionTreeNode) => {
firstNode.name.compareTo(secondNode.name)
}
case _ => first.toString.compareTo(second.toString)
}
}
}

0 comments on commit c4958fc

Please sign in to comment.