[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/gwenview/part
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2008-06-09 21:59:16
Message-ID: 1213048756.118617.31372.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 818876 by gateau:

Uses custom buttons with text for the statusbar zoom buttons.


 M  +86 -7     gvpart.cpp  


--- trunk/KDE/kdegraphics/gwenview/part/gvpart.cpp #818875:818876
@@ -24,6 +24,8 @@
 #include <QLabel>
 #include <QMouseEvent>
 #include <QSlider>
+#include <QStyleOptionToolButton>
+#include <QStylePainter>
 #include <QTimer>
 #include <QToolButton>
 
@@ -53,6 +55,70 @@
 #include "gvbrowserextension.h"
 
 
+// FIXME: Move to its own file
+/**
+ * A tool button which can be grouped with another and look like one solid bar:
+ *
+ * ( button1 | button2 )
+ */
+class CutToolButton : public QToolButton {
+public:
+	enum CutType {
+		CutLeft,
+		CutRight
+	};
+
+	CutToolButton(QWidget* parent=0)
+	: QToolButton(parent)
+	, mCutType(CutLeft) {}
+
+	void setCutType(CutToolButton::CutType cutType) {
+		mCutType = cutType;
+	}
+
+protected:
+	virtual void paintEvent(QPaintEvent* /*event*/) {
+		QStylePainter painter(this);
+		QStyleOptionToolButton opt;
+		initStyleOption(&opt);
+		QStyleOptionToolButton panelOpt = opt;
+
+		// Panel
+		QRect& panelRect = panelOpt.rect;
+		switch (mCutType) {
+		case CutLeft:
+			panelRect.setWidth(panelRect.width() * 2);
+			break;
+		case CutRight:
+			panelRect.setLeft(panelRect.left() - panelRect.width());
+			break;
+		}
+		painter.drawPrimitive(QStyle::PE_PanelButtonTool, panelOpt);
+
+		// Separator
+		int x;
+		QColor color;
+		if (mCutType == CutRight) {
+			color = opt.palette.color(QPalette::Light);
+			x = opt.rect.left();
+		} else {
+			color = opt.palette.color(QPalette::Mid);
+			x = opt.rect.right();
+		}
+		painter.setPen(color);
+		int y1 = opt.rect.top() + 6;
+		int y2 = opt.rect.bottom() - 6;
+		painter.drawLine(x, y1, x, y2);
+
+		// Text
+		painter.drawControl(QStyle::CE_ToolButtonLabel, opt);
+	}
+
+private:
+	CutType mCutType;
+};
+
+
 //Factory Code
 typedef KParts::GenericFactory<Gwenview::GVPart> GVPartFactory;
 K_EXPORT_COMPONENT_FACTORY( gvpart /*library name*/, GVPartFactory )
@@ -122,11 +188,13 @@
 	mZoomToFitAction->setChecked(mView->zoomToFit());
 	mZoomToFitAction->setText(i18n("Zoom to Fit"));
 	mZoomToFitAction->setIcon(KIcon("zoom-fit-best"));
+	mZoomToFitAction->setIconText(i18nc("@action:button Zoom to fit, shown in status \
bar, keep it short please", "Fit"));  connect(mZoomToFitAction, \
SIGNAL(toggled(bool)), SLOT(setZoomToFit(bool)) );  \
actionCollection()->addAction("view_zoom_to_fit", mZoomToFitAction);  
 	KAction* action = KStandardAction::actualSize(this, SLOT(zoomActualSize()), \
actionCollection());  action->setIcon(KIcon("zoom-original"));
+	action->setIconText(i18nc("@action:button Zoom to original size, shown in status \
bar, keep it short please", "100%"));  KStandardAction::zoomIn(this, SLOT(zoomIn()), \
actionCollection());  KStandardAction::zoomOut(this, SLOT(zoomOut()), \
actionCollection());  
@@ -181,33 +249,44 @@
 	layout->addStretch();
 	layout->addWidget(container);
 
-	QToolButton* zoomToFitButton = new QToolButton;
+	CutToolButton* zoomToFitButton = new CutToolButton;
+	zoomToFitButton->setCutType(CutToolButton::CutLeft);
 	zoomToFitButton->setDefaultAction(actionCollection()->action("view_zoom_to_fit"));
-	zoomToFitButton->setObjectName("zoomToFitButton");
 
-	QToolButton* actualSizeButton = new QToolButton;
+	CutToolButton* actualSizeButton = new CutToolButton;
+	actualSizeButton->setCutType(CutToolButton::CutRight);
 	actualSizeButton->setDefaultAction(actionCollection()->action("view_actual_size"));
-	actualSizeButton->setObjectName("actualSizeButton");
 
 	mZoomLabel = new QLabel;
-	mZoomLabel->setObjectName("zoomLabel");
 	mZoomLabel->setFixedWidth(mZoomLabel->fontMetrics().width(" 1000% "));
 	mZoomLabel->setAlignment(Qt::AlignCenter);
 
 	mZoomSlider = new QSlider;
-	mZoomSlider->setObjectName("zoomSlider");
 	mZoomSlider->setOrientation(Qt::Horizontal);
 	mZoomSlider->setRange(sliderValueForZoom(ZOOM_MIN), sliderValueForZoom(ZOOM_MAX));
 	mZoomSlider->setMinimumWidth(200);
 	connect(mZoomSlider, SIGNAL(valueChanged(int)), SLOT(applyZoomSliderValue()) );
 
+	// Adjust sizes
+	zoomToFitButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
+	actualSizeButton->setToolButtonStyle(Qt::ToolButtonTextOnly);
+	zoomToFitButton->setFocusPolicy(Qt::NoFocus);
+	actualSizeButton->setFocusPolicy(Qt::NoFocus);
+	int width = qMax(zoomToFitButton->sizeHint().width(), \
actualSizeButton->sizeHint().width()); +	int height = \
qMax(mZoomLabel->sizeHint().height(), mZoomSlider->sizeHint().height()); \
+	zoomToFitButton->setFixedWidth(width); +	zoomToFitButton->setFixedHeight(height);
+	actualSizeButton->setFixedWidth(width);
+	actualSizeButton->setFixedHeight(height);
+
+	// Layout
 	layout = new QHBoxLayout(container);
 	layout->setMargin(0);
 	layout->setSpacing(0);
 	layout->addWidget(zoomToFitButton);
 	layout->addWidget(actualSizeButton);
+	layout->addWidget(mZoomSlider);
 	layout->addWidget(mZoomLabel);
-	layout->addWidget(mZoomSlider);
 }
 
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic