00001 #include "guifactory.h"
00002
00003 #include "widgets/inputwidgets.h"
00004
00005 #include <domain/clock.h>
00006
00007 #include <QListView>
00008 #include <QTableView>
00009 #include <QLabel>
00010 #include <QStatusBar>
00011 #include <QApplication>
00012 #include <QDesktopWidget>
00013 #include <QHeaderView>
00014 #include <QDateTimeEdit>
00015 #include <QDebug>
00016
00017 using namespace ui;
00018
00019 QAbstractItemView* GuiFactory::createView(QAbstractItemModel* model)
00020 {
00021 QAbstractItemView* ret;
00022
00023 if (qobject_cast<QAbstractTableModel*>(model) != 0)
00024 ret = new QTableView();
00025 else
00026 ret = new QListView();
00027
00028 ret->setModel(model);
00029 initView(ret);
00030 return ret;
00031 }
00032
00033 void GuiFactory::initView(QAbstractItemView* view)
00034 {
00035 view->setAlternatingRowColors(true);
00036 view->setSelectionMode(QAbstractItemView::MultiSelection);
00037 view->setSelectionBehavior(QAbstractItemView::SelectRows);
00038 view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
00039 view->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
00040
00041 QTableView* tableView = qobject_cast<QTableView*>(view);
00042
00043 if (tableView != 0)
00044 {
00045 tableView->setShowGrid(false);
00046
00047 QHeaderView* header = tableView->horizontalHeader();
00048 header->setMovable(true);
00049
00050 header->setDefaultAlignment(Qt::AlignLeft);
00051 header->setResizeMode(QHeaderView::ResizeToContents);
00052 }
00053
00054 initViewSize(view);
00055 }
00056
00057
00058 void GuiFactory::initViewSize(QAbstractItemView* view)
00059 {
00060 if (view->model() != 0)
00061 {
00062
00063 QRect screen = QApplication::desktop()->screenGeometry();
00064 QSize max(screen.width() / 2, screen.height() / 2);
00065 QSize size(0, 0);
00066
00067 for (int i = 0; i < view->model()->rowCount(); i++)
00068 size.rheight() += view->sizeHintForRow(i);
00069
00070 QHeaderView* header = 0;
00071 QTableView* tableView = qobject_cast<QTableView*>(view);
00072
00073 if (tableView != 0)
00074 header = tableView->horizontalHeader();
00075
00076 for (int i = 0; i < view->model()->columnCount(); i++)
00077 {
00078 int dataSize = view->sizeHintForColumn(i);
00079
00080 if (header == 0)
00081 size.rwidth() += dataSize;
00082 else
00083 size.rwidth() += qMax(dataSize, header->sectionSize(i));
00084 }
00085
00086 view->setMinimumWidth(qMin(size.width(), max.width()));
00087
00088 }
00089 }
00090
00091 QLabel* GuiFactory::createLabel(QWidget* parent)
00092 {
00093 QLabel* ret = new QLabel(parent);
00094
00095 if (qobject_cast<QStatusBar*>(parent) != 0)
00096 {
00097 ret->setFrameShape(QLabel::StyledPanel);
00098 ret->setFrameShadow(QLabel::Sunken);
00099 }
00100
00101 return ret;
00102 }
00103
00104 InputWidget* GuiFactory::createInputWidget(domain::Field::Nature nature)
00105 {
00106 switch (nature)
00107 {
00108 case domain::Field::Textual: return new StringInputWidget();
00109 case domain::Field::Numerical: return new IntInputWidget();
00110
00111 default: qFatal("Unknown nature");
00112 }
00113
00114 return 0;
00115 }
00116
00117 QDateTimeEdit* GuiFactory::createDateTimeEdit()
00118 {
00119 QDateTimeEdit* edit = new QDateTimeEdit();
00120 initDateTimeEdit(edit);
00121 return edit;
00122 }
00123
00124 void GuiFactory::initDateTimeEdit(QDateTimeEdit* edit)
00125 {
00126 edit->setCalendarPopup(true);
00127 edit->setDisplayFormat("dd/MM/yyyy hh:mm:ss");
00128 edit->setDateTime(domain::Clock::currentTime());
00129 }