forked from CleverRaven/Cataclysm-DDA
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Obj creator itemgroup part 2 (CleverRaven#59906)
* Added comment and count Added comment as a general property added count to item entries * Commit header changes from the last commit too * Added container-item and overflow * Some clang-tidy fixes * First version of simple_property_widget * Added flowlayout You can look flowlayout up online and see what it does. Basically it enables widgets contained within to wrap around when the width is too small * Converted a couple of widgets to the simple_property widget, added flowlayout to itemGroupEntry * code corrections for flowlayout * Adjusted delete button and minmax * Adjusted layout, converted the last properties to the new widget * Fix for spell window * Added license information to flowlayout * Added ammo as a property to the itemgroup * Added magazine to basic itemgroup properties * Add property 'variant' * Rename containerItem to contentsItem for entries, not the main property * Add contents-group property * Add damage property * Tooltip adjustments * Apply Akrieger's suggestion and fix the makefile
- Loading branch information
Showing
9 changed files
with
863 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
/**************************************************************************** | ||
** | ||
** Copyright (C) 2016 The Qt Company Ltd. | ||
** Contact: https://www.qt.io/licensing/ | ||
** | ||
** This file is part of the examples of the Qt Toolkit. | ||
** | ||
** $QT_BEGIN_LICENSE:BSD$ | ||
** Commercial License Usage | ||
** Licensees holding valid commercial Qt licenses may use this file in | ||
** accordance with the commercial license agreement provided with the | ||
** Software or, alternatively, in accordance with the terms contained in | ||
** a written agreement between you and The Qt Company. For licensing terms | ||
** and conditions see https://www.qt.io/terms-conditions. For further | ||
** information use the contact form at https://www.qt.io/contact-us. | ||
** | ||
** BSD License Usage | ||
** Alternatively, you may use this file under the terms of the BSD license | ||
** as follows: | ||
** | ||
** "Redistribution and use in source and binary forms, with or without | ||
** modification, are permitted provided that the following conditions are | ||
** met: | ||
** * Redistributions of source code must retain the above copyright | ||
** notice, this list of conditions and the following disclaimer. | ||
** * Redistributions in binary form must reproduce the above copyright | ||
** notice, this list of conditions and the following disclaimer in | ||
** the documentation and/or other materials provided with the | ||
** distribution. | ||
** * Neither the name of The Qt Company Ltd nor the names of its | ||
** contributors may be used to endorse or promote products derived | ||
** from this software without specific prior written permission. | ||
** | ||
** | ||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||
** | ||
** $QT_END_LICENSE$ | ||
** | ||
****************************************************************************/ | ||
|
||
#include "flowlayout.h" | ||
#include <QtWidgets> | ||
|
||
creator::FlowLayout::FlowLayout( QWidget *parent, int margin, int hSpacing, int vSpacing ) | ||
: QLayout( parent ), m_hSpace( hSpacing ), m_vSpace( vSpacing ) { | ||
setContentsMargins( margin, margin, margin, margin ); | ||
} | ||
|
||
creator::FlowLayout::FlowLayout( int margin, int hSpacing, int vSpacing ) | ||
: m_hSpace( hSpacing ), m_vSpace( vSpacing ) { | ||
setContentsMargins( margin, margin, margin, margin ); | ||
} | ||
|
||
creator::FlowLayout::~FlowLayout() { | ||
QLayoutItem *item; | ||
while( ( item = takeAt( 0 ) ) ) { | ||
delete item; | ||
} | ||
} | ||
|
||
void creator::FlowLayout::addItem( QLayoutItem *item ) { | ||
itemList.append( item ); | ||
} | ||
|
||
int creator::FlowLayout::horizontalSpacing() const { | ||
if( m_hSpace >= 0 ) { | ||
return m_hSpace; | ||
} else { | ||
return smartSpacing( QStyle::PM_LayoutHorizontalSpacing ); | ||
} | ||
} | ||
|
||
int creator::FlowLayout::verticalSpacing() const { | ||
if( m_vSpace >= 0 ) { | ||
return m_vSpace; | ||
} else{ | ||
return smartSpacing( QStyle::PM_LayoutVerticalSpacing ); | ||
} | ||
} | ||
|
||
int creator::FlowLayout::count() const { | ||
return itemList.size(); | ||
} | ||
|
||
QLayoutItem *creator::FlowLayout::itemAt( int index ) const { | ||
return itemList.value( index ); | ||
} | ||
|
||
QLayoutItem *creator::FlowLayout::takeAt( int index ) { | ||
if( index >= 0 && index < itemList.size() ) { | ||
return itemList.takeAt( index ); | ||
} | ||
return nullptr; | ||
} | ||
|
||
Qt::Orientations creator::FlowLayout::expandingDirections() const { | ||
return { }; | ||
} | ||
|
||
bool creator::FlowLayout::hasHeightForWidth() const { | ||
return true; | ||
} | ||
|
||
int creator::FlowLayout::heightForWidth( int width ) const { | ||
int height = doLayout( QRect( 0, 0, width, 0 ), true ); | ||
return height; | ||
} | ||
|
||
void creator::FlowLayout::setGeometry( const QRect &rect ) { | ||
QLayout::setGeometry( rect ); | ||
doLayout(rect, false); | ||
} | ||
|
||
QSize creator::FlowLayout::sizeHint() const { | ||
return minimumSize(); | ||
} | ||
|
||
QSize creator::FlowLayout::minimumSize() const { | ||
QSize size; | ||
for( const QLayoutItem *item : qAsConst( itemList ) ) { | ||
size = size.expandedTo( item->minimumSize() ); | ||
} | ||
const QMargins margins = contentsMargins(); | ||
size += QSize( margins.left() + margins.right(), margins.top() + margins.bottom() ); | ||
return size; | ||
} | ||
|
||
int creator::FlowLayout::doLayout( const QRect &rect, bool testOnly ) const { | ||
int left, top, right, bottom; | ||
getContentsMargins( &left, &top, &right, &bottom ); | ||
QRect effectiveRect = rect.adjusted( +left, +top, -right, -bottom ); | ||
int x = effectiveRect.x(); | ||
int y = effectiveRect.y(); | ||
int lineHeight = 0; | ||
|
||
for( QLayoutItem *item : qAsConst( itemList ) ) { | ||
const QWidget *wid = item->widget(); | ||
|
||
int spaceX = horizontalSpacing(); | ||
if( spaceX == -1 ) { | ||
spaceX = wid->style()->layoutSpacing( | ||
QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Horizontal ); | ||
} | ||
|
||
int spaceY = verticalSpacing(); | ||
if( spaceY == -1 ) { | ||
spaceY = wid->style()->layoutSpacing( | ||
QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Vertical ); | ||
} | ||
|
||
|
||
|
||
int nextX = x + item->sizeHint().width() + spaceX; | ||
if( nextX - spaceX > effectiveRect.right() && lineHeight > 0 ) { | ||
x = effectiveRect.x(); | ||
y = y + lineHeight + spaceY; | ||
nextX = x + item->sizeHint().width() + spaceX; | ||
lineHeight = 0; | ||
} | ||
|
||
if( !testOnly ) { | ||
item->setGeometry( QRect( QPoint( x, y ), item->sizeHint() ) ); | ||
} | ||
|
||
x = nextX; | ||
lineHeight = qMax( lineHeight, item->sizeHint().height() ); | ||
} | ||
return y + lineHeight - rect.y() + bottom; | ||
} | ||
|
||
int creator::FlowLayout::smartSpacing( QStyle::PixelMetric pm ) const { | ||
QObject *parent = this->parent(); | ||
if( !parent ) { | ||
return -1; | ||
} else if( parent->isWidgetType() ) { | ||
QWidget *pw = static_cast<QWidget *>( parent ); | ||
return pw->style()->pixelMetric( pm, nullptr, pw ); | ||
} else{ | ||
return static_cast<QLayout *>( parent )->spacing(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
/**************************************************************************** | ||
** | ||
** Copyright (C) 2016 The Qt Company Ltd. | ||
** Contact: https://www.qt.io/licensing/ | ||
** | ||
** This file is part of the examples of the Qt Toolkit. | ||
** | ||
** $QT_BEGIN_LICENSE:BSD$ | ||
** Commercial License Usage | ||
** Licensees holding valid commercial Qt licenses may use this file in | ||
** accordance with the commercial license agreement provided with the | ||
** Software or, alternatively, in accordance with the terms contained in | ||
** a written agreement between you and The Qt Company. For licensing terms | ||
** and conditions see https://www.qt.io/terms-conditions. For further | ||
** information use the contact form at https://www.qt.io/contact-us. | ||
** | ||
** BSD License Usage | ||
** Alternatively, you may use this file under the terms of the BSD license | ||
** as follows: | ||
** | ||
** "Redistribution and use in source and binary forms, with or without | ||
** modification, are permitted provided that the following conditions are | ||
** met: | ||
** * Redistributions of source code must retain the above copyright | ||
** notice, this list of conditions and the following disclaimer. | ||
** * Redistributions in binary form must reproduce the above copyright | ||
** notice, this list of conditions and the following disclaimer in | ||
** the documentation and/or other materials provided with the | ||
** distribution. | ||
** * Neither the name of The Qt Company Ltd nor the names of its | ||
** contributors may be used to endorse or promote products derived | ||
** from this software without specific prior written permission. | ||
** | ||
** | ||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." | ||
** | ||
** $QT_END_LICENSE$ | ||
** | ||
****************************************************************************/ | ||
|
||
#ifndef CATA_OBJECT_CREATOR_FLOWLAYOUT_H | ||
#define CATA_OBJECT_CREATOR_FLOWLAYOUT_H | ||
|
||
|
||
#include <QtWidgets/qlayout.h> | ||
#include <QtWidgets/qstyle.h> | ||
|
||
|
||
namespace creator | ||
{ | ||
class FlowLayout : public QLayout | ||
{ | ||
public: | ||
explicit FlowLayout( QWidget *parent, int margin = -1, int hSpacing = -1, int vSpacing = -1 ); | ||
explicit FlowLayout( int margin = -1, int hSpacing = -1, int vSpacing = -1 ); | ||
~FlowLayout(); | ||
|
||
void addItem( QLayoutItem *item ) override; | ||
int horizontalSpacing() const; | ||
int verticalSpacing() const; | ||
Qt::Orientations expandingDirections() const override; | ||
bool hasHeightForWidth() const override; | ||
int heightForWidth(int) const override; | ||
int count() const override; | ||
QLayoutItem *itemAt(int index) const override; | ||
QSize minimumSize() const override; | ||
void setGeometry(const QRect &rect) override; | ||
QSize sizeHint() const override; | ||
QLayoutItem *takeAt( int index ) override; | ||
|
||
private: | ||
int doLayout( const QRect &rect, bool testOnly ) const; | ||
int smartSpacing( QStyle::PixelMetric pm ) const; | ||
|
||
QList<QLayoutItem *> itemList; | ||
int m_hSpace; | ||
int m_vSpace; | ||
}; | ||
} | ||
#endif |
Oops, something went wrong.