renamings.
This commit is contained in:
196
src/widgets/xqtreetable.cpp
Normal file
196
src/widgets/xqtreetable.cpp
Normal file
@@ -0,0 +1,196 @@
|
||||
/***************************************************************************
|
||||
|
||||
source::worx xtree
|
||||
Copyright © 2024-2025 c.holzheuer
|
||||
christoph.holzheuer@gmail.com
|
||||
|
||||
This program 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 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include <QPainter>
|
||||
#include <QTime>
|
||||
|
||||
#include "qheaderview.h"
|
||||
#include <xqtreetable.h>
|
||||
#include <xqviewmodel.h>
|
||||
|
||||
#define DB_TIMESTAMP QTime::currentTime().toString(" -- HH:mm:ss.zzz")
|
||||
|
||||
XQTreeTable::XQTreeTable(QWidget* parent)
|
||||
: QTreeView(parent)
|
||||
{
|
||||
/*
|
||||
setDragEnabled(true);
|
||||
setAcceptDrops(true);
|
||||
setDragDropOverwriteMode(true);
|
||||
setDropIndicatorShown(false);
|
||||
*/
|
||||
setHeaderHidden(true);
|
||||
setMouseTracking(true);
|
||||
}
|
||||
|
||||
|
||||
XQTreeTable::~XQTreeTable()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
XQViewModel* XQTreeTable::modelView()
|
||||
{
|
||||
return static_cast<XQViewModel*>(model());
|
||||
}
|
||||
|
||||
// __fixme: necessary?
|
||||
XQItem& XQTreeTable::xqItemFromIndex(const QModelIndex& index )
|
||||
{
|
||||
return modelView()->xqItemFromIndex( index );
|
||||
}
|
||||
|
||||
|
||||
void XQTreeTable::currentChanged(const QModelIndex& current, const QModelIndex& previous)
|
||||
{
|
||||
|
||||
QTreeView::currentChanged(current, previous);
|
||||
// edit comboboxes directly
|
||||
//XQItem& currentItem = xqItemFromIndex(current);
|
||||
// xx_fix!
|
||||
/*
|
||||
if (curreXQItem && curreXQItem->renderStyle() == XQItem::ComboBoxStyle )
|
||||
{
|
||||
QTreeView::edit(current);
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
void XQTreeTable::mouseResizeHeaderEntry(int xpos)
|
||||
{
|
||||
// resize colummn: minimal vertical margin in pixels
|
||||
static const int s_MinimalMargin = 50;
|
||||
|
||||
QRect itemRect = visualRect(_indexToResize);
|
||||
|
||||
// new position different to item rect outer right position
|
||||
int newPos = xpos - itemRect.right();
|
||||
|
||||
// current section size from header
|
||||
int column = _indexToResize.column();
|
||||
int sectionSize = columnWidth( column );
|
||||
int maxPos = s_MinimalMargin + xpos;
|
||||
|
||||
// resize header and update view
|
||||
if (maxPos <= width())
|
||||
{
|
||||
header()->resizeSection(column, sectionSize + newPos);
|
||||
}
|
||||
}
|
||||
|
||||
void XQTreeTable::mouseMoveEvent(QMouseEvent* event)
|
||||
{
|
||||
// pixel Grenzwert zur Anzeige des Splitcursors
|
||||
static const int s_CatchOffset = 5;
|
||||
|
||||
bool leftBtn = (event->buttons() & Qt::LeftButton);
|
||||
QPoint eventPos = event->pos();
|
||||
|
||||
// splitcursor ist active
|
||||
bool splitCursor = (cursor().shape() == Qt::SplitHCursor);
|
||||
|
||||
|
||||
// sind wir schon am 'draggen'?
|
||||
if (_indexToResize.isValid() && splitCursor && leftBtn)
|
||||
{
|
||||
return mouseResizeHeaderEntry(eventPos.x());
|
||||
}
|
||||
|
||||
// nein, nocht nicht
|
||||
QModelIndex idxFromPos = indexAt(eventPos);
|
||||
|
||||
// mousepointer is inside a header section
|
||||
if ( xqItemFromIndex(idxFromPos).isHeaderStyle() )
|
||||
{
|
||||
QRect itemRect = visualRect(idxFromPos);
|
||||
|
||||
int crX = itemRect.topRight().x() - s_CatchOffset;
|
||||
QRect catchRect = QRect(crX, itemRect.y(), s_CatchOffset, itemRect.height());
|
||||
if (catchRect.contains(eventPos))
|
||||
{
|
||||
return setCursor(QCursor(Qt::SplitHCursor));
|
||||
}
|
||||
}
|
||||
setCursor(QCursor(Qt::ArrowCursor));
|
||||
|
||||
QTreeView::mouseMoveEvent(event);
|
||||
}
|
||||
|
||||
void XQTreeTable::mouseDoubleClickEvent(QMouseEvent* event)
|
||||
{
|
||||
/*
|
||||
QModelIndex idxFromPos = indexAt(event->pos());
|
||||
if (idxFromPos.isValid())
|
||||
{
|
||||
if ( NTItem::isHeaderType(idxFromPos) && cursor().shape() == Qt::SplitHCursor)
|
||||
{
|
||||
return resizeColumnToContents(idxFromPos.column());
|
||||
}
|
||||
}
|
||||
*/
|
||||
QTreeView::mouseDoubleClickEvent(event);
|
||||
}
|
||||
|
||||
|
||||
void XQTreeTable::mousePressEvent(QMouseEvent* event)
|
||||
{
|
||||
|
||||
// case #1:
|
||||
// Handle header resiszing
|
||||
|
||||
QPoint pos = event->pos();
|
||||
QModelIndex index = indexAt(pos);
|
||||
// set index for resize column if cursor for split is active
|
||||
if (cursor().shape() == Qt::SplitHCursor)
|
||||
{
|
||||
_indexToResize = index;
|
||||
}
|
||||
QTreeView::mousePressEvent(event);
|
||||
}
|
||||
|
||||
|
||||
void XQTreeTable::mouseReleaseEvent(QMouseEvent* event)
|
||||
{
|
||||
// reset index for resize column
|
||||
_indexToResize = QModelIndex();
|
||||
setCursor(QCursor(Qt::ArrowCursor));
|
||||
QTreeView::mouseReleaseEvent(event);
|
||||
}
|
||||
|
||||
|
||||
void XQTreeTable::wheelEvent(QWheelEvent* event)
|
||||
{
|
||||
// Ctrl-key down?
|
||||
if (!event->modifiers().testFlag(Qt::ControlModifier))
|
||||
// default processing
|
||||
return QTreeView::wheelEvent(event);
|
||||
|
||||
// current size
|
||||
int curSize = fontInfo().pointSize();
|
||||
// increase?
|
||||
if (event->angleDelta().y() > 0)
|
||||
{
|
||||
// "zoom in"
|
||||
curSize += (curSize < 40) ? (1) : (0);
|
||||
}
|
||||
else
|
||||
{
|
||||
// "zoom out"
|
||||
curSize -= (curSize > 8) ? (1) : (0);
|
||||
}
|
||||
// adjust size via stylesheet
|
||||
setStyleSheet(QString("font: %1pt;").arg(curSize));
|
||||
|
||||
}
|
Reference in New Issue
Block a user