#include "qtoolbar.h"
#include <qapplication.h>
#include <qcombobox.h>
#include <qevent.h>
#include <qlayout.h>
#include <qmainwindow.h>
#include <qmenu.h>
#include <qmenubar.h>
#include <qpainter.h>
#include <qrubberband.h>
#include <qsignalmapper.h>
#include <qstyle.h>
#include <qstyleoption.h>
#include <qtoolbutton.h>
#include <qwidgetaction.h>
#include <private/qwidgetaction_p.h>
#include <private/qmainwindowlayout_p.h>
#include "qtoolbar_p.h"
#include "qtoolbarextension_p.h"
#include "qtoolbarhandle_p.h"
#include "qtoolbarseparator_p.h"
#include "qdebug.h"
#include "moc_qtoolbar.cpp"
Include dependency graph for qtoolbar.cpp:

Go to the source code of this file.
Functions | |
| static int | positionForArea (Qt::ToolBarArea area) |
| static QStyleOptionToolBar | getStyleOption (QToolBar *toolBar) |
| static QStyleOptionToolBar getStyleOption | ( | QToolBar * | toolBar | ) | [static] |
Definition at line 66 of file qtoolbar.cpp.
References QStyleOptionToolBar::Beginning, Qt::BottomToolBarArea, QStyleOptionToolBar::End, QStyleOptionToolBar::features, Qt::Horizontal, i, info, QStyleOption::init(), QToolBar::isMovable(), j, layout, QWidget::layout(), QStyleOptionToolBar::lineWidth, QMainWindowLayout::ToolBarLineInfo::list, QStyleOptionToolBar::Middle, QStyleOptionToolBar::Movable, QStyleOptionToolBar::None, QStyleOptionToolBar::OnlyOne, QToolBar::orientation(), QObject::parent(), QStyle::pixelMetric(), QStyle::PM_ToolBarFrameWidth, QMainWindowLayout::ToolBarLineInfo::pos, positionForArea(), QStyleOptionToolBar::positionOfLine, QStyleOptionToolBar::positionWithinLine, Qt::RightToolBarArea, QStyleOption::state, QStyle::State_Horizontal, QWidget::style(), and QStyleOptionToolBar::toolBarArea.
00067 { 00068 QStyleOptionToolBar option; 00069 option.init(toolBar); 00070 if (toolBar->orientation() == Qt::Horizontal) 00071 option.state |= QStyle::State_Horizontal; 00072 option.lineWidth = toolBar->style()->pixelMetric(QStyle::PM_ToolBarFrameWidth); 00073 option.features = toolBar->isMovable() ? QStyleOptionToolBar::Movable : QStyleOptionToolBar::None; 00074 00075 // Add more styleoptions if the toolbar has been added to a mainwindow. 00076 QMainWindow *mainWindow = qobject_cast<QMainWindow *>(toolBar->parent()); 00077 00078 if (!mainWindow) 00079 return option; 00080 00081 QMainWindowLayout *layout = qobject_cast<QMainWindowLayout *>(mainWindow->layout()); 00082 Q_ASSERT_X(layout != 0, "QToolBarPrivate::getStyleOption()", 00083 "QMainWindow->layout() != QMainWindowLayout"); 00084 00085 // Determine the toolbar area. 00086 int layoutIndex = layout->indexOf(toolBar); 00087 if (layoutIndex != -1) 00088 option.toolBarArea = layout->toolBarArea(toolBar); 00089 00090 // Find the toolbar line, and position within the line. 00091 int toolBarTotalLineCount = 0; 00092 int toolBarLineCount = 0; 00093 00094 00095 foreach (QMainWindowLayout::ToolBarLineInfo lineInfo, layout->tb_layout_info) { 00096 00097 if (lineInfo.pos != positionForArea(option.toolBarArea)) 00098 continue; 00099 int toolBarIndex = -1; 00100 bool lineVisible = false; 00101 00102 for (int i = 0; i < lineInfo.list.size(); ++i){ 00103 QMainWindowLayout::ToolBarLayoutInfo layoutInfo = lineInfo.list.at(i); 00104 00105 if (layoutInfo.item->widget()->isVisible()) 00106 lineVisible = true; 00107 00108 if (layoutInfo.item->widget() == toolBar) { 00109 // This is our toolbar, so we now have the line and position. 00110 toolBarLineCount = toolBarTotalLineCount; 00111 00112 // We have to determine how many visible toolbars there are in this line 00113 int visibleLines = 0; 00114 for (int j = 0; j < lineInfo.list.size(); ++j){ 00115 QMainWindowLayout::ToolBarLayoutInfo info = lineInfo.list.at(j); 00116 if (info.item->widget() == toolBar) 00117 toolBarIndex = visibleLines; 00118 if (info.item->widget()->isVisible()) 00119 visibleLines++; 00120 } 00121 00122 // Determine the position within this toolbar line 00123 if (toolBarIndex == 0) { 00124 if (visibleLines == 1) 00125 option.positionWithinLine = QStyleOptionToolBar::OnlyOne; 00126 else 00127 option.positionWithinLine = QStyleOptionToolBar::Beginning; 00128 } else if (toolBarIndex < visibleLines - 1) { 00129 option.positionWithinLine = QStyleOptionToolBar::Middle; 00130 } else if (toolBarIndex == visibleLines - 1) { 00131 option.positionWithinLine = QStyleOptionToolBar::End; 00132 } 00133 break; 00134 } 00135 } 00136 if(lineVisible) 00137 ++toolBarTotalLineCount; 00138 } 00139 00140 Q_ASSERT_X(toolBarLineCount >= 0, "QToolBarPrivate::getStyleOption()", 00141 "toolbar not found in layout"); 00142 00143 00144 00145 if (option.toolBarArea== Qt::BottomToolBarArea || option.toolBarArea==Qt::RightToolBarArea){ 00146 toolBarLineCount = toolBarTotalLineCount-toolBarLineCount-1; 00147 } 00148 00149 // Determine the line position of this toolbar 00150 if (toolBarLineCount == 0) { 00151 if (toolBarTotalLineCount == 1) 00152 option.positionOfLine = QStyleOptionToolBar::OnlyOne; 00153 else 00154 option.positionOfLine = QStyleOptionToolBar::Beginning; 00155 } else if (toolBarLineCount < toolBarTotalLineCount - 1) { 00156 option.positionOfLine = QStyleOptionToolBar::Middle; 00157 } else if (toolBarLineCount == toolBarTotalLineCount - 1) { 00158 option.positionOfLine = QStyleOptionToolBar::End; 00159 } 00160 00161 return option; 00162 }
Here is the call graph for this function:

| static int positionForArea | ( | Qt::ToolBarArea | area | ) | [static] |
Definition at line 55 of file qtoolbar.cpp.
References Qt::BottomToolBarArea, Qt::LeftToolBarArea, Qt::RightToolBarArea, and Qt::TopToolBarArea.
00056 { 00057 switch (area) { 00058 case Qt::LeftToolBarArea: return 0; 00059 case Qt::RightToolBarArea: return 1; 00060 case Qt::TopToolBarArea: return 2; 00061 case Qt::BottomToolBarArea: return 3; 00062 default: return -1; 00063 } 00064 }
1.5.1