2 * Copyright (C) 2007 by Mathias Soeken <msoeken@tzi.de>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the
16 * Free Software Foundation, Inc.
17 * 51 Franklin Street, Fifth Floor
18 * Boston, MA 02110-1301 USA.
22 #include "treeviewheadercontextmenu.h"
26 #include <QHeaderView>
33 TreeViewHeaderContextMenu::TreeViewHeaderContextMenu( QObject
*parent
, QTreeView
*widget
, int style
, QVector
<int> excludedColumns
)
38 mExcludedColumns( excludedColumns
)
40 kDebug(5970) << "Entering function";
43 mWidget
->header()->setContextMenuPolicy( Qt::CustomContextMenu
);
44 connect( mWidget
->header(), SIGNAL(customContextMenuRequested(QPoint
)), this, SLOT(slotCustomContextMenuRequested(QPoint
)) );
46 mContextMenu
= new KMenu( mWidget
);
47 mContextMenu
->addTitle( i18n("Columns") );
48 connect( mContextMenu
, SIGNAL(triggered(QAction
*)), this, SLOT(slotTriggered(QAction
*)) );
49 connect( mContextMenu
, SIGNAL(aboutToShow()), this, SLOT(slotAboutToShow()) );
52 kDebug(5970) << "Leaving function";
55 TreeViewHeaderContextMenu::~TreeViewHeaderContextMenu()
57 kDebug(5970) << "Entering function";
58 qDeleteAll( mActions
);
61 void TreeViewHeaderContextMenu::slotCustomContextMenuRequested( const QPoint
& pos
)
63 kDebug(5970) << "Entering function";
64 if (mWidget
&& mContextMenu
)
66 mContextMenu
->exec( mWidget
->mapToGlobal(pos
) );
70 void TreeViewHeaderContextMenu::updateActions()
72 kDebug(5970) << "Entering function";
76 foreach (action
, mActions
)
78 mContextMenu
->removeAction( action
);
81 mActionColumnMapping
.clear();
82 qDeleteAll( mActions
);
85 for (int c
= 0; c
< mWidget
->model()->columnCount(); ++c
)
87 if (mExcludedColumns
.contains( c
)) continue;
89 QAction
* action
= new QAction( this );
90 updateAction( action
, c
);
91 mActions
.append( action
);
93 mContextMenu
->addAction( action
);
94 mActionColumnMapping
[action
] = c
;
99 void TreeViewHeaderContextMenu::slotTriggered( QAction
*action
)
101 kDebug(5970) << "Entering function";
102 if (mWidget
&& action
)
104 int column
= mActionColumnMapping
[action
];
105 bool hidden
= mWidget
->isColumnHidden(column
);
106 mWidget
->setColumnHidden( column
, !hidden
);
107 updateAction( action
, column
);
108 emit
columnToggled( column
);
112 void TreeViewHeaderContextMenu::slotAboutToShow()
114 kDebug(5970) << "Entering function";
116 foreach (action
, mActions
)
118 updateAction( action
, mActionColumnMapping
[action
] );
122 void TreeViewHeaderContextMenu::updateAction( QAction
*action
, int column
)
124 kDebug(5970) << "Entering function";
125 QString text
= mWidget
->model()->headerData(column
, Qt::Horizontal
).toString();
129 action
->setCheckable( true );
130 action
->setChecked( !mWidget
->isColumnHidden(column
) );
131 action
->setText( text
);
133 case CheckBoxOnChecked
:
134 action
->setCheckable( !mWidget
->isColumnHidden(column
) );
135 action
->setChecked( !mWidget
->isColumnHidden(column
) );
136 action
->setText( text
);
139 action
->setCheckable( false );
140 action
->setChecked( false );
141 action
->setText( (mWidget
->isColumnHidden(column
) ? i18n("Show") : i18n("Hide")) + ' ' + text
);
146 #include "treeviewheadercontextmenu.moc"