mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-04 05:30:32 -05:00 
			
		
		
		
	
		
			
	
	
		
			130 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			130 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								///////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								// Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany //
							 | 
						||
| 
								 | 
							
								// written by Christian Daniel                                                   //
							 | 
						||
| 
								 | 
							
								//                                                                               //
							 | 
						||
| 
								 | 
							
								// This program is free software; you can redistribute it and/or modify          //
							 | 
						||
| 
								 | 
							
								// it under the terms of the GNU General Public License as published by          //
							 | 
						||
| 
								 | 
							
								// the Free Software Foundation as version 3 of the License, or                  //
							 | 
						||
| 
								 | 
							
								//                                                                               //
							 | 
						||
| 
								 | 
							
								// This program is distributed in the hope that it will be useful,               //
							 | 
						||
| 
								 | 
							
								// but WITHOUT ANY WARRANTY; without even the implied warranty of                //
							 | 
						||
| 
								 | 
							
								// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the                  //
							 | 
						||
| 
								 | 
							
								// GNU General Public License V3 for more details.                               //
							 | 
						||
| 
								 | 
							
								//                                                                               //
							 | 
						||
| 
								 | 
							
								// You should have received a copy of the GNU General Public License             //
							 | 
						||
| 
								 | 
							
								// along with this program. If not, see <http://www.gnu.org/licenses/>.          //
							 | 
						||
| 
								 | 
							
								///////////////////////////////////////////////////////////////////////////////////
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <QPainter>
							 | 
						||
| 
								 | 
							
								#include "gui/scale.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Scale::Scale(QWidget* parent) :
							 | 
						||
| 
								 | 
							
									QWidget(parent)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void Scale::setOrientation(Qt::Orientation orientation)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_orientation = orientation;
							 | 
						||
| 
								 | 
							
									m_scaleEngine.setOrientation(orientation);
							 | 
						||
| 
								 | 
							
									m_scaleEngine.setFont(font());
							 | 
						||
| 
								 | 
							
									QFontMetrics fm(font());
							 | 
						||
| 
								 | 
							
									switch(m_orientation) {
							 | 
						||
| 
								 | 
							
										case Qt::Horizontal:
							 | 
						||
| 
								 | 
							
											m_scaleEngine.setSize(width());
							 | 
						||
| 
								 | 
							
											setMinimumWidth(0);
							 | 
						||
| 
								 | 
							
											setMaximumWidth(QWIDGETSIZE_MAX);
							 | 
						||
| 
								 | 
							
											setMinimumHeight(3 + fontMetrics().ascent());
							 | 
						||
| 
								 | 
							
											setMaximumHeight(3 + fontMetrics().ascent());
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case Qt::Vertical:
							 | 
						||
| 
								 | 
							
											m_scaleEngine.setSize(height());
							 | 
						||
| 
								 | 
							
											setMinimumWidth(30);
							 | 
						||
| 
								 | 
							
											setMaximumWidth(30);
							 | 
						||
| 
								 | 
							
											setMinimumHeight(0);
							 | 
						||
| 
								 | 
							
											setMaximumHeight(QWIDGETSIZE_MAX);
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void Scale::setRange(Unit::Physical physicalUnit, float rangeMin, float rangeMax)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									m_scaleEngine.setRange(physicalUnit, rangeMin, rangeMax);
							 | 
						||
| 
								 | 
							
									update();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void Scale::paintEvent(QPaintEvent*)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									QPainter painter(this);
							 | 
						||
| 
								 | 
							
									const ScaleEngine::TickList& tickList = m_scaleEngine.getTickList();
							 | 
						||
| 
								 | 
							
									QFontMetricsF fontMetrics(font());
							 | 
						||
| 
								 | 
							
									const ScaleEngine::Tick* tick;
							 | 
						||
| 
								 | 
							
									int i;
							 | 
						||
| 
								 | 
							
									float bottomLine;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									switch(m_orientation) {
							 | 
						||
| 
								 | 
							
										case Qt::Horizontal: {
							 | 
						||
| 
								 | 
							
											painter.setPen(Qt::black);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Zwischenlinien für x-Achse zeichnen
							 | 
						||
| 
								 | 
							
											for(i = 0; i < tickList.count(); i++) {
							 | 
						||
| 
								 | 
							
												tick = &tickList[i];
							 | 
						||
| 
								 | 
							
												if(!tick->major)
							 | 
						||
| 
								 | 
							
													painter.drawLine(QLineF(tick->pos, 0, tick->pos, 1));
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Skala am Rand zeichnen
							 | 
						||
| 
								 | 
							
											painter.drawLine(QLineF(0, 0, width() - 1, 0));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Hauptlinien und Beschriftung für x-Achse zeichnen
							 | 
						||
| 
								 | 
							
											for(i = 0; i < tickList.count(); i++) {
							 | 
						||
| 
								 | 
							
												tick = &tickList[i];
							 | 
						||
| 
								 | 
							
												if(tick->major) {
							 | 
						||
| 
								 | 
							
													painter.drawLine(QLineF(tick->pos - 1, 0, tick->pos - 1, 3));
							 | 
						||
| 
								 | 
							
													if(tick->textSize > 0) {
							 | 
						||
| 
								 | 
							
														painter.drawText(QPointF(tick->textPos, 3 + fontMetrics.ascent()), tick->text);
							 | 
						||
| 
								 | 
							
													}
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										case Qt::Vertical: {
							 | 
						||
| 
								 | 
							
											bottomLine = height() - 1;
							 | 
						||
| 
								 | 
							
											painter.setPen(Qt::black);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Zwischenlinien für y-Achse zeichnen
							 | 
						||
| 
								 | 
							
											for(i = 0; i < tickList.count(); i++) {
							 | 
						||
| 
								 | 
							
												tick = &tickList[i];
							 | 
						||
| 
								 | 
							
												if(!tick->major)
							 | 
						||
| 
								 | 
							
													painter.drawLine(QLineF(width() - 2, bottomLine - tick->pos, width() - 1, bottomLine - tick->pos));
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Skala am Rand zeichnen
							 | 
						||
| 
								 | 
							
											painter.drawLine(QLineF(width() - 1, 0, width() - 1, height() - 1));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											// Hauptlinien und Beschriftung für y-Achse zeichnen
							 | 
						||
| 
								 | 
							
											for(i = 0; i < tickList.count(); i++) {
							 | 
						||
| 
								 | 
							
												tick = &tickList[i];
							 | 
						||
| 
								 | 
							
												if(tick->major) {
							 | 
						||
| 
								 | 
							
													painter.drawLine(QLineF(width() - 4, bottomLine - tick->pos, width() - 1, bottomLine - tick->pos));
							 | 
						||
| 
								 | 
							
													if(tick->textSize > 0)
							 | 
						||
| 
								 | 
							
														painter.drawText(QPointF(width() - 4 - tick->textSize, bottomLine - tick->textPos), tick->text);
							 | 
						||
| 
								 | 
							
												}
							 | 
						||
| 
								 | 
							
											}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void Scale::resizeEvent(QResizeEvent*)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									switch(m_orientation) {
							 | 
						||
| 
								 | 
							
										case Qt::Horizontal:
							 | 
						||
| 
								 | 
							
											m_scaleEngine.setSize(width());
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
										case Qt::Vertical:
							 | 
						||
| 
								 | 
							
											m_scaleEngine.setSize(height());
							 | 
						||
| 
								 | 
							
											break;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |