added class UBWidgetList

preferencesAboutTextFull
Claudio Valerio 13 years ago
parent b824051438
commit df8a8a5ec9
  1. 2
      Sankore_3.1.pro
  2. 133
      src/customWidgets/UBWidgetList.cpp
  3. 44
      src/customWidgets/UBWidgetList.h
  4. 5
      src/customWidgets/customWidgets.pri

@ -53,6 +53,7 @@ include(src/desktop/desktop.pri)
include(src/web/web.pri)
include(src/softwareupdate/softwareupdate.pri)
include(src/transition/transition.pri)
include(src/customWidgets/customWidgets.pri)
DEPENDPATH += src/pdf-merger
INCLUDEPATH += src/pdf-merger
@ -398,3 +399,4 @@ INSTALLS = UB_ETC \
UB_THIRDPARTY_INTERACTIVE
OTHER_FILES +=

@ -0,0 +1,133 @@
#include <QDebug>
#include "UBWidgetList.h"
UBWidgetList::UBWidgetList(QWidget* parent, eWidgetListOrientation orientation, const char* name):QScrollArea(parent)
, mpLayout(NULL)
, mpContainer(NULL)
, mMargin(5)
, mpEmptyLabel(NULL)
{
setObjectName(name);
mOrientation = orientation;
mpContainer = new QWidget(this);
mWidgets.clear();
if(eWidgetListOrientation_Vertical == orientation){
setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
mpLayout = new QVBoxLayout(mpContainer);
mpContainer->resize(width(), mpContainer->height());
}else{
setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
mpLayout = new QHBoxLayout(mpContainer);
mpContainer->resize(mpContainer->width(), height());
}
mpLayout->setContentsMargins(margin(), margin(), margin(), margin());
mpContainer->setLayout(mpLayout);
setWidget(mpContainer);
}
UBWidgetList::~UBWidgetList()
{
if(NULL != mpEmptyLabel){
delete mpEmptyLabel;
mpEmptyLabel = NULL;
}
if(NULL != mpLayout){
delete mpLayout;
mpLayout = NULL;
}
if(NULL != mpContainer){
delete mpContainer;
mpContainer = NULL;
}
}
void UBWidgetList::addWidget(QWidget *widget)
{
if(NULL != mpLayout){
updateSize(true, widget);
mpLayout->addWidget(widget);
mWidgets << widget;
}
}
void UBWidgetList::removeWidget(QWidget *widget)
{
if(NULL != mpLayout){
mpLayout->removeWidget(widget);
mWidgets.remove(mWidgets.indexOf(widget));
updateSize(false, widget);
widget->setVisible(false);
}
}
void UBWidgetList::updateSize(bool widgetAdded, QWidget *widget)
{
float scaleFactor;
int newWidgetWidth;
int newWidgetHeight;
if(eWidgetListOrientation_Vertical == mOrientation){
scaleFactor = (float)widget->width() / (float)mpContainer->width();
}else{
scaleFactor = (float)widget->height() / (float)mpContainer->height();
}
newWidgetWidth = widget->width()*scaleFactor;
newWidgetHeight = widget->height()*scaleFactor;
widget->resize(newWidgetWidth, newWidgetHeight);
// Now we have to update the container
if(eWidgetListOrientation_Vertical == mOrientation){
if(widgetAdded){
mpContainer->resize(mpContainer->width(), mpContainer->height() + newWidgetHeight);
}else{
mpContainer->resize(mpContainer->width(), mpContainer->height() - newWidgetHeight);
}
}else{
if(widgetAdded){
mpContainer->resize(mpContainer->width() + newWidgetWidth, mpContainer->height());
}else{
mpContainer->resize(mpContainer->width() - newWidgetWidth, mpContainer->height());
}
}
}
void UBWidgetList::resizeEvent(QResizeEvent *ev)
{
if(ev->oldSize().width() >= 0 && ev->oldSize().height() >= 0){
float scale;
if(eWidgetListOrientation_Vertical == mOrientation){
scale = (float)ev->size().width() / (float)ev->oldSize().width();
updateAllWidgetsize(scale);
mpContainer->resize(width() - 2, mpContainer->height()*scale);
}else{
scale = (float)ev->size().height() / (float)ev->oldSize().height();
updateAllWidgetsize(scale);
mpContainer->resize(mpContainer->width()*scale, height() - 2);
}
}
}
void UBWidgetList::updateAllWidgetsize(float scale)
{
for(int i=0; i<mWidgets.size(); i++){
mWidgets.at(i)->resize(mWidgets.at(i)->width()*scale, mWidgets.at(i)->height()*scale);
}
}
void UBWidgetList::setMargin(int margin)
{
mMargin = margin;
}
int UBWidgetList::margin()
{
return mMargin;
}
// TODO : - add onHover 'delete' button
// - add empty label

@ -0,0 +1,44 @@
#ifndef UBWIDGETLIST_H
#define UBWIDGETLIST_H
#include <QWidget>
#include <QScrollArea>
#include <QLayout>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QResizeEvent>
#include <QVector>
#include <QLabel>
typedef enum{
eWidgetListOrientation_Vertical,
eWidgetListOrientation_Horizontal
}eWidgetListOrientation;
class UBWidgetList : public QScrollArea
{
Q_OBJECT
public:
UBWidgetList(QWidget* parent=0, eWidgetListOrientation orientation = eWidgetListOrientation_Vertical, const char* name = "UBWidgetList");
~UBWidgetList();
void addWidget(QWidget* widget);
void removeWidget(QWidget* widget);
void setMargin(int margin);
int margin();
protected:
void resizeEvent(QResizeEvent* ev);
private:
void updateSize(bool widgetAdded, QWidget* widget);
void updateAllWidgetsize(float scale);
QLayout* mpLayout;
QWidget* mpContainer;
eWidgetListOrientation mOrientation;
int mMargin;
QVector<QWidget*> mWidgets;
QLabel* mpEmptyLabel;
};
#endif // UBWIDGETLIST_H

@ -0,0 +1,5 @@
HEADERS += src/customWidgets/UBWidgetList.h
SOURCES += src/customWidgets/UBWidgetList.cpp
Loading…
Cancel
Save