Add localization and russian translation.

new_installer
ivan 14 years ago
parent a86b1f6b74
commit 482f2191b5

@ -1,79 +1,130 @@
project(cl-install-gui)
cmake_minimum_required(VERSION 2.6)
set(PROJECT cl-install-gui)
project(${PROJECT})
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "MinsizeRel")
endif(NOT CMAKE_BUILD_TYPE)
list(APPEND CMAKE_MODULE_PATH "cmake")
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
set(CMAKE_INSTALL_PREFIX /usr CACHE INTERNAL "Prefix prepended to install directories" FORCE)
set(QT_MIN_VERSION 4.6.0)
find_package(Qt4 REQUIRED)
# TODO: libparted and qtermwidget also REQUIRED
find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
include(${QT_USE_FILE})
# TODO: libparted and qtermwidget also REQUIRED
set(TRANSLATIONS_DEST "share/${PROJECT}")
include_directories(
${QT_INCLUDES}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
/usr/lib
)
set( cl_install_gui_SRCS
set( SOURCES
src/main.cpp
src/systeminstaller.cpp
src/pagemanager.cpp
src/pagewelcome.cpp
src/pagelicense.cpp
src/pagepartitioning.cpp
src/pagecfdisk.cpp
src/pageconfiguration.cpp
src/pagefinish.cpp
src/pageinstall.cpp
src/pagelanguage.cpp
src/pagelicense.cpp
src/pagemanager.cpp
src/pagepartitioning.cpp
src/systeminstaller.cpp
src/pagefinish.cpp
src/tools.cpp
src/libparted.cpp
)
set (cl_install_gui_HDRS
set( HEADERS
src/systeminstaller.h
src/installerpage.h
src/pagemanager.h
src/pagewelcome.h
src/pagelicense.h
src/pagepartitioning.h
src/pagecfdisk.h
src/pageconfiguration.h
src/pagefinish.h
src/pageinstall.h
src/pagelanguage.h
src/pagelicense.h
src/pagemanager.h
src/pagepartitioning.h
src/systeminstaller.h
src/pagefinish.h
src/libparted.h
)
set( cl_install_gui_RCC
set( LANGUAGES
ru
)
set( RESOURCES
resources/systeminstaller.qrc
)
add_definitions( -DQT_GUI_LIB -DQT_CORE_LIB )
add_definitions( -DQT_GUI_LIB -DQT_CORE_LIB -Wall)
include_directories(
./
${QT_INCLUDES}
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
/usr/lib
)
qt4_wrap_cpp( cl_install_gui_MOC_SRCS
${cl_install_gui_HDRS}
qt4_add_resources( RESOURCES_SRCS
${RESOURCES}
)
qt4_add_resources( cl_install_gui_RCC_SRCS
${cl_install_gui_RCC}
qt4_wrap_cpp( MOC_SRCS
${HEADERS}
)
add_executable( cl-install-gui
${cl_install_gui_SRCS}
${cl_install_gui_MOC_SRCS}
${cl_install_gui_RCC_SRCS}
foreach (LANGUAGE ${LANGUAGES})
set (TS ${PROJECT_SOURCE_DIR}/translations/${PROJECT}_${LANGUAGE}.ts)
set (QM ${CMAKE_BINARY_DIR}/translations/${PROJECT}_${LANGUAGE}.qm)
set (TRANSLATIONS ${TRANSLATIONS} ${TS})
set (TRANSLATIONS_BINARY ${TRANSLATIONS_BINARY} ${QM})
add_custom_command (
OUTPUT ${QM}
COMMAND ${QT_LRELEASE_EXECUTABLE} ${TS}
MAIN_DEPENDENCY ${TS}
)
endforeach()
add_custom_target (
translations
COMMAND ${QT_LUPDATE_EXECUTABLE} ${HEADERS} ${SOURCES} -ts ${TRANSLATIONS}
)
add_custom_command (
TARGET translations
COMMAND ${QT_LRELEASE_EXECUTABLE} ${TRANSLATIONS}
)
add_executable( ${PROJECT}
${HEADERS}
${SOURCES}
${MOC_SRCS}
${RESOURCES_SRCS}
${TRANSLATIONS}
)
target_link_libraries( cl-install-gui
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
target_link_libraries( ${PROJECT}
${QT_LIBRARIES}
qtermwidget
parted
)
install( TARGETS cl-install-gui DESTINATION /usr/sbin )
install( FILES ${CMAKE_BINARY_DIR}/${PROJECT}
DESTINATION sbin
PERMISSIONS
OWNER_EXECUTE OWNER_WRITE OWNER_READ
GROUP_EXECUTE GROUP_READ
WORLD_EXECUTE WORLD_READ
)
install( FILES ${TRANSLATIONS_BINARY}
DESTINATION share/${PROJECT}
PERMISSIONS
OWNER_WRITE OWNER_READ
GROUP_READ
WORLD_READ
)
#install( FILES resources/${PROJECT}.desktop
# DESTINATION share/applications
# PERMISSIONS
# OWNER_WRITE OWNER_READ
# GROUP_READ
# WORLD_READ
#)

@ -1,9 +1,5 @@
<RCC>
<qresource prefix="/">
<file>img/calculate-logo.png</file>
<file>licenses/en.txt</file>
<file>licenses/ru.txt</file>
<file>texts/welcome_en.txt</file>
<file>texts/complete_en.txt</file>
</qresource>
</RCC>

@ -1,20 +1,24 @@
#pragma once
#include <QObject>
#include <QWidget>
#include <QEvent>
class InstallerPage : public QObject
class InstallerPage : public QWidget
{
Q_OBJECT
public:
InstallerPage( const QString& title, QObject* parent = 0 ) : QObject(parent), m_Widget(new QWidget()), m_Title(title) {}
virtual ~InstallerPage() { delete m_Widget; }
InstallerPage( QWidget* parent = 0, const QString& title = QString() ) : QWidget(parent), m_Title(title) {}
virtual ~InstallerPage() {}
protected:
virtual void setupUi() = 0;
public:
QWidget* getWidget() { return m_Widget; }
QString getTitle() { return m_Title; }
QString getTitle() const { return m_Title; }
void setTitle(const QString& title ) { m_Title = title; }
virtual bool validate() = 0;
virtual bool validate() const { return true; }
virtual void retranslateUi() = 0;
signals:
void changeNext(bool);
@ -24,6 +28,5 @@ public slots:
virtual void show() {}
protected:
QWidget* m_Widget;
QString m_Title;
};

@ -96,7 +96,7 @@ QList<PartitionInfo> LibParted::getPartitionList(const QString& path) throw(LibP
{
char* type = const_cast<char*>( ped_partition_type_get_name(part->type) );
part_inf.type = QString(type);
//free(name);
//free(type);
}
part_inf.fs = part->fs_type ? QString(part->fs_type->name) : "";
@ -105,13 +105,8 @@ QList<PartitionInfo> LibParted::getPartitionList(const QString& path) throw(LibP
{
char* name = const_cast<char*>( ped_partition_get_name(part) );
part_inf.name = QString(name);
//free(name);
}
//part_inf. = QString(name);
//free(name);
//char *flags = const_cast<char*>( partition_print_flags(part) );
//Flags = QString(flags);
//free(flags);
} else {
part_inf.type = "Free space";
@ -144,7 +139,7 @@ DeviceInfo LibParted::convertPedDevice(const PedDevice* dev)
QString LibParted::sizeHuman(const long long size)
{
const QString unit[] = {"B", "KB", "MB", "GB"};
const QString unit[] = {tr("B"), tr("KB"), tr("MB"), tr("GB")};
float conv_size;
float coef = 1;
@ -157,6 +152,5 @@ QString LibParted::sizeHuman(const long long size)
coef *= 1000;
}
}

@ -6,7 +6,6 @@
#include <QMessageBox>
#include <QtDebug>
#include "systeminstaller.h"
int main(int argc, char** argv)
@ -17,9 +16,7 @@ int main(int argc, char** argv)
QApplication app(argc, argv);
// QTranslator localize;
// app.installTranslator();
SystemInstaller installer;
if ( getuid() != 0)
{
@ -27,8 +24,6 @@ int main(int argc, char** argv)
return -1;
}
SystemInstaller installer;
installer.show();
return app.exec();

@ -4,23 +4,27 @@
#include <QLabel>
#include <QFont>
//
#include <QMessageBox>
#include "qtermwidget/qtermwidget.h"
PageCfdisk::PageCfdisk(const QString& title, const QString& disk) :
InstallerPage(title),
PageCfdisk::PageCfdisk( const QString& command, const QString& disk) :
InstallerPage(),
m_Cmd(command),
m_Disk(disk)
{
QLabel* label = new QLabel("cfdisk");
QWidget* widget = new QWidget;
widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setupUi();
QVBoxLayout* vbox_1 = new QVBoxLayout;
connect(m_Term, SIGNAL(finished()), this, SIGNAL(completed()));
m_Term->startShellProgram();
}
vbox_1->addWidget(label);
vbox_1->addWidget(widget);
void PageCfdisk::setupUi()
{
m_labelHelp = new QLabel;
m_widgetTerm = new QWidget;
m_widgetTerm->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_Term = new QTermWidget(0);
@ -29,18 +33,29 @@ PageCfdisk::PageCfdisk(const QString& title, const QString& disk) :
font.setPointSize(10);
m_Term->setTerminalFont(font);
m_Term->setParent(widget);
m_Term->setParent(m_widgetTerm);
QVBoxLayout* vbox_1 = new QVBoxLayout;
vbox_1->addWidget(m_labelHelp);
vbox_1->addWidget(m_widgetTerm);
QHBoxLayout* hbox_1 = new QHBoxLayout;
hbox_1->addWidget(m_Term);
widget->setLayout(hbox_1);
m_widgetTerm->setLayout(hbox_1);
m_Widget->setLayout(vbox_1);
setLayout(vbox_1);
connect(m_Term, SIGNAL(finished()), this, SIGNAL(completed()));
retranslateUi();
}
m_Term->startShellProgram();
void PageCfdisk::retranslateUi()
{
qDebug() << "PageCfdisk::retranslateUi()";
setTitle( tr("Partitioning") );
m_labelHelp->setText( tr("Do manual partitioning. To finish, exit from %1") );
}
bool PageCfdisk::validate()
@ -50,7 +65,7 @@ bool PageCfdisk::validate()
void PageCfdisk::show()
{
QString cmd = "cfdisk " + m_Disk + "; exit \r\n";
QString cmd = m_Cmd + " " + m_Disk + "; exit \r\n";
m_Term->sendText( cmd );
m_Term->setFocus();
}

@ -3,14 +3,20 @@
#include "installerpage.h"
class QTermWidget;
class QWidget;
class QLabel;
class PageCfdisk : public InstallerPage
{
Q_OBJECT
public:
explicit PageCfdisk(const QString& title, const QString& disk);
explicit PageCfdisk(const QString& command, const QString& disk);
bool validate();
void retranslateUi();
protected:
void setupUi();
public slots:
void show();
@ -21,7 +27,10 @@ signals:
//
private:
const QString m_Cmd;
const QString m_Disk;
QWidget* m_widgetTerm;
QLabel* m_labelHelp;
QTermWidget* m_Term;
};

@ -5,35 +5,41 @@
#include <QComboBox>
#include <QLineEdit>
PageConfiguration::PageConfiguration(const QString& title) :
InstallerPage(title)
#include <QDebug>
PageConfiguration::PageConfiguration() :
InstallerPage( )
{
setupUi();
}
QLabel* labelText = new QLabel( tr("Select parameters: ") );
void PageConfiguration::setupUi()
{
m_labelText = new QLabel;
QHBoxLayout* hbox_1 = new QHBoxLayout;
QLabel* labelHostName = new QLabel( tr("Hostname:") );
m_labelHostName = new QLabel;
m_Hostname = new QLineEdit( "calculate" );
hbox_1->addWidget(labelHostName);
hbox_1->addWidget(m_labelHostName);
hbox_1->addWidget(m_Hostname);
QHBoxLayout* hbox_2 = new QHBoxLayout;
QLabel* langText = new QLabel( tr("Language:") );
m_langText = new QLabel;
m_Language = new QComboBox;
//"en_US", "de_DE", "es_ES", "fr_FR", "it_IT", "pl_PL", "pt_BR", "ru_RU", "uk_UA"
m_Language->addItem("en_US");
m_Language->addItem("ru_RU");
hbox_2->addWidget(langText);
hbox_2->addWidget(m_langText);
hbox_2->addWidget(m_Language);
QHBoxLayout* hbox_3 = new QHBoxLayout;
QLabel* labelFormat = new QLabel( tr("Format") );
m_labelFormat = new QLabel;
m_Format = new QComboBox;
m_Format->addItem( "reiserfs" );
@ -43,12 +49,12 @@ PageConfiguration::PageConfiguration(const QString& title) :
m_Format->addItem( "jfs" );
m_Format->addItem( "xfs" );
hbox_3->addWidget(labelFormat);
hbox_3->addWidget(m_labelFormat);
hbox_3->addWidget(m_Format);
QHBoxLayout* hbox_4 = new QHBoxLayout;
QLabel* labelTimezone = new QLabel( tr("Timezone:") );
m_labelTimezone = new QLabel;
m_Timezone = new QComboBox;
// TODO: load list timezones
@ -56,12 +62,12 @@ PageConfiguration::PageConfiguration(const QString& title) :
m_Timezone->addItem( "Europe/Minsk" );
m_Timezone->addItem( "Europe/Kiev" );
hbox_4->addWidget(labelTimezone);
hbox_4->addWidget(m_labelTimezone);
hbox_4->addWidget(m_Timezone);
QVBoxLayout* vbox_1 = new QVBoxLayout;
vbox_1->addWidget( labelText );
vbox_1->addWidget( m_labelText );
vbox_1->addLayout(hbox_1);
vbox_1->addLayout(hbox_2);
vbox_1->addLayout(hbox_3);
@ -69,9 +75,25 @@ PageConfiguration::PageConfiguration(const QString& title) :
vbox_1->addStretch();
//
m_Widget->setLayout( vbox_1 );
setLayout( vbox_1 );
retranslateUi();
}
void PageConfiguration::retranslateUi()
{
qDebug() << "PageConfiguration::retranslateUi()";
setTitle( tr("Configuring") );
m_labelText->setText( tr("Select parameters: ") );
m_labelHostName->setText( tr("Hostname: ") );
m_langText->setText( tr("Language:") );
m_labelFormat->setText( tr("Format") );
m_labelTimezone->setText( tr("Timezone:") );
}
bool PageConfiguration::validate()
{
if ( !m_Hostname->text().isEmpty() )

@ -5,14 +5,19 @@
class QComboBox;
class QLineEdit;
class QLabel;
class PageConfiguration : public InstallerPage
{
Q_OBJECT
public:
explicit PageConfiguration(const QString& title);
explicit PageConfiguration();
bool validate();
void retranslateUi();
protected:
void setupUi();
public slots:
@ -20,6 +25,11 @@ signals:
void selectedSettings(InstallerSettings);
private:
QLabel* m_labelText;
QLabel* m_labelHostName;
QLabel* m_langText;
QLabel* m_labelFormat;
QLabel* m_labelTimezone;
QLineEdit* m_Hostname;
QComboBox* m_Language;
QComboBox* m_Format;

@ -8,21 +8,44 @@
#include "tools.h"
PageFinish::PageFinish(const QString& title) :
InstallerPage(title)
PageFinish::PageFinish() :
InstallerPage()
{
QLabel* label = new QLabel( LoadTextFile(":/texts/complete_en.txt") );
setupUi();
}
void PageFinish::setupUi()
{
m_labelComplete = new QLabel;
label->setWordWrap(true);
label->setAlignment( Qt::AlignLeft | Qt::AlignTop );
m_labelComplete->setWordWrap(true);
m_labelComplete->setAlignment( Qt::AlignLeft | Qt::AlignTop );
QVBoxLayout* vbox = new QVBoxLayout;
vbox->addWidget(label);
vbox->addWidget(m_labelComplete);
m_Widget->setLayout(vbox);
setLayout(vbox);
retranslateUi();
}
void PageFinish::retranslateUi()
{
qDebug() << "PageFinish::retranslateUi()";
setTitle( tr("Complete") );
m_labelComplete->setText( "<html>" +
tr(
"<h4>Congratulation!</h4>"
"<p>Installation complete."
"Press Finish for exit.</p>"
) +
"</html>"
);
}
bool PageFinish::validate()
{
// last page, need finish
@ -34,4 +57,4 @@ bool PageFinish::validate()
void PageFinish::show()
{
emit changePrev(false);
}
}

@ -2,13 +2,19 @@
#include "installerpage.h"
class QLabel;
class PageFinish : public InstallerPage
{
Q_OBJECT
public:
explicit PageFinish(const QString& title);
explicit PageFinish();
bool validate();
void retranslateUi();
protected:
void setupUi();
public slots:
void show();
@ -16,6 +22,10 @@ public slots:
signals:
void finish();
private:
static const QString m_messageComplete;
QLabel* m_labelComplete;
};

@ -7,17 +7,20 @@
#include <QTextEdit>
#include <QProgressBar>
PageInstall::PageInstall(const QString& title, InstallerSettings* settings) :
InstallerPage(title),
PageInstall::PageInstall(InstallerSettings* settings) :
InstallerPage( ),
m_Settings(settings),
m_clProc(0)
{
//QLabel* label = new QLabel( tr("") )
setupUi();
}
void PageInstall::setupUi()
{
m_Output = new QTextEdit;
m_Output->setReadOnly(true);
m_LabelEta = new QLabel( tr("Eta: unknown") );
m_LabelEta = new QLabel;
m_Progress = new QProgressBar(0);
QHBoxLayout* hbox = new QHBoxLayout;
@ -29,9 +32,21 @@ PageInstall::PageInstall(const QString& title, InstallerSettings* settings) :
vbox->addWidget(m_Output);
vbox->addLayout(hbox);
m_Widget->setLayout(vbox);
setLayout(vbox);
retranslateUi();
}
void PageInstall::retranslateUi()
{
qDebug() << "PageInstall::retranslateUi()";
setTitle( tr("Installing") );
m_LabelEta->setText( tr("Eta: unknown") );
}
void PageInstall::show()
{
emit changeNext(false);
@ -62,11 +77,6 @@ void PageInstall::show()
}
}
bool PageInstall::validate()
{
return true;
}
void PageInstall::onError(QProcess::ProcessError error)
{
qDebug() << "failed to run process 'calculate' error=" << error ;

@ -13,9 +13,13 @@ class PageInstall : public InstallerPage
{
Q_OBJECT
public:
explicit PageInstall(const QString& title, InstallerSettings* settings);
explicit PageInstall(InstallerSettings* settings);
bool validate();
void retranslateUi();
protected:
void setupUi();
public slots:
void show();

@ -1,45 +0,0 @@
#include "pagelanguage.h"
#include <QBoxLayout>
#include <QLabel>
#include <QComboBox>
#include "tools.h"
PageLanguage::PageLanguage(const QString& title) :
InstallerPage(title)
{
// widgets
m_labelWelcome = new QLabel( LoadTextFile(":/texts/welcome_en.txt") );
m_labelWelcome->setWordWrap( true );
m_labelWelcome->setOpenExternalLinks( true );
m_labelLanguage = new QLabel( tr("Choose a language: ") );
m_comboboxLanguages = new QComboBox;
//
QHBoxLayout* hbox_1 = new QHBoxLayout;
hbox_1->addWidget(m_comboboxLanguages);
hbox_1->addStretch();
//
QVBoxLayout* vbox_1 = new QVBoxLayout;
vbox_1->addWidget( m_labelWelcome );
vbox_1->addWidget( m_labelLanguage );
vbox_1->addLayout( hbox_1 );
vbox_1->addStretch();
m_Widget->setLayout(vbox_1);
// TODO: fill use translate files
m_comboboxLanguages->addItem( tr("English") );
m_comboboxLanguages->addItem( tr("Russian") );
}
bool PageLanguage::validate()
{
return true;
}

@ -1,25 +0,0 @@
#pragma once
#include "installerpage.h"
class QLabel;
class QComboBox;
class QTextBrowser;
class PageLanguage : public InstallerPage
{
Q_OBJECT
public:
explicit PageLanguage(const QString& title);
bool validate();
signals:
void changeLanguage(int);
private:
QLabel* m_labelWelcome;
QLabel* m_labelLanguage;
QComboBox* m_comboboxLanguages;
};

@ -4,27 +4,67 @@
#include <QTextEdit>
#include <QCheckBox>
#include <QDebug>
#include "tools.h"
PageLicense::PageLicense(const QString& title) :
InstallerPage(title)
PageLicense::PageLicense() :
InstallerPage( )
{
// TODO: select file for locale
textLicense = new QTextEdit( LoadTextFile(":/licenses/en.txt") );
checkAccept = new QCheckBox( tr("Accept") );
connect( checkAccept, SIGNAL(toggled(bool)), this, SIGNAL(changeNext(bool)) );
setupUi();
connect( m_checkAccept, SIGNAL(toggled(bool)), this, SIGNAL(changeNext(bool)) );
}
void PageLicense::setupUi()
{
m_textLicense = new QTextEdit;
m_checkAccept = new QCheckBox;
m_textLicense->setReadOnly(true);
QHBoxLayout* hbox_1 = new QHBoxLayout;
hbox_1->addWidget(checkAccept);
hbox_1->addWidget(m_checkAccept);
hbox_1->addStretch();
QVBoxLayout* vbox_1 = new QVBoxLayout;
vbox_1->addWidget(textLicense);
vbox_1->addWidget(m_textLicense);
vbox_1->addLayout(hbox_1);
m_Widget->setLayout(vbox_1);
setLayout(vbox_1);
retranslateUi();
}
void PageLicense::retranslateUi()
{
qDebug() << "PageLicense::retranslateUi()";
setTitle( tr("License") );
m_textLicense->setText( "<html>" +
tr(
"<h3>License</h3>"
"<h4>License Agreement</h4>"
"<p>This operating system (the OS) is composed of many individual software components,"
" the copyrights on each of which belong to their respective owners."
" Each component is distributed under their own license agreement.</p>"
"<p>Installing, modifying or distributing this operating system, given to you as free archive,"
" you agree with all of the following.</p>"
"<h4>Warranties</h4>"
"<p>This software is distributed without warranty of any kind."
" You assume all responsibility for the use of the operating system.</p>"
"<h4>Installing</h4>"
"<p>OS can be installed on any number of computers.</p>"
"<h4>Distribution</h4>"
"<p>Most of the software included in this operating system, allows you to freely modify, copy and "
"distribute it. Also included in the OS software is distributed in the different conditions."
" For more information please refer to the documentation accompanying a particular software component.</p>"
) + "</html>"
);
m_checkAccept->setText( tr("Accept") );
}
bool PageLicense::validate()
@ -35,5 +75,6 @@ bool PageLicense::validate()
void PageLicense::show()
{
emit changeNext(checkAccept->isChecked());
emit changeNext( m_checkAccept->isChecked() );
}

@ -9,16 +9,20 @@ class PageLicense : public InstallerPage
{
Q_OBJECT
public:
explicit PageLicense(const QString& title);
explicit PageLicense();
bool validate();
void retranslateUi();
protected:
void setupUi();
public slots:
void show();
private:
QTextEdit* textLicense;
QCheckBox* checkAccept;
QTextEdit* m_textLicense;
QCheckBox* m_checkAccept;
};

@ -1,6 +1,10 @@
#include "pagemanager.h"
#include <QStackedWidget>
#include <QLabel>
#include <QApplication>
#include <QEvent>
#include <QDebug>
#include "installerpage.h"
@ -13,8 +17,8 @@ PageManager::PageManager(QStackedWidget* stackedWidget, QLabel* listLabel, QObje
Q_ASSERT_X( stackedWidget != 0, "PageManager::PageManager", "stackedWidget pointer is 0");
Q_ASSERT_X( listLabel != 0, "PageManager::PageManager", "listLabel pointer is 0");
listLabel->setWordWrap(true);
listLabel->setAlignment ( Qt::AlignLeft | Qt::AlignTop );
m_ListLabel->setWordWrap(true);
m_ListLabel->setAlignment ( Qt::AlignLeft | Qt::AlignTop );
}
PageManager::~PageManager()
@ -49,11 +53,10 @@ void PageManager::showOnce(InstallerPage* page)
{
removeStackedPage();
m_isSinglePage = true;
m_StackWidget->addWidget( page->getWidget() );
m_StackWidget->addWidget( page );
m_StackWidget->setCurrentIndex(0);
page->show();
}
//pageUpdate();
}
@ -98,7 +101,7 @@ void PageManager::pageUpdate()
removeStackedPage();
m_StackWidget->addWidget( (*m_CurPage)->getWidget() );
m_StackWidget->addWidget( *m_CurPage );
m_StackWidget->setCurrentIndex(0);
foreach(InstallerPage* page, m_Pages)
@ -126,3 +129,13 @@ void PageManager::removeStackedPage()
m_StackWidget->removeWidget( currWidget );
}
}
void PageManager::retranslatePages()
{
qDebug() << "PageManager::retranslatePages()";
foreach(InstallerPage* page, m_Pages)
page->retranslateUi();
pageUpdate();
}

@ -22,6 +22,8 @@ public:
void showOnce(InstallerPage* page);
void retranslatePages();
public slots:
void showFirst();

@ -13,24 +13,33 @@
#include "libparted.h"
PagePartitioning::PagePartitioning() :
InstallerPage( )
{
setupUi();
m_ButExistPartition->setChecked(true);
PagePartitioning::PagePartitioning(const QString& title) :
InstallerPage(title)
connect( m_ButExistPartition, SIGNAL(toggled(bool)), m_Partitions, SLOT(setEnabled(bool)));
connect( m_ButPartitioning, SIGNAL(clicked()), this, SLOT(partitioningCurrentDisk()) );
connect( m_Disks, SIGNAL(currentIndexChanged(int)), this, SLOT(updatePartitions(int)) );
}
void PagePartitioning::setupUi()
{
// widgets
QLabel* labDisk = new QLabel( tr("Disk for install: ") );
m_ButExistPartition = new QRadioButton( tr("Use existing partition") );
m_ButAllDisk = new QRadioButton( tr("Use automatical partitioning") );
m_labelDisk = new QLabel;
m_ButPartitioning = new QPushButton( tr("Manualy partitioning") );
m_ButExistPartition = new QRadioButton;
m_ButAllDisk = new QRadioButton;
m_ButPartitioning = new QPushButton;
m_Partitions = new QComboBox;
m_Disks = new QComboBox;
// layouts
QHBoxLayout* hbox_1 = new QHBoxLayout;
hbox_1->addWidget(labDisk);
hbox_1->addWidget(m_labelDisk);
hbox_1->addWidget(m_Disks);
QHBoxLayout* hbox_2 = new QHBoxLayout;
@ -52,20 +61,28 @@ PagePartitioning::PagePartitioning(const QString& title) :
vbox_1->addLayout(hbox_4);
vbox_1->addStretch();
m_Widget->setLayout(vbox_1);
setLayout(vbox_1);
m_ButExistPartition->setChecked(true);
retranslateUi();
}
connect( m_ButExistPartition, SIGNAL(toggled(bool)), m_Partitions, SLOT(setEnabled(bool)));
connect( m_ButPartitioning, SIGNAL(clicked()), this, SLOT(partitioningCurrentDisk()) );
connect( m_Disks, SIGNAL(currentIndexChanged(int)), this, SLOT(updatePartitions(int)) );
void PagePartitioning::retranslateUi()
{
qDebug() << "PagePartitioning::retranslateUi()";
setTitle( tr("Partitioning") );
m_labelDisk->setText( tr("Disk for install: ") );
m_ButExistPartition->setText( tr("Use existing partition") );
m_ButAllDisk->setText( tr("Use automatical partitioning") );
m_ButPartitioning->setText( tr("Manualy partitioning") );
}
bool PagePartitioning::validate()
{
if ( m_Disks->count() == 0 )
{
QMessageBox::critical(m_Widget, tr("Critical error"), tr("Not found any disk for install") );
QMessageBox::critical(this, tr("Critical error"), tr("Not found any disk for install") );
return false;
}
@ -77,7 +94,7 @@ bool PagePartitioning::validate()
if ( m_Partitions->count() == 0 )
{
QMessageBox::critical(m_Widget, tr("Critical error"), tr("Not found any partition for install") );
QMessageBox::critical(this, tr("Critical error"), tr("Not found any partition for install") );
return false;
} else {
emit selectedVolume( m_Partitions->itemData(m_Partitions->currentIndex()).toString() );
@ -102,7 +119,7 @@ void PagePartitioning::show()
if ( disks.isEmpty() )
{
qDebug() << "disk not found";
QMessageBox::critical(m_Widget, tr("Error"), tr("Disks not found"));
QMessageBox::critical(this, tr("Error"), tr("Disks not found"));
emit changeNext(false);
return;
}
@ -154,7 +171,7 @@ void PagePartitioning::show()
if ( m_Disks->count() == 0 )
{
qDebug() << "disk not found";
QMessageBox::critical(m_Widget, tr("Error"), tr("Disks not found"));
QMessageBox::critical(this, tr("Error"), tr("Disks not found"));
emit changeNext(false);
}
}
@ -188,3 +205,4 @@ void PagePartitioning::partitioningCurrentDisk()
emit manualyPartitioning( m_Disks->itemData(m_Disks->currentIndex()).toString() );
}
}

@ -5,6 +5,7 @@
#include <QString>
#include <QMap>
class QLabel;
class QRadioButton;
class QPushButton;
class QComboBox;
@ -16,9 +17,13 @@ class PagePartitioning : public InstallerPage
{
Q_OBJECT
public:
explicit PagePartitioning(const QString& title);
explicit PagePartitioning();
bool validate();
void retranslateUi();
private:
void setupUi();
public slots:
void show();
@ -35,6 +40,7 @@ private:
QRadioButton* m_ButExistPartition;
QRadioButton* m_ButAllDisk;
QPushButton* m_ButPartitioning;
QLabel* m_labelDisk;
QComboBox* m_Partitions;
QComboBox* m_Disks;

@ -0,0 +1,105 @@
#include "pagewelcome.h"
#include <QBoxLayout>
#include <QLabel>
#include <QComboBox>
#include <QDebug>
#include "tools.h"
typedef QPair<QString,QString> LangDesc;
PageWelcome::PageWelcome(QString* currentLanguage) :
InstallerPage(),
m_currentLanguage(currentLanguage)
{
m_Languages["en_US"] = "English";
m_Languages["ru_RU"] = "Русский";
setupUi();
}
void PageWelcome::setupUi()
{
// widgets
m_labelWelcome = new QLabel;
m_labelWelcome->setWordWrap( true );
m_labelWelcome->setOpenExternalLinks( true );
m_labelLanguage = new QLabel;
m_comboboxLanguages = new QComboBox;
//
QHBoxLayout* hbox_1 = new QHBoxLayout;
hbox_1->addWidget(m_comboboxLanguages);
hbox_1->addStretch();
//
QVBoxLayout* vbox_1 = new QVBoxLayout;
vbox_1->addWidget( m_labelWelcome );
vbox_1->addWidget( m_labelLanguage );
vbox_1->addLayout( hbox_1 );
vbox_1->addStretch();
setLayout(vbox_1);
retranslateUi();
}
void PageWelcome::retranslateUi()
{
qDebug() << "PageWelcome::retranslateUi()";
setTitle( tr("Welcome") );
m_labelWelcome->setText( "<html>" +
tr(
"<p>Welcome to Calculate Linux.</p>"
"<p><a href='http://calculate-linux.org'>http://calculate-linux.org</a></p>"
)
+ "</html>"
);
m_labelLanguage->setText( tr("Choose a language: ") );
m_comboboxLanguages->disconnect(SIGNAL(currentIndexChanged(int)), this, SLOT(changeLanguageIndex(int)));
m_comboboxLanguages->clear();
unsigned int pos = 0;
unsigned int selected = 0;
QMapIterator<QString,QString> it(m_Languages);
qDebug() << "Cur lang: " << *m_currentLanguage;
while(it.hasNext())
{
it.next();
qDebug() << "pos: " << pos << " added lang: " << it.key();
m_comboboxLanguages->addItem( it.value(), QVariant(it.key()) );
if (it.key() == *m_currentLanguage)
{
qDebug() << "selected " << pos;
selected = pos;
}
++pos;
}
m_comboboxLanguages->setCurrentIndex(selected);
connect(m_comboboxLanguages, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLanguageIndex(int)));
}
void PageWelcome::changeLanguageIndex(int indx)
{
QVariant lang = m_comboboxLanguages->itemData(indx);
if (lang != QVariant::Invalid)
{
qDebug() << "Select language: " + lang.toString();
emit changeLanguage( lang.toString() );
}
}

@ -0,0 +1,37 @@
#pragma once
#include "installerpage.h"
#include <QString>
#include <QMap>
class QLabel;
class QComboBox;
class QTextBrowser;
class PageWelcome : public InstallerPage
{
Q_OBJECT
public:
explicit PageWelcome(QString* currentLanguage);
void retranslateUi();
private:
void setupUi();
private slots:
void changeLanguageIndex(int indx);
signals:
void changeLanguage(QString);
private:
QLabel* m_labelWelcome;
QLabel* m_labelLanguage;
QComboBox* m_comboboxLanguages;
QString* m_currentLanguage;
QMap<QString, QString> m_Languages;
};

@ -1,13 +1,16 @@
#include "systeminstaller.h"
#include <QtGui>
#include <QtGlobal>
#include <QStackedWidget>
#include <QPushButton>
#include <QGroupBox>
#include <QLocale>
#include "pagemanager.h"
#include "pagelanguage.h"
#include "pagewelcome.h"
#include "pagelicense.h"
#include "pagepartitioning.h"
#include "pageconfiguration.h"
@ -17,30 +20,44 @@
#include "pagecfdisk.h"
SystemInstaller::SystemInstaller(QWidget *parent) :
QMainWindow(parent)
QMainWindow(parent),
m_Translator(new QTranslator)
{
//m_CurrentLanguage = QLocale::system().name();
m_CurrentLanguage = QString(qgetenv("LANG")).split(".").first();
changedLanguage(m_CurrentLanguage);
setupUi();
setupInstallerPages();
}
SystemInstaller::~SystemInstaller()
{
}
void SystemInstaller::setupUi()
{
// need for QMainWindow
QWidget* centralWidget = new QWidget(this);
QWidget* centralWidget( new QWidget(this) );
// buttons
QHBoxLayout* hbox_buttons = new QHBoxLayout;
QHBoxLayout* hbox_buttons( new QHBoxLayout );
m_butPrev = new QPushButton( tr("Prevoius") );
m_butNext = new QPushButton( tr("Next") );
m_butPrev = new QPushButton;
m_butNext = new QPushButton;
hbox_buttons->addStretch();
hbox_buttons->addWidget( m_butPrev );
hbox_buttons->addWidget( m_butNext );
// right pannel = widget for pages + buttons
QStackedWidget* stackPages = new QStackedWidget;
m_stackPages = new QStackedWidget;
QVBoxLayout* vbox_1 = new QVBoxLayout;
QGroupBox* group_box_page = new QGroupBox;
QVBoxLayout* group_box_page_l = new QVBoxLayout;
group_box_page_l->addWidget( stackPages );
QVBoxLayout* vbox_1( new QVBoxLayout );
QGroupBox* group_box_page( new QGroupBox );
QVBoxLayout* group_box_page_l( new QVBoxLayout );
group_box_page_l->addWidget( m_stackPages );
group_box_page->setLayout( group_box_page_l );
@ -48,24 +65,22 @@ SystemInstaller::SystemInstaller(QWidget *parent) :
vbox_1->addLayout( hbox_buttons );
// left pannel
QLabel* labelPages = new QLabel;
QGroupBox* group_box_list = new QGroupBox;
QVBoxLayout* group_box_list_l = new QVBoxLayout;
group_box_list_l->addWidget( labelPages );
m_labelPages = new QLabel;
QGroupBox* group_box_list( new QGroupBox );
QVBoxLayout* group_box_list_l( new QVBoxLayout );
group_box_list_l->addWidget( m_labelPages );
group_box_list->setLayout( group_box_list_l );
// left + right pannels
QHBoxLayout* hbox_2 = new QHBoxLayout;
QHBoxLayout* hbox_2( new QHBoxLayout );
hbox_2->addWidget( group_box_list, 2 );
hbox_2->addLayout( vbox_1, 9);
// all window
QVBoxLayout* vbox_2 = new QVBoxLayout(centralWidget);
QVBoxLayout* vbox_2( new QVBoxLayout(centralWidget) );
m_labelImage = new QLabel("");
m_labelImage = new QLabel;
m_labelImage->setAlignment( Qt::AlignHCenter | Qt::AlignVCenter );
// logo
@ -79,39 +94,45 @@ SystemInstaller::SystemInstaller(QWidget *parent) :
// minimum size for window TODO: remove magic numbers
setMinimumSize(800, 600);
setMaximumSize(800, 600);
QRect scr = QApplication::desktop()->screenGeometry();
move( scr.width() - scr.width()/2 - 800/2, scr.height() - scr.height()/2 - 600/2 );
retranslateUi();
}
void SystemInstaller::setupInstallerPages()
{
// create PageManager and pages
m_PageManager = new PageManager(stackPages, labelPages, this);
m_PageManager.reset( new PageManager(m_stackPages, m_labelPages, this) );
PageLanguage* pageLanguage = new PageLanguage( tr("Language") );
connect( pageLanguage, SIGNAL(changeLanguage(int)), this, SLOT(changedLanguage(int)) );
PageWelcome* pageLanguage( new PageWelcome(&m_CurrentLanguage) );
connect( pageLanguage, SIGNAL(changeLanguage(QString)), this, SLOT(changedLanguage(QString)) );
m_PageManager->addPage(pageLanguage);
PageLicense* pageLicense = new PageLicense( tr("License") );
PageLicense* pageLicense( new PageLicense );
connect( pageLicense, SIGNAL(changeNext(bool)), this, SLOT(changedNext(bool)) );
m_PageManager->addPage(pageLicense);
PagePartitioning* pagePartitoning = new PagePartitioning( tr("Partitioning") );
PagePartitioning* pagePartitoning( new PagePartitioning );
connect( pagePartitoning, SIGNAL(changeNext(bool)), this, SLOT(changedNext(bool)) );
connect( pagePartitoning, SIGNAL(manualyPartitioning(QString)), this, SLOT(doPartitioning(QString)) );
connect( pagePartitoning, SIGNAL(selectedVolume(QString)), this, SLOT(volumeSelect(QString)) );
m_PageManager->addPage(pagePartitoning);
PageConfiguration* pageConfiguration = new PageConfiguration( tr("Configuring") );
PageConfiguration* pageConfiguration( new PageConfiguration );
connect( pageConfiguration, SIGNAL(selectedSettings(InstallerSettings)),
this, SLOT(configurationSelect(InstallerSettings))
this, SLOT(configurationSelect(InstallerSettings))
);
m_PageManager->addPage(pageConfiguration);
PageInstall* pageInstall = new PageInstall( tr("Installing"), &m_InstallSettings );
PageInstall* pageInstall( new PageInstall( &m_InstallSettings ) );
connect( pageInstall, SIGNAL(changeNext(bool)), this, SLOT(changedNext(bool)) );
connect( pageInstall, SIGNAL(changePrev(bool)), this, SLOT(changedPrev(bool)) );
m_PageManager->addPage(pageInstall);
PageFinish* pageFinish = new PageFinish( tr("Complete") );
PageFinish* pageFinish( new PageFinish );
connect( pageFinish, SIGNAL(changeNext(bool)), this, SLOT(changedNext(bool)) );
connect( pageFinish, SIGNAL(changePrev(bool)), this, SLOT(changedPrev(bool)) );
connect( pageFinish, SIGNAL(finish()), this, SLOT(close()));
@ -119,13 +140,62 @@ SystemInstaller::SystemInstaller(QWidget *parent) :
m_PageManager->showFirst();
connect( m_butNext, SIGNAL(clicked()), m_PageManager, SLOT(showNext()) );
connect( m_butPrev, SIGNAL(clicked()), m_PageManager, SLOT(showPrevious()) );
connect( m_butNext, SIGNAL(clicked()), m_PageManager.data(), SLOT(showNext()) );
connect( m_butPrev, SIGNAL(clicked()), m_PageManager.data(), SLOT(showPrevious()) );
}
SystemInstaller::~SystemInstaller()
void SystemInstaller::retranslateUi()
{
qDebug() << "SystemInstaller::retranslateUi()";
m_butPrev->setText( tr("Prevoius") );
m_butNext->setText( tr("Next") );
if (m_PageManager)
m_PageManager->retranslatePages();
}
void SystemInstaller::setTranslator(QTranslator* translator)
{
removeTranslator();
m_Translator = translator;
qApp->installTranslator(translator);
}
void SystemInstaller::removeTranslator()
{
if (m_Translator)
{
delete m_Translator;
m_Translator = 0;
}
}
void SystemInstaller::changedLanguage(QString lang)
{
qDebug() << "SystemInstaller::changedLanguage()";
qDebug() << "New language: " + lang;
m_CurrentLanguage = lang;
QTranslator* translator( new QTranslator );
translator->load("/usr/share/cl-install-gui/cl-install-gui_" + lang);
qDebug() << "/usr/share/cl-install-gui/cl-install-gui_" + lang + ".qm";
setTranslator(translator);
}
void SystemInstaller::changeEvent(QEvent* event)
{
delete m_PageManager;
switch (event->type())
{
case QEvent::LanguageChange:
retranslateUi();
break;
default:
break;
}
QWidget::changeEvent(event);
}
@ -139,14 +209,14 @@ void SystemInstaller::changedPrev(bool state)
m_butPrev->setEnabled(state);
}
void SystemInstaller::changedLanguage(int lang)
void SystemInstaller::volumeSelect(QString volume)
{
Q_UNUSED(lang);
m_InstallSettings.disk = volume;
}
void SystemInstaller::doPartitioning(QString disk)
{
m_PageCfdisk = new PageCfdisk("Partitioning", disk);
m_PageCfdisk = new PageCfdisk( "cfdisk", disk );
m_PageManager->showOnce(m_PageCfdisk);
connect( m_PageCfdisk, SIGNAL(completed()), this, SLOT(completePartitioning()) );
}
@ -157,22 +227,10 @@ void SystemInstaller::completePartitioning()
m_PageManager->showPrevious();
}
void SystemInstaller::volumeSelect(QString volume)
{
//qDebug() << "Selected volume is " << volume;
m_InstallSettings.disk = volume;
}
void SystemInstaller::configurationSelect(InstallerSettings settings)
{
/*
qDebug() << "Selected settings: ";
qDebug() << "Host: " << settings.host;
qDebug() << "FS: " << settings.fs;
qDebug() << "Language: " << settings.language;
qDebug() << "Timezone: " << settings.timezone;
*/
// replace selected volume
settings.disk = m_InstallSettings.disk;
m_InstallSettings = settings;
}

@ -2,11 +2,15 @@
#include <QMainWindow>
#include <QString>
#include <QScopedPointer>
#include "tools.h"
class QPushButton;
class QLabel;
class QStackedWidget;
class QTranslator;
class PageManager;
class PageCfdisk;
@ -18,14 +22,22 @@ public:
explicit SystemInstaller(QWidget *parent = 0);
~SystemInstaller();
public:
protected:
void changeEvent(QEvent* event);
private:
void setupUi();
void retranslateUi();
void setupInstallerPages();
void setTranslator(QTranslator* translator);
void removeTranslator();
private slots:
void changedNext(bool);
void changedPrev(bool);
void changedLanguage(int);
void changedLanguage(QString);
void doPartitioning(QString disk);
void completePartitioning();
@ -40,13 +52,17 @@ private:
// ui
QPushButton* m_butPrev;
QPushButton* m_butNext;
QLabel* m_labelImage;
QLabel* m_labelPages;
QStackedWidget* m_stackPages;
PageManager* m_PageManager;
//
QTranslator* m_Translator;
PageCfdisk* m_PageCfdisk;
PageCfdisk* m_PageCfdisk;
QScopedPointer<PageManager> m_PageManager;
InstallerSettings m_InstallSettings;
QString m_CurrentLanguage;
InstallerSettings m_InstallSettings;
};

@ -0,0 +1,292 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="ru_RU" sourcelanguage="en_US">
<context>
<name>LibParted</name>
<message>
<source>B</source>
<translation>Б</translation>
</message>
<message>
<source>KB</source>
<translation>КБ</translation>
</message>
<message>
<source>MB</source>
<translation>МБ</translation>
</message>
<message>
<source>GB</source>
<translation>ГБ</translation>
</message>
</context>
<context>
<name>PageCfdisk</name>
<message>
<source>Partitioning</source>
<translation>Разметка диска</translation>
</message>
<message>
<source>Do manual partitioning. To finish, exit from %1</source>
<translation>Выполните ручную разметку. Для завершения, выйдите из %1</translation>
</message>
</context>
<context>
<name>PageConfiguration</name>
<message>
<source>Configuring</source>
<translation>Конфигурация</translation>
</message>
<message>
<source>Select parameters: </source>
<translation>Выберите параметры:</translation>
</message>
<message>
<source>Hostname: </source>
<translation>Имя компьютера:</translation>
</message>
<message>
<source>Language:</source>
<translation>Язык:</translation>
</message>
<message>
<source>Format</source>
<translation>Файловая система:</translation>
</message>
<message>
<source>Timezone:</source>
<translation>Часовой пояс:</translation>
</message>
</context>
<context>
<name>PageFinish</name>
<message>
<source>Complete</source>
<translation>Выполнено</translation>
</message>
<message>
<source>&lt;h4&gt;Congratulation!&lt;/h4&gt;&lt;p&gt;Installation complete.Press Finish for exit.&lt;/p&gt;</source>
<translation>&lt;h4&gt;Поздравляем!&lt;/h4&gt;&lt;p&gt;Установка успешно завершена. Нажмите Завершить для выхода.&lt;/p&gt;</translation>
</message>
</context>
<context>
<name>PageInstall</name>
<message>
<source>Installing</source>
<translation>Установка</translation>
</message>
<message>
<source>Eta: unknown</source>
<translation>Eta: неизвестно</translation>
</message>
<message>
<source>Eta: %1</source>
<translation>Eta: %1</translation>
</message>
<message>
<source>Eta: 0:00:00</source>
<translation>Eta: 0:00:00</translation>
</message>
</context>
<context>
<name>PageLicense</name>
<message>
<source>License</source>
<translation>Лицензия</translation>
</message>
<message>
<source>Accept</source>
<translation>Принимаю</translation>
</message>
<message>
<source>&lt;h3&gt;License&lt;/h3&gt;&lt;h4&gt;License Agreement&lt;/h4&gt;&lt;p&gt;This operating system (the OS) is composed of many individual software components, the copyrights on each of which belong to their respective owners. Each component is distributed under their own license agreement.&lt;/p&gt;&lt;p&gt;Installing, modifying or distributing this operating system, given to you as free archive, you agree with all of the following.&lt;/p&gt;&lt;h4&gt;Warranties&lt;/h4&gt;&lt;p&gt;This software is distributed without warranty of any kind. You assume all responsibility for the use of the operating system.&lt;/p&gt;&lt;h4&gt;Installing&lt;/h4&gt;&lt;p&gt;OS can be installed on any number of computers.&lt;/p&gt;&lt;h4&gt;Distribution&lt;/h4&gt;&lt;p&gt;Most of the software included in this operating system, allows you to freely modify, copy and distribute it. Also included in the OS software is distributed in the different conditions. For more information please refer to the documentation accompanying a particular software component.&lt;/p&gt;</source>
<translation>&lt;h3&gt;Лицензионный договор&lt;/h3&gt;
&lt;p&gt;на программное обеспечение компании «Калкулэйт» и включенные в него программы для ЭВМ&lt;/p&gt;
&lt;h4&gt;1. Сведения о договоре&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;1.1 Участники договора&lt;/b&gt;&lt;br&gt;
Настоящий лицензионный договор заключается между ООО «Калкулэйт.Ру», обладателем прав на программное обеспечение Calculate Linux (далее - ДИСТРИБУТИВ), и Вами, пользователем ДИСТРИБУТИВА.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.2 Предмет договора&lt;/b&gt;&lt;br&gt;
Настоящий лицензионный договор регулирует права пользователя на установку, запуск и использование ДИСТРИБУТИВА, а также включенных в состав ДИСТРИБУТИВА отдельных программ для ЭВМ (далее ПРОГРАММЫ) и других результатов интеллектуальной деятельности и средств индивидуализации в объеме, указанном в настоящем договоре.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.3 Заключение договора&lt;/b&gt;&lt;br&gt;
Настоящий лицензионный договор является договором присоединения и не требует письменного заключения. Использование ДИСТРИБУТИВА способами, оговоренными в настоящем договоре, означает принятие условий настоящего договора и влечет за собой заключение настоящего договора.&lt;p&gt;
&lt;h4&gt;2. Права пользователя ДИСТРИБУТИВА&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;2.1 Использование ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
Пользователь ДИСТРИБУТИВА вне зависимости от условий лицензионных договоров на отдельные ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, имеет право:
устанавливать, запускать и использовать ДИСТРИБУТИВ на неограниченном количестве компьютеров в любых целях;
создавать и распространять копии ДИСТРИБУТИВА без права продажи или распространения под торговой маркой «Calculate Linux».&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.2 Использование свободных программ, включенных в состав ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
Все ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, за исключением перечисленных в пункте 2.3 настоящего договора, лицензированы как СВОБОДНЫЕ ПРОГРАММЫ и сопровождаются лицензионными договорами, бессрочно и безвозмездно предоставляющими вам в дополнение к правам, перечисленным в пункте 2.1 настоящего договора, следующие неисключительные права, действующие на территории любой страны:
право эксплуатировать ПРОГРАММЫ (пользоваться экземплярами ПРОГРАММ) на неограниченном количестве компьютеров в любых целях;
право модифицировать ПРОГРАММЫ, а также публиковать и распространять модификации на безвозмездной или возмездной основе (по вашему усмотрению) на условиях лицензии исходной ПРОГРАММЫ;
право передавать ПРОГРАММЫ третьим лицам на безвозмездной или возмездной основе (по вашему усмотрению) без каких-либо отчислений владельцам авторских прав;
право беспрепятственно получать и изучать исходные тексты ПРОГРАММ.&lt;/p&gt;
&lt;p&gt;ООО «Калкулэйт.Ру» в течение трех лет с начала действия настоящего договора обязуется предоставить исходные тексты любой СВОБОДНОЙ ПРОГРАММЫ, включенной в состав ДИСТРИБУТИВА, по вашему требованию за плату, не превышающую стоимость физического предоставления исходного текста.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.3 Использование несвободных программ, включенных в состав ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
Следующие ПРОГРАММЫ распространяются ООО &quot;Калкулэйт.Ру&quot; на условиях, отличных от перечисленных в пункте 2.2 настоящего договора:
Firmware для WiFi карт Intel&lt;br&gt;
Драйверы видеокарт NVIDIA&lt;br&gt;
Драйверы видеокарт Matrox&lt;br&gt;
Драйверы видеокарт VIA&lt;br&gt;
Драйверы чипсета NVIDIA NForce&lt;br&gt;
Драйверы модемов pct789 (PCTel), cm8738, i8xx, sis и via686a&lt;br&gt;
Драйверы контроллеров Promise IDE/RAID&lt;br&gt;
Модули поддержки модемов Lucent/Agere&lt;br&gt;
Adobe Flash Player Plugin&lt;br&gt;
Java 2 (SUN) Runtime Environment, Standard Edition&lt;br&gt;
Обладатели исключительных прав на перечисленные ПРОГРАММЫ так или иначе ограничивают свободу использования этих ПРОГРАММ отдельно от ДИСТРИБУТИВА. В случае использования указанных ПРОГРАММ отдельно от ДИСТРИБУТИВА, ознакомьтесь с текстами их лицензионных договоров для того, чтобы определить, правомерно ли то или иное использование той или иной ПРОГРАММЫ.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.4 Использование элементов оформления ДИСТРИБУТИВА и текстов на его обложке или
коробке&lt;/b&gt;&lt;br&gt;
Права ООО «Калкулэйт.Ру» на элементы оформления ДИСТРИБУТИВА и тексты на его обложке или коробке охраняются законами об авторском праве, товарных знаках и промышленных образцах. Их использование способами, которые в соответствии с применимым законодательством требуют наличия исключительных прав, возможно только в случае получения письменного согласия ООО «Калкулэйт.Ру».&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.5 Иные права&lt;/b&gt;&lt;br&gt;
Право авторства, право на имя и иные личные неимущественные права автора, являющиеся неотчуждаемыми в соответствии с применимым национальным законодательством, либо не предоставленные вам применимым законодательством или лицензионными договорами на отдельные ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, сохраняются за их обладателями и не предоставляются пользователю ДИСТРИБУТИВА.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.6 Отчет об использовании ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
ООО «Калкулэйт.Ру» не требует от пользователя ДИСТРИБУТИВА предоставления отчетов об использовании ДИСТРИБУТИВА.&lt;/p&gt;
&lt;h4&gt;3. Ответственность сторон&lt;/h4&gt;
Авторские права на входящие в состав ДИСТРИБУТИВА ПРОГРАММЫ, включая исключительное право разрешать использование ПРОГРАММ, охраняются применимым законодательством об авторском праве, включая применимые международные договоры об авторском праве. Вся ответственность за соблюдение национальных законов при использовании включенных в ДИСТРИБУТИВ ПРОГРАММ лежит на пользователе.
ООО «Калкулэйт.Ру» гарантирует замену оригинальных носителей ДИСТРИБУТИВА при наличии производственного брака носителя.
ООО «Калкулэйт.Ру» надеется, что ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, будут полезны, но не гарантирует их пригодности для какой-либо конкретной цели, качества (включая отсутствие ошибок или соответствие стандартам), не отвечает за возможный ущерб, прямой или косвенный, понесенный в результате использования этих ПРОГРАММ.
Обязательства ООО «Калкулэйт.Ру» по технической поддержке пользователей ДИСТРИБУТИВА перечислены в купоне технической поддержки и могут быть расширены дополнительным соглашением.&lt;p&gt;
&lt;p&gt;ООО «Калкулэйт.Ру». Санкт-Петербург, пл. Стачек д. 4. ИНН 7805487799&lt;/p&gt;
&lt;p&gt;&lt;a href=&apos;http://www.calculate-linux.ru&apos;&gt;http://www.calculate-linux.ru&lt;/a&gt;&lt;/p&gt;</translation>
</message>
</context>
<context>
<name>PagePartitioning</name>
<message>
<source>Partitioning</source>
<translation>Разметка диска</translation>
</message>
<message>
<source>Disk for install: </source>
<translation>Диск для установки: </translation>
</message>
<message>
<source>Use existing partition</source>
<translation>Использовать существующий раздел</translation>
</message>
<message>
<source>Use automatical partitioning</source>
<translation>Использовать автоматическую разбивку</translation>
</message>
<message>
<source>Manualy partitioning</source>
<translation>Ручная разбивка</translation>
</message>
<message>
<source>Critical error</source>
<translation>Критическая ошибка</translation>
</message>
<message>
<source>Not found any disk for install</source>
<translation>Не найдено ни одного диска для установки</translation>
</message>
<message>
<source>Not found any partition for install</source>
<translation>Не найдено ни одного раздела для установки</translation>
</message>
<message>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<source>Disks not found</source>
<translation>Диск не найден</translation>
</message>
</context>
<context>
<name>PageWelcome</name>
<message>
<source>Welcome</source>
<translation>Добро пожаловать</translation>
</message>
<message>
<source>Choose a language: </source>
<translation>Выберите язык:</translation>
</message>
<message>
<source>&lt;p&gt;Welcome to Calculate Linux.&lt;/p&gt;&lt;p&gt;&lt;a href=&apos;http://calculate-linux.org&apos;&gt;http://calculate-linux.org&lt;/a&gt;&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;Добро пожаловать в Calculate Linux.&lt;/p&gt;&lt;p&gt;&lt;a href=&apos;http://calculate-linux.ru&apos;&gt;http://calculate-linux.ru&lt;/a&gt;&lt;/p&gt;</translation>
</message>
</context>
<context>
<name>QObject</name>
<message>
<source>Error</source>
<translation>Ошибка</translation>
</message>
<message>
<source>You do not have administrative privileges.</source>
<translation>Вы не имеете привелегий супер-пользователя</translation>
</message>
<message>
<source>&lt;p&gt;Welcome to Calculate Linux.&lt;/p&gt;&lt;p&gt;&lt;a href=&apos;http://calculate-linux.org&apos;&gt;http://calculate-linux.org&lt;/a&gt;&lt;/p&gt;</source>
<translation type="obsolete">&lt;p&gt;Добро пожаловать в Calculate Linux.&lt;/p&gt;&lt;p&gt;&lt;a href=&apos;http://calculate-linux.ru&apos;&gt;http://calculate-linux.ru&lt;/a&gt;&lt;/p&gt;</translation>
</message>
<message>
<source>&lt;h3&gt;License&lt;/h3&gt;&lt;h4&gt;License Agreement&lt;/h4&gt;&lt;p&gt;This operating system (the OS) is composed of many individual software components, the copyrights on each of which belong to their respective owners. Each component is distributed under their own license agreement.&lt;/p&gt;&lt;p&gt;Installing, modifying or distributing this operating system, given to you as free archive, you agree with all of the following.&lt;/p&gt;&lt;h4&gt;Warranties&lt;/h4&gt;&lt;p&gt;This software is distributed without warranty of any kind. You assume all responsibility for the use of the operating system.&lt;/p&gt;&lt;h4&gt;Installing&lt;/h4&gt;&lt;p&gt;OS can be installed on any number of computers.&lt;/p&gt;&lt;h4&gt;Distribution&lt;/h4&gt;&lt;p&gt;Most of the software included in this operating system, allows you to freely modify, copy and distribute it. Also included in the OS software is distributed in the different conditions. For more information please refer to the documentation accompanying a particular software component.&lt;/p&gt;</source>
<translation type="obsolete">&lt;h3&gt;Лицензионный договор&lt;/h3&gt;
&lt;p&gt;на программное обеспечение компании «Калкулэйт» и включенные в него программы для ЭВМ&lt;/p&gt;
&lt;h4&gt;1. Сведения о договоре&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;1.1 Участники договора&lt;/b&gt;&lt;br&gt;
Настоящий лицензионный договор заключается между ООО «Калкулэйт.Ру», обладателем прав на программное обеспечение Calculate Linux (далее - ДИСТРИБУТИВ), и Вами, пользователем ДИСТРИБУТИВА.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.2 Предмет договора&lt;/b&gt;&lt;br&gt;
Настоящий лицензионный договор регулирует права пользователя на установку, запуск и использование ДИСТРИБУТИВА, а также включенных в состав ДИСТРИБУТИВА отдельных программ для ЭВМ (далее ПРОГРАММЫ) и других результатов интеллектуальной деятельности и средств индивидуализации в объеме, указанном в настоящем договоре.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;1.3 Заключение договора&lt;/b&gt;&lt;br&gt;
Настоящий лицензионный договор является договором присоединения и не требует письменного заключения. Использование ДИСТРИБУТИВА способами, оговоренными в настоящем договоре, означает принятие условий настоящего договора и влечет за собой заключение настоящего договора.&lt;p&gt;
&lt;h4&gt;2. Права пользователя ДИСТРИБУТИВА&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;2.1 Использование ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
Пользователь ДИСТРИБУТИВА вне зависимости от условий лицензионных договоров на отдельные ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, имеет право:
устанавливать, запускать и использовать ДИСТРИБУТИВ на неограниченном количестве компьютеров в любых целях;
создавать и распространять копии ДИСТРИБУТИВА без права продажи или распространения под торговой маркой «Calculate Linux».&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.2 Использование свободных программ, включенных в состав ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
Все ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, за исключением перечисленных в пункте 2.3 настоящего договора, лицензированы как СВОБОДНЫЕ ПРОГРАММЫ и сопровождаются лицензионными договорами, бессрочно и безвозмездно предоставляющими вам в дополнение к правам, перечисленным в пункте 2.1 настоящего договора, следующие неисключительные права, действующие на территории любой страны:
право эксплуатировать ПРОГРАММЫ (пользоваться экземплярами ПРОГРАММ) на неограниченном количестве компьютеров в любых целях;
право модифицировать ПРОГРАММЫ, а также публиковать и распространять модификации на безвозмездной или возмездной основе (по вашему усмотрению) на условиях лицензии исходной ПРОГРАММЫ;
право передавать ПРОГРАММЫ третьим лицам на безвозмездной или возмездной основе (по вашему усмотрению) без каких-либо отчислений владельцам авторских прав;
право беспрепятственно получать и изучать исходные тексты ПРОГРАММ.&lt;/p&gt;
&lt;p&gt;ООО «Калкулэйт.Ру» в течение трех лет с начала действия настоящего договора обязуется предоставить исходные тексты любой СВОБОДНОЙ ПРОГРАММЫ, включенной в состав ДИСТРИБУТИВА, по вашему требованию за плату, не превышающую стоимость физического предоставления исходного текста.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.3 Использование несвободных программ, включенных в состав ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
Следующие ПРОГРАММЫ распространяются ООО &quot;Калкулэйт.Ру&quot; на условиях, отличных от перечисленных в пункте 2.2 настоящего договора:
Firmware для WiFi карт Intel&lt;br&gt;
Драйверы видеокарт NVIDIA&lt;br&gt;
Драйверы видеокарт Matrox&lt;br&gt;
Драйверы видеокарт VIA&lt;br&gt;
Драйверы чипсета NVIDIA NForce&lt;br&gt;
Драйверы модемов pct789 (PCTel), cm8738, i8xx, sis и via686a&lt;br&gt;
Драйверы контроллеров Promise IDE/RAID&lt;br&gt;
Модули поддержки модемов Lucent/Agere&lt;br&gt;
Adobe Flash Player Plugin&lt;br&gt;
Java 2 (SUN) Runtime Environment, Standard Edition&lt;br&gt;
Обладатели исключительных прав на перечисленные ПРОГРАММЫ так или иначе ограничивают свободу использования этих ПРОГРАММ отдельно от ДИСТРИБУТИВА. В случае использования указанных ПРОГРАММ отдельно от ДИСТРИБУТИВА, ознакомьтесь с текстами их лицензионных договоров для того, чтобы определить, правомерно ли то или иное использование той или иной ПРОГРАММЫ.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.4 Использование элементов оформления ДИСТРИБУТИВА и текстов на его обложке или
коробке&lt;/b&gt;&lt;br&gt;
Права ООО «Калкулэйт.Ру» на элементы оформления ДИСТРИБУТИВА и тексты на его обложке или коробке охраняются законами об авторском праве, товарных знаках и промышленных образцах. Их использование способами, которые в соответствии с применимым законодательством требуют наличия исключительных прав, возможно только в случае получения письменного согласия ООО «Калкулэйт.Ру».&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.5 Иные права&lt;/b&gt;&lt;br&gt;
Право авторства, право на имя и иные личные неимущественные права автора, являющиеся неотчуждаемыми в соответствии с применимым национальным законодательством, либо не предоставленные вам применимым законодательством или лицензионными договорами на отдельные ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, сохраняются за их обладателями и не предоставляются пользователю ДИСТРИБУТИВА.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2.6 Отчет об использовании ДИСТРИБУТИВА&lt;/b&gt;&lt;br&gt;
ООО «Калкулэйт.Ру» не требует от пользователя ДИСТРИБУТИВА предоставления отчетов об использовании ДИСТРИБУТИВА.&lt;/p&gt;
&lt;h4&gt;3. Ответственность сторон&lt;/h4&gt;
Авторские права на входящие в состав ДИСТРИБУТИВА ПРОГРАММЫ, включая исключительное право разрешать использование ПРОГРАММ, охраняются применимым законодательством об авторском праве, включая применимые международные договоры об авторском праве. Вся ответственность за соблюдение национальных законов при использовании включенных в ДИСТРИБУТИВ ПРОГРАММ лежит на пользователе.
ООО «Калкулэйт.Ру» гарантирует замену оригинальных носителей ДИСТРИБУТИВА при наличии производственного брака носителя.
ООО «Калкулэйт.Ру» надеется, что ПРОГРАММЫ, включенные в состав ДИСТРИБУТИВА, будут полезны, но не гарантирует их пригодности для какой-либо конкретной цели, качества (включая отсутствие ошибок или соответствие стандартам), не отвечает за возможный ущерб, прямой или косвенный, понесенный в результате использования этих ПРОГРАММ.
Обязательства ООО «Калкулэйт.Ру» по технической поддержке пользователей ДИСТРИБУТИВА перечислены в купоне технической поддержки и могут быть расширены дополнительным соглашением.&lt;p&gt;
&lt;p&gt;ООО «Калкулэйт.Ру». Санкт-Петербург, пл. Стачек д. 4. ИНН 7805487799&lt;/p&gt;
&lt;p&gt;&lt;a href=&apos;http://www.calculate-linux.ru&apos;&gt;http://www.calculate-linux.ru&lt;/a&gt;&lt;/p&gt;</translation>
</message>
<message>
<source>&lt;h4&gt;Congratulation!&lt;/h4&gt;&lt;p&gt;Installation complete.Press Finish for exit.&lt;/p&gt;</source>
<translation type="obsolete">&lt;h4&gt;Поздравляем!&lt;/h4&gt;&lt;p&gt;Установка успешно завершена. Нажмите Завершить для выхода.&lt;/p&gt;</translation>
</message>
</context>
<context>
<name>SystemInstaller</name>
<message>
<source>Prevoius</source>
<translation>Назад</translation>
</message>
<message>
<source>Next</source>
<translation>Вперед</translation>
</message>
</context>
</TS>
Loading…
Cancel
Save