[Merge] with upstream

This commit is contained in:
Philip 2017-09-12 05:47:44 -04:00
commit 769be16fc6
31 changed files with 231 additions and 122 deletions

29
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,29 @@
#### Submission type
- [ ] Bug report
- [ ] Feature Request
#### Info regarding which version of Calamares is used, which Distribution
> …
#### Provide information on how the disks are set up, in detail, with full logs of commands issued
> …
#### What do you expect to have happen when Calamares installs?
> …
#### Describe the issue you encountered
> …
#### Steps to reproduce the problem
> …
#### Include the installation.log:
> …

View File

@ -16,9 +16,7 @@ notifications:
install:
- docker build -t calamares .
- pip install pycodestyle
script:
- docker run -v $PWD:/src --tmpfs /build:rw,size=65536k calamares bash -lc "cd /build && cmake -DWEBVIEW_FORCE_WEBKIT=1 -DKDE_INSTALL_USE_QT_SYS_PATHS=ON /src && make -j2 && make install DESTDIR=/build/INSTALL_ROOT"
- pycodestyle --exclude=thirdparty,.git $PWD

View File

@ -30,7 +30,7 @@ if( CMAKE_CXX_COMPILER_ID MATCHES "Clang" )
set( CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG" )
set( CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Weverything -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded -Wno-undefined-reinterpret-cast -Wno-global-constructors -Wno-exit-time-destructors" )
set( CMAKE_CXX_FLAGS_DEBUG "-g" )
set( CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG" )
set( CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG" )

View File

@ -46,6 +46,7 @@ void
ViewStepItem::appendChild( ProgressTreeItem* item )
{
Q_ASSERT( false );
Q_UNUSED( item );
}

View File

@ -41,11 +41,11 @@
#ifdef Q_OS_LINUX
const char* k_usage =
static const char k_usage[] =
"Usage:\n"
" CrashReporter <dumpFilePath> <linuxBacktracePath>\n";
#else
const char* k_usage =
static const char k_usage[] =
"Usage:\n"
" CrashReporter <dumpFilePath>\n";
#endif

View File

@ -40,6 +40,8 @@ CppJob::setModuleInstanceKey( const QString& instanceKey )
void
CppJob::setConfigurationMap( const QVariantMap& configurationMap )
{}
{
Q_UNUSED( configurationMap );
}
}

View File

@ -39,9 +39,9 @@
using namespace std;
ofstream logfile;
static int s_threshold = -1;
QMutex s_mutex;
static ofstream logfile;
static unsigned int s_threshold = 0;
static QMutex s_mutex;
namespace Logger
{
@ -49,20 +49,22 @@ namespace Logger
static void
log( const char* msg, unsigned int debugLevel, bool toDisk = true )
{
if ( s_threshold < 0 )
if ( !s_threshold )
{
if ( qApp->arguments().contains( "--debug" ) ||
qApp->arguments().contains( "-d" ) )
s_threshold = LOGVERBOSE;
else
#ifdef QT_NO_DEBUG
#ifdef QT_NO_DEBUG
s_threshold = RELEASE_LEVEL_THRESHOLD;
#else
#else
s_threshold = DEBUG_LEVEL_THRESHOLD;
#endif
#endif
// Comparison is < threshold, below
++s_threshold;
}
if ( toDisk || (int)debugLevel <= s_threshold )
if ( toDisk || debugLevel < s_threshold )
{
QMutexLocker lock( &s_mutex );
@ -78,7 +80,7 @@ log( const char* msg, unsigned int debugLevel, bool toDisk = true )
logfile.flush();
}
if ( debugLevel <= LOGEXTRA || (int)debugLevel <= s_threshold )
if ( debugLevel <= LOGEXTRA || debugLevel < s_threshold )
{
QMutexLocker lock( &s_mutex );
@ -96,6 +98,8 @@ CalamaresLogHandler( QtMsgType type, const QMessageLogContext& context, const QS
{
static QMutex s_mutex;
Q_UNUSED( context );
QByteArray ba = msg.toUtf8();
const char* message = ba.constData();
@ -106,14 +110,12 @@ CalamaresLogHandler( QtMsgType type, const QMessageLogContext& context, const QS
log( message, LOGVERBOSE );
break;
case QtInfoMsg:
log( message, 1 );
break;
case QtCriticalMsg:
log( message, 0 );
break;
case QtWarningMsg:
log( message, 0 );
break;
case QtFatalMsg:
log( message, 0 );
break;

View File

@ -52,7 +52,7 @@ namespace Logger
virtual ~CDebug();
};
DLLEXPORT void CalamaresLogHandler( QtMsgType type, const char* msg );
DLLEXPORT void CalamaresLogHandler( QtMsgType type, const QMessageLogContext& context, const QString& msg );
DLLEXPORT void setupLogfile();
DLLEXPORT QString logFile();
}

View File

@ -0,0 +1,65 @@
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2017, Adriaan de Groot <groot@kde.org>
*
* Calamares 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, either version 3 of the License, or
* (at your option) any later version.
*
* Calamares 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 for more details.
*
* You should have received a copy of the GNU General Public License
* along with Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef LIBCALAMARES_UTILS_UNITS_H
#define LIBCALAMARES_UTILS_UNITS_H
#include <QtCore/QIntegerForSize>
namespace CalamaresUtils
{
/** User defined literals, 1_MiB is 1 MibiByte (= 2^20 bytes) */
constexpr qint64 operator ""_MiB( unsigned long long m )
{
return qint64(m) * 1024 * 1024;
}
/** User defined literals, 1_GiB is 1 GibiByte (= 2^30 bytes) */
constexpr qint64 operator ""_GiB( unsigned long long m )
{
return operator ""_MiB(m) * 1024;
}
constexpr qint64 MiBtoBytes( unsigned long long m )
{
return operator ""_MiB( m );
}
constexpr qint64 GiBtoBytes( unsigned long long m )
{
return operator ""_GiB( m );
}
constexpr qint64 MiBToBytes( double m )
{
return qint64(m * 1024 * 1024);
}
constexpr qint64 GiBtoBytes( double m )
{
return qint64(m * 1024 * 1024 * 1024);
}
constexpr int BytesToMiB( qint64 b )
{
return int( b / 1024 / 1024 );
}
} // namespace
#endif

View File

@ -165,7 +165,7 @@ ExecutionViewStep::appendJobModuleInstanceKey( const QString& instanceKey )
void
ExecutionViewStep::updateFromJobQueue( qreal percent, const QString& message )
{
m_progressBar->setValue( percent * m_progressBar->maximum() );
m_progressBar->setValue( int( percent * m_progressBar->maximum() ) );
m_label->setText( message );
}

View File

@ -100,9 +100,9 @@ public:
/**
* @brief instanceKey returns the instance key of this module.
* @return a string with the instance key.
* A module instance's instance key is modulename@instanceid.
* @example "partition@partition" (default configuration) or
* "locale@someconfig" (custom configuration)
* A module instance's instance key is modulename\@instanceid.
* For instance, "partition\@partition" (default configuration) or
* "locale\@someconfig" (custom configuration)
*/
virtual QString instanceKey() const final;

View File

@ -219,14 +219,14 @@ ModuleManager::loadModules()
}
auto findCustomInstance =
[ customInstances ]( const QString& moduleName,
const QString& instanceId ) -> int
[ customInstances ]( const QString& module,
const QString& id) -> int
{
for ( int i = 0; i < customInstances.count(); ++i )
{
auto thisInstance = customInstances[ i ];
if ( thisInstance.value( "module" ) == moduleName &&
thisInstance.value( "id" ) == instanceId )
if ( thisInstance.value( "module" ) == module &&
thisInstance.value( "id" ) == id )
return i;
}
return -1;

View File

@ -1,6 +1,7 @@
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2014, Teo Mrnjavac <teo@kde.org>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
*
* Originally from Tomahawk,
* Copyright 2012, Christian Muehlhaeuser <muesli@tomahawk-player.org>
@ -52,14 +53,14 @@ ImageRegistry::icon( const QString& image, CalamaresUtils::ImageMode mode )
qint64
ImageRegistry::cacheKey( const QSize& size, float opacity, QColor tint )
ImageRegistry::cacheKey( const QSize& size, qreal opacity, QColor tint )
{
return size.width() * 100 + size.height() * 10 + ( opacity * 100.0 ) + tint.value();
return size.width() * 100 + size.height() * 10 + int( opacity * 100.0 ) + tint.value();
}
QPixmap
ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, float opacity, QColor tint )
ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, QColor tint )
{
QHash< qint64, QPixmap > subsubcache;
QHash< int, QHash< qint64, QPixmap > > subcache;
@ -135,7 +136,7 @@ ImageRegistry::pixmap( const QString& image, const QSize& size, CalamaresUtils::
void
ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, float opacity, const QPixmap& pixmap, QColor tint )
ImageRegistry::putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, const QPixmap& pixmap, QColor tint )
{
// cDebug( LOGVERBOSE ) << Q_FUNC_INFO << "Adding to image cache:" << image << size << mode;

View File

@ -35,11 +35,11 @@ public:
explicit ImageRegistry();
QIcon icon( const QString& image, CalamaresUtils::ImageMode mode = CalamaresUtils::Original );
QPixmap pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode = CalamaresUtils::Original, float opacity = 1.0, QColor tint = QColor( 0, 0, 0, 0 ) );
QPixmap pixmap( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode = CalamaresUtils::Original, qreal opacity = 1.0, QColor tint = QColor( 0, 0, 0, 0 ) );
private:
qint64 cacheKey( const QSize& size, float opacity, QColor tint );
void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, float opacity, const QPixmap& pixmap, QColor tint );
qint64 cacheKey( const QSize& size, qreal opacity, QColor tint );
void putInCache( const QString& image, const QSize& size, CalamaresUtils::ImageMode mode, qreal opacity, const QPixmap& pixmap, QColor tint );
static ImageRegistry* s_instance;
};

View File

@ -37,6 +37,18 @@
#include <QProcess>
#include <QPushButton>
class LayoutItem : public QListWidgetItem
{
public:
QString data;
virtual ~LayoutItem();
};
LayoutItem::~LayoutItem()
{
}
static QPersistentModelIndex
findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout )
{
@ -54,7 +66,7 @@ findLayout( const KeyboardLayoutModel* klm, const QString& currentLayout )
}
KeyboardPage::KeyboardPage( QWidget* parent )
: QWidget()
: QWidget( parent )
, ui( new Ui::Page_Keyboard )
, m_keyboardPreview( new KeyBoardPreview( this ) )
, m_defaultIndex( 0 )
@ -369,6 +381,8 @@ static inline QStringList xkbmap_args( QStringList&& r, const QString& layout, c
void
KeyboardPage::onListVariantCurrentItemChanged( QListWidgetItem* current, QListWidgetItem* previous )
{
Q_UNUSED( previous );
QPersistentModelIndex layoutIndex = ui->listLayout->currentIndex();
LayoutItem* variantItem = dynamic_cast< LayoutItem* >( current );

View File

@ -64,15 +64,9 @@ protected slots:
QListWidgetItem* previous );
private:
class LayoutItem : public QListWidgetItem
{
public:
QString data;
KeyboardGlobal::KeyboardInfo info;
};
/// Guess a layout based on the split-apart locale
void guessLayout( const QStringList& langParts );
void updateVariants( const QPersistentModelIndex& currentItem,
QString currentVariant = QString() );

View File

@ -134,9 +134,6 @@ KeyboardViewStep::onLeave()
void
KeyboardViewStep::setConfigurationMap( const QVariantMap& configurationMap )
{
// Save the settings to the global settings for the SetKeyboardLayoutJob to use
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
if ( configurationMap.contains( "xOrgConfFileName" ) &&
configurationMap.value( "xOrgConfFileName" ).type() == QVariant::String &&
!configurationMap.value( "xOrgConfFileName" ).toString().isEmpty() )

View File

@ -282,7 +282,7 @@ LocalePage::init( const QString& initialRegion,
}
else
{
m_tzWidget->setCurrentLocation( "Europe", "Berlin" );
m_tzWidget->setCurrentLocation( "America", "New_York" );
}
emit m_tzWidget->locationChanged( m_tzWidget->getCurrentLocation() );

View File

@ -132,12 +132,12 @@ LocaleViewStep::fetchGeoIpTimezone()
!map.value( "time_zone" ).toString().isEmpty() )
{
QString timezoneString = map.value( "time_zone" ).toString();
QStringList timezone = timezoneString.split( '/', QString::SkipEmptyParts );
if ( timezone.size() >= 2 )
QStringList tzParts = timezoneString.split( '/', QString::SkipEmptyParts );
if ( tzParts.size() >= 2 )
{
cDebug() << "GeoIP reporting" << timezoneString;
QString region = timezone.takeFirst();
QString zone = timezone.join( '/' );
QString region = tzParts.takeFirst();
QString zone = tzParts.join( '/' );
m_startingTimezone = qMakePair( region, zone );
}
}
@ -271,8 +271,8 @@ LocaleViewStep::setConfigurationMap( const QVariantMap& configurationMap )
}
else
{
m_startingTimezone = qMakePair( QStringLiteral( "Europe" ),
QStringLiteral( "Berlin" ) );
m_startingTimezone = qMakePair( QStringLiteral( "America" ),
QStringLiteral( "New_York" ) );
}
if ( configurationMap.contains( "localeGenPath" ) &&

View File

@ -25,6 +25,7 @@
#include "core/PartUtils.h"
#include "utils/CalamaresUtilsSystem.h"
#include "utils/Units.h"
#include "JobQueue.h"
#include "utils/Logger.h"
#include "GlobalStorage.h"
@ -36,25 +37,10 @@
namespace PartitionActions
{
constexpr qint64 operator ""_MiB( unsigned long long m )
{
return m * static_cast< qint64 >( 1024 ) * 1024;
}
constexpr qint64 operator ""_GiB( unsigned long long m )
{
return operator ""_MiB(m) * static_cast< qint64 >( 1024 );
}
constexpr qint64 toMiB( unsigned long long m )
{
return operator ""_MiB( m );
}
constexpr qint64 toGiB( unsigned long long m )
{
return operator ""_GiB( m );
}
using CalamaresUtils::GiBtoBytes;
using CalamaresUtils::MiBtoBytes;
using CalamaresUtils::operator""_GiB;
using CalamaresUtils::operator""_MiB;
qint64
swapSuggestion( const qint64 availableSpaceB )
@ -140,11 +126,11 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
empty_space_size = 1;
}
qint64 firstFreeSector = toMiB(empty_space_size) / dev->logicalSize() + 1;
qint64 firstFreeSector = MiBtoBytes(empty_space_size) / dev->logicalSize() + 1;
if ( isEfi )
{
qint64 lastSector = firstFreeSector + ( toMiB(uefisys_part_size) / dev->logicalSize() );
qint64 lastSector = firstFreeSector + ( MiBtoBytes(uefisys_part_size) / dev->logicalSize() );
core->createPartitionTable( dev, PartitionTable::gpt );
Partition* efiPartition = KPMHelpers::createNewPartition(
dev->partitionTable(),
@ -175,7 +161,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, const QString& luksPass
qint64 availableSpaceB = ( dev->totalLogical() - firstFreeSector ) * dev->logicalSize();
suggestedSwapSizeB = swapSuggestion( availableSpaceB );
qint64 requiredSpaceB =
toGiB( gs->value( "requiredStorageGB" ).toDouble() + 0.1 + 2.0 ) +
GiBtoBytes( gs->value( "requiredStorageGB" ).toDouble() + 0.1 + 2.0 ) +
suggestedSwapSizeB;
// If there is enough room for ESP + root + swap, create swap, otherwise don't.

View File

@ -474,8 +474,7 @@ ChoicePage::doAlongsideSetupSplitter( const QModelIndex& current,
part->partitionPath(),
qRound64( part->used() * 1.1 ),
part->capacity() - requiredStorageB,
part->capacity() / 2,
*Calamares::Branding::ProductName );
part->capacity() / 2 );
if ( m_isEfi )
setupEfiSystemPartitionSelector();

View File

@ -43,7 +43,7 @@ static const int LABELS_MARGIN = LABEL_PARTITION_SQUARE_MARGIN;
static const int CORNER_RADIUS = 2;
QStringList
static QStringList
buildUnknownDisklabelTexts( Device* dev )
{
QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ),
@ -54,7 +54,7 @@ buildUnknownDisklabelTexts( Device* dev )
PartitionLabelsView::PartitionLabelsView( QWidget* parent )
: QAbstractItemView( parent )
, canBeSelected( []( const QModelIndex& ) { return true; } )
, m_canBeSelected( []( const QModelIndex& ) { return true; } )
, m_extendedPartitionHidden( false )
{
setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed );
@ -100,6 +100,8 @@ PartitionLabelsView::sizeHint() const
void
PartitionLabelsView::paintEvent( QPaintEvent* event )
{
Q_UNUSED( event );
QPainter painter( viewport() );
painter.fillRect( rect(), palette().window() );
painter.setRenderHint( QPainter::Antialiasing );
@ -292,7 +294,6 @@ PartitionLabelsView::drawLabels( QPainter* painter,
!modl->device()->partitionTable() ) // No disklabel or unknown
{
QStringList texts = buildUnknownDisklabelTexts( modl->device() );
QSize labelSize = sizeForLabel( texts );
QColor labelColor = ColorUtils::unknownDisklabelColor();
drawLabel( painter, texts, labelColor, QPoint( rect.x(), rect.y() ), false /*can't be selected*/ );
}
@ -467,6 +468,8 @@ PartitionLabelsView::visualRect( const QModelIndex& idx ) const
QRegion
PartitionLabelsView::visualRegionForSelection( const QItemSelection& selection ) const
{
Q_UNUSED( selection );
return QRegion();
}
@ -516,7 +519,7 @@ PartitionLabelsView::setSelectionModel( QItemSelectionModel* selectionModel )
void
PartitionLabelsView::setSelectionFilter( SelectionFilter canBeSelected )
{
this->canBeSelected = canBeSelected;
m_canBeSelected = canBeSelected;
}
@ -530,6 +533,9 @@ PartitionLabelsView::setExtendedPartitionHidden( bool hidden )
QModelIndex
PartitionLabelsView::moveCursor( CursorAction cursorAction, Qt::KeyboardModifiers modifiers )
{
Q_UNUSED( cursorAction );
Q_UNUSED( modifiers );
return QModelIndex();
}
@ -537,6 +543,8 @@ PartitionLabelsView::moveCursor( CursorAction cursorAction, Qt::KeyboardModifier
bool
PartitionLabelsView::isIndexHidden( const QModelIndex& index ) const
{
Q_UNUSED( index );
return false;
}
@ -545,7 +553,7 @@ void
PartitionLabelsView::setSelection( const QRect& rect, QItemSelectionModel::SelectionFlags flags )
{
QModelIndex eventIndex = indexAt( rect.topLeft() );
if ( canBeSelected( eventIndex ) )
if ( m_canBeSelected( eventIndex ) )
selectionModel()->select( eventIndex, flags );
}
@ -567,7 +575,7 @@ PartitionLabelsView::mouseMoveEvent( QMouseEvent* event )
if ( oldHoveredIndex != m_hoveredIndex )
{
if ( m_hoveredIndex.isValid() && !canBeSelected( m_hoveredIndex ) )
if ( m_hoveredIndex.isValid() && !m_canBeSelected( m_hoveredIndex ) )
QGuiApplication::setOverrideCursor( Qt::ForbiddenCursor );
else
QGuiApplication::restoreOverrideCursor();
@ -580,6 +588,8 @@ PartitionLabelsView::mouseMoveEvent( QMouseEvent* event )
void
PartitionLabelsView::leaveEvent( QEvent* event )
{
Q_UNUSED( event );
QGuiApplication::restoreOverrideCursor();
if ( m_hoveredIndex.isValid() )
{
@ -593,7 +603,7 @@ void
PartitionLabelsView::mousePressEvent( QMouseEvent* event )
{
QModelIndex candidateIndex = indexAt( event->pos() );
if ( canBeSelected( candidateIndex ) )
if ( m_canBeSelected( candidateIndex ) )
QAbstractItemView::mousePressEvent( event );
else
event->accept();

View File

@ -83,7 +83,7 @@ private:
QModelIndexList getIndexesToDraw( const QModelIndex& parent ) const;
QStringList buildTexts( const QModelIndex& index ) const;
SelectionFilter canBeSelected;
SelectionFilter m_canBeSelected;
bool m_extendedPartitionHidden;
QString m_customNewRootLabel;

View File

@ -56,8 +56,8 @@
PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent )
: QWidget( parent )
, m_ui( new Ui_PartitionPage )
, m_lastSelectedBootLoaderIndex(-1)
, m_core( core )
, m_lastSelectedBootLoaderIndex(-1)
, m_isEfi( false )
{
m_isEfi = PartUtils::isEfiSystem();
@ -373,7 +373,7 @@ PartitionPage::updateFromCurrentDevice()
// Establish connection here because selection model is destroyed when
// model changes
connect( m_ui->partitionTreeView->selectionModel(), &QItemSelectionModel::currentChanged,
[ this ]( const QModelIndex& index, const QModelIndex& oldIndex )
[ this ]( const QModelIndex&, const QModelIndex& )
{
updateButtons();
} );

View File

@ -22,6 +22,8 @@
#include "core/ColorUtils.h"
#include "core/KPMHelpers.h"
#include "utils/Units.h"
// Qt
#include <QSpinBox>
@ -185,7 +187,7 @@ PartitionSizeController::doUpdateSpinBox()
{
if ( !m_spinBox )
return;
qint64 mbSize = m_partition->length() * m_device->logicalSize() / 1024 / 1024;
int mbSize = CalamaresUtils::BytesToMiB( m_partition->length() * m_device->logicalSize() );
m_spinBox->setValue( mbSize );
if ( m_currentSpinBoxValue != -1 && //if it's not the first time we're setting it
m_currentSpinBoxValue != mbSize ) //and the operation changes the SB value

View File

@ -34,18 +34,18 @@
#include <QStyleOption>
static const int VIEW_HEIGHT = qMax( CalamaresUtils::defaultFontHeight() + 8, // wins out with big fonts
(int)( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts
int( CalamaresUtils::defaultFontHeight() * 0.6 ) + 22 ); // wins out with small fonts
static const int CORNER_RADIUS = 3;
static const int EXTENDED_PARTITION_MARGIN = qMax( 4, VIEW_HEIGHT / 6 );
PartitionSplitterWidget::PartitionSplitterWidget( QWidget* parent )
: QWidget( parent )
, m_resizing( false )
, m_itemToResize( PartitionSplitterItem::null() )
, m_itemToResizeNext( PartitionSplitterItem::null() )
, m_itemMinSize( 0 )
, m_itemMaxSize( 0 )
, m_itemPrefSize( 0 )
, m_resizing( false )
, m_resizeHandleX( 0 )
, HANDLE_SNAP( QApplication::startDragDistance() )
, m_drawNestedPartitions( false )
@ -114,8 +114,7 @@ void
PartitionSplitterWidget::setSplitPartition( const QString& path,
qint64 minSize,
qint64 maxSize,
qint64 preferredSize,
const QString& newLabel )
qint64 preferredSize )
{
cDebug() << Q_FUNC_INFO << "path:" << path
<< "\nminSize:" << minSize
@ -287,6 +286,8 @@ PartitionSplitterWidget::minimumSizeHint() const
void
PartitionSplitterWidget::paintEvent( QPaintEvent* event )
{
Q_UNUSED( event );
QPainter painter( this );
painter.fillRect( rect(), palette().window() );
painter.setRenderHint( QPainter::Antialiasing );
@ -400,6 +401,8 @@ PartitionSplitterWidget::mouseMoveEvent( QMouseEvent* event )
void
PartitionSplitterWidget::mouseReleaseEvent( QMouseEvent* event )
{
Q_UNUSED( event );
m_resizing = false;
}
@ -491,7 +494,7 @@ PartitionSplitterWidget::drawResizeHandle( QPainter* painter,
painter->setRenderHint( QPainter::Antialiasing, false );
painter->setPen( Qt::black );
painter->drawLine( x, 0, x, h - 1 );
painter->drawLine( x, 0, x, int(h) - 1 );
}
@ -511,20 +514,20 @@ PartitionSplitterWidget::drawPartitions( QPainter* painter,
for ( int row = 0; row < count; ++row )
{
const PartitionSplitterItem& item = items[ row ];
int width;
qreal width;
if ( row < count - 1 )
width = totalWidth * ( item.size / total );
else
// Make sure we fill the last pixel column
width = rect.right() - x + 1;
drawSection( painter, rect, x, width, item );
drawSection( painter, rect, x, int(width), item );
if ( !item.children.isEmpty() )
{
QRect subRect(
x + EXTENDED_PARTITION_MARGIN,
rect.y() + EXTENDED_PARTITION_MARGIN,
width - 2 * EXTENDED_PARTITION_MARGIN,
int(width) - 2 * EXTENDED_PARTITION_MARGIN,
rect.height() - 2 * EXTENDED_PARTITION_MARGIN
);
drawPartitions( painter, subRect, item.children );
@ -600,7 +603,7 @@ PartitionSplitterWidget::computeItemsVector( const QVector< PartitionSplitterIte
PartitionSplitterItem thisItem = originalItems[ row ];
QPair< QVector< PartitionSplitterItem >, qreal > pair = computeItemsVector( thisItem.children );
thisItem.children = pair.first;
thisItem.size = pair.second;
thisItem.size = qint64(pair.second);
items += thisItem;
total += thisItem.size;
}
@ -614,7 +617,7 @@ PartitionSplitterWidget::computeItemsVector( const QVector< PartitionSplitterIte
if ( items[ row ].size < 0.01 * total ) // If this item is smaller than 1% of everything,
{ // force its width to 1%.
adjustedTotal -= items[ row ].size;
items[ row ].size = 0.01 * total;
items[ row ].size = qint64(0.01 * total);
adjustedTotal += items[ row ].size;
}
}

View File

@ -40,9 +40,10 @@ struct PartitionSplitterItem
qint64 size;
Status status;
QVector< PartitionSplitterItem > children;
using ChildVector = QVector< PartitionSplitterItem >;
ChildVector children;
static PartitionSplitterItem null() { return { QString(), QColor(), false, 0, Normal }; }
static PartitionSplitterItem null() { return { QString(), QColor(), false, 0, Normal, ChildVector() }; }
bool isNull() const { return itemPath.isEmpty() && size == 0 && status == Normal; }
operator bool() const { return !isNull(); }
@ -59,8 +60,7 @@ public:
void setSplitPartition( const QString& path,
qint64 minSize,
qint64 maxSize,
qint64 preferredSize,
const QString& newLabel );
qint64 preferredSize );
qint64 splitPartitionSize() const;
qint64 newPartitionSize() const;

View File

@ -41,8 +41,6 @@
typedef QHash<QString, QString> UuidForPartitionHash;
static const char* UUID_DIR = "/dev/disk/by-uuid";
static UuidForPartitionHash
findPartitionUuids( QList < Device* > devices )
{

View File

@ -145,8 +145,12 @@ MoveFileSystemJob::copyBlocks( Report& report, CopyTargetDevice& target, CopySou
qint64 blocksCopied = 0;
void* buffer = malloc( blockSize * source.sectorSize() );
int percent = 0;
Q_ASSERT( blockSize > 0 );
Q_ASSERT( source.sectorSize() > 0 );
Q_ASSERT( blockSize * source.sectorSize() > 0 );
void* buffer = malloc( size_t( blockSize * source.sectorSize() ) );
qint64 percent = 0;
while ( blocksCopied < blocksToCopy )
{
@ -161,7 +165,7 @@ MoveFileSystemJob::copyBlocks( Report& report, CopyTargetDevice& target, CopySou
if ( ++blocksCopied * 100 / blocksToCopy != percent )
{
percent = blocksCopied * 100 / blocksToCopy;
progress( qreal( percent ) / 100. );
progress( percent / 100. );
}
}

View File

@ -19,6 +19,8 @@
#include <PartitionJobTests.h>
#include "utils/Units.h"
#include <jobs/CreatePartitionJob.h>
#include <jobs/CreatePartitionTableJob.h>
#include <jobs/ResizePartitionJob.h>
@ -36,9 +38,8 @@
QTEST_GUILESS_MAIN( PartitionJobTests )
static const qint64 MB = 1024 * 1024;
using namespace Calamares;
using CalamaresUtils::operator""_MiB;
class PartitionMounter
{
@ -79,7 +80,7 @@ generateTestData( qint64 size )
// Fill the array explicitly to keep Valgrind happy
for ( auto it = ba.data() ; it < ba.data() + size ; ++it )
{
*it = rand() % 256;
*it = char( rand() & 0xff );
}
return ba;
}
@ -247,7 +248,7 @@ PartitionJobTests::testCreatePartition()
freePartition = firstFreePartition( m_device->partitionTable() );
QVERIFY( freePartition );
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 1 * MB);
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 1_MiB);
Partition* partition1 = job->partition();
QVERIFY( partition1 );
job->updatePreview();
@ -255,7 +256,7 @@ PartitionJobTests::testCreatePartition()
freePartition = firstFreePartition( m_device->partitionTable() );
QVERIFY( freePartition );
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, 1 * MB);
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::LinuxSwap, 1_MiB);
Partition* partition2 = job->partition();
QVERIFY( partition2 );
job->updatePreview();
@ -263,7 +264,7 @@ PartitionJobTests::testCreatePartition()
freePartition = firstFreePartition( m_device->partitionTable() );
QVERIFY( freePartition );
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, 1 * MB);
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Fat32, 1_MiB);
Partition* partition3 = job->partition();
QVERIFY( partition3 );
job->updatePreview();
@ -288,7 +289,7 @@ PartitionJobTests::testCreatePartitionExtended()
freePartition = firstFreePartition( m_device->partitionTable() );
QVERIFY( freePartition );
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 10 * MB);
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Primary ), FileSystem::Ext4, 10_MiB);
Partition* partition1 = job->partition();
QVERIFY( partition1 );
job->updatePreview();
@ -296,7 +297,7 @@ PartitionJobTests::testCreatePartitionExtended()
freePartition = firstFreePartition( m_device->partitionTable() );
QVERIFY( freePartition );
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10 * MB);
job = newCreatePartitionJob( freePartition, PartitionRole( PartitionRole::Extended ), FileSystem::Extended, 10_MiB);
job->updatePreview();
m_queue.enqueue( job_ptr( job ) );
Partition* extendedPartition = job->partition();
@ -341,7 +342,7 @@ PartitionJobTests::testResizePartition()
QFETCH( int, newStartMB );
QFETCH( int, newSizeMB );
const qint64 sectorForMB = MB / m_device->logicalSize();
const qint64 sectorForMB = 1_MiB / m_device->logicalSize();
qint64 oldFirst = sectorForMB * oldStartMB;
qint64 oldLast = oldFirst + sectorForMB * oldSizeMB - 1;
@ -350,7 +351,7 @@ PartitionJobTests::testResizePartition()
// Make the test data file smaller than the full size of the partition to
// accomodate for the file system overhead
const QByteArray testData = generateTestData( ( qMin( oldSizeMB, newSizeMB ) ) * MB * 3 / 4 );
const QByteArray testData = generateTestData( CalamaresUtils::MiBtoBytes( qMin( oldSizeMB, newSizeMB ) ) * 3 / 4 );
const QString testName = "test.data";
// Setup: create the test partition

View File

@ -27,6 +27,8 @@
#include "utils/Logger.h"
#include "utils/Retranslator.h"
#include "utils/CalamaresUtilsSystem.h"
#include "utils/Units.h"
#include "JobQueue.h"
#include "GlobalStorage.h"
@ -51,9 +53,10 @@
RequirementsChecker::RequirementsChecker( QObject* parent )
: QObject( parent )
, m_widget( new QWidget() )
, m_requiredStorageGB( -1 )
, m_requiredRamGB( -1 )
, m_actualWidget( new CheckerWidget() )
, m_verdict( false )
, m_requiredStorageGB( -1 )
{
QBoxLayout* mainLayout = new QHBoxLayout;
m_widget->setLayout( mainLayout );
@ -77,12 +80,12 @@ RequirementsChecker::RequirementsChecker( QObject* parent )
bool isRoot = false;
bool enoughScreen = (availableSize.width() >= CalamaresUtils::windowPreferredWidth) && (availableSize.height() >= CalamaresUtils::windowPreferredHeight);
qint64 requiredStorageB = m_requiredStorageGB * 1073741824L; /*powers of 2*/
qint64 requiredStorageB = CalamaresUtils::GiBtoBytes(m_requiredStorageGB);
cDebug() << "Need at least storage bytes:" << requiredStorageB;
if ( m_entriesToCheck.contains( "storage" ) )
enoughStorage = checkEnoughStorage( requiredStorageB );
qint64 requiredRamB = m_requiredRamGB * 1073741824L; /*powers of 2*/
qint64 requiredRamB = CalamaresUtils::GiBtoBytes(m_requiredRamGB);
cDebug() << "Need at least ram bytes:" << requiredRamB;
if ( m_entriesToCheck.contains( "ram" ) )
enoughRam = checkEnoughRam( requiredRamB );