src/gui/widgets/qtoolbar.cpp File Reference

#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)


Function Documentation

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 }


Generated on Thu Mar 15 13:51:48 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1