Commit bda7c1ed authored by Oleg.Korshul's avatar Oleg.Korshul Committed by Alexander Trofimov

crossplatform MainPanel and test app.

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@64308 954022d7-b5bf-4e40-9824-e11837661b57
parent fdb25af6
......@@ -815,6 +815,52 @@ DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/Icons/tabicon_SE_normal.png s
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/Release svnc_tsvn_003alogminsize=5
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/asceditor_32.ico svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/asceditor_64.ico svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src svnc_tsvn_003alogminsize=5
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons svnc_tsvn_003alogminsize=5
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/Documents_active_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/Documents_active_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/Documents_disabled_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/Documents_disabled_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_left_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_left_disabled.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_left_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_left_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_right_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_right_disabled.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_right_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/changetab_right_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/collapse_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/collapse_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/collapse_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/deploy2_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/deploy2_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/deploy2_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/deploy_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/deploy_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/deploy_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/exit_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/exit_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/exit_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/first_tab_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/first_tab_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/first_tab_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_collapse_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_collapse_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_deploy2_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_deploy2_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_deploy_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_deploy_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_exit_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/new_exit_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/output_tab_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/output_tab_hover.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/output_tab_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/tabicon_DE_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/tabicon_DE_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/tabicon_PE_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/tabicon_PE_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/tabicon_SE_active.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/app/test/src/Icons/tabicon_SE_normal.png svn_mime_002dtype=application%2Foctet-stream
DesktopEditor/ChromiumBasedEditors[!!-~]2/lib svnc_tsvn_003alogminsize=5
DesktopEditor/ChromiumBasedEditors[!!-~]2/lib/include svnc_tsvn_003alogminsize=5
DesktopEditor/ChromiumBasedEditors[!!-~]2/lib/qcefview svnc_tsvn_003alogminsize=5
QT += core gui widgets printsupport
TEMPLATE = app
CONFIG += app_bundle
CONFIG -= debug_and_release debug_and_release_target
CONFIG(debug, debug|release) {
DESTDIR = $$PWD/build/windows/Debug
} else {
DESTDIR = $$PWD/build/windows/Release
}
win32:contains(QMAKE_TARGET.arch, x86_64):{
PLATFORM_BUILD = win64
message(windows64)
}
win32:!contains(QMAKE_TARGET.arch, x86_64):{
PLATFORM_BUILD = win32
message(windows32)
}
CONFIG(debug, debug|release) {
PLATFORM_BUILD2 = $$PLATFORM_BUILD/debug
message(debug)
} else {
PLATFORM_BUILD2 = $$PLATFORM_BUILD
}
include($$PWD/AscDocumentEditor.pri)
SOURCES += \
$$PWD/main.cpp
LIBS += -L$$PWD/../../cefbuilds/$$PLATFORM_BUILD -llibcef
LIBS += -L$$PWD/../../corebuilds/$$PLATFORM_BUILD2 -lascdocumentscore
HEADERS += \
$$PWD/../../../lib/qcefview/qcefview.h \
$$PWD/../../../lib/include/qascprinter.h
SOURCES += \
$$PWD/../../../lib/qcefview/qcefview.cpp
HEADERS += \
$$PWD/QAscApplicationManager.h \
$$PWD/QAscTabWidget.h \
$$PWD/QAscMainPanel.h \
$$PWD/QAscMain.h
SOURCES += \
$$PWD/QAscMainPanel.cpp
RESOURCES += \
Icons.qrc
win32 {
LIBS += -lwininet \
-ldnsapi \
-lversion \
-lmsimg32 \
-lws2_32 \
-lusp10 \
-lpsapi \
-ldbghelp \
-lwinmm \
-lshlwapi \
-lkernel32 \
-lgdi32 \
-lwinspool \
-lcomdlg32 \
-ladvapi32 \
-lshell32 \
-lole32 \
-loleaut32 \
-luser32 \
-luuid \
-lodbc32 \
-lodbccp32 \
-ldelayimp \
-lcredui \
-lnetapi32 \
-lcomctl32 \
-lrpcrt4 \
-ldwmapi \
-lOpenGL32
QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.02
}
<RCC>
<qresource prefix="/">
<file>Icons/collapse_active.png</file>
<file>Icons/collapse_hover.png</file>
<file>Icons/collapse_normal.png</file>
<file>Icons/deploy_active.png</file>
<file>Icons/deploy_hover.png</file>
<file>Icons/deploy_normal.png</file>
<file>Icons/exit_active.png</file>
<file>Icons/exit_hover.png</file>
<file>Icons/exit_normal.png</file>
<file>Icons/first_tab_active.png</file>
<file>Icons/first_tab_hover.png</file>
<file>Icons/first_tab_normal.png</file>
<file>Icons/output_tab_active.png</file>
<file>Icons/output_tab_hover.png</file>
<file>Icons/output_tab_normal.png</file>
<file>Icons/tabicon_DE_active.png</file>
<file>Icons/tabicon_DE_normal.png</file>
<file>Icons/tabicon_PE_active.png</file>
<file>Icons/tabicon_PE_normal.png</file>
<file>Icons/tabicon_SE_active.png</file>
<file>Icons/tabicon_SE_normal.png</file>
<file>Icons/changetab_left_active.png</file>
<file>Icons/changetab_left_hover.png</file>
<file>Icons/changetab_left_normal.png</file>
<file>Icons/changetab_right_active.png</file>
<file>Icons/changetab_right_hover.png</file>
<file>Icons/changetab_right_normal.png</file>
<file>Icons/changetab_left_disabled.png</file>
<file>Icons/changetab_right_disabled.png</file>
<file>Icons/deploy2_active.png</file>
<file>Icons/deploy2_hover.png</file>
<file>Icons/deploy2_normal.png</file>
<file>Icons/Documents_active_hover.png</file>
<file>Icons/Documents_active_normal.png</file>
<file>Icons/Documents_disabled_hover.png</file>
<file>Icons/Documents_disabled_normal.png</file>
<file>Icons/new_collapse_normal.png</file>
<file>Icons/new_deploy_hover.png</file>
<file>Icons/new_deploy_normal.png</file>
<file>Icons/new_exit_hover.png</file>
<file>Icons/new_exit_normal.png</file>
<file>Icons/new_deploy2_hover.png</file>
<file>Icons/new_deploy2_normal.png</file>
<file>Icons/new_collapse_hover.png</file>
</qresource>
</RCC>
#ifndef QASCAPPLICATIONMANAGER
#define QASCAPPLICATIONMANAGER
#include "../../../lib/include/cefapplication.h"
#include "../../../lib/include/applicationmanager.h"
#include <shlwapi.h>
#include <shlobj.h>
#include <QFileDialog>
#include "QAscMainPanel.h"
class QAscApplicationManager : public CAscApplicationManager
{
public:
QAscMainPanel* m_pPanel;
public:
QAscApplicationManager()
{
m_pPanel = NULL;
}
public:
virtual void StartSaveDialog(const std::wstring& sName)
{
// сделал через QMainPanel - чтобы использовать сигналы-слоты.
// если сделать QAscApplicationManager : public QObject, то он будет прокидывать
// слоты родителю. Т.е. классу CAscApplicationManager.
// А в либе я не буду затачиваться на QT
((QAscMainPanel*)m_pPanel)->sendDialogSave(sName);
}
};
#endif // QASCAPPLICATIONMANAGER
#ifndef ASCEDITORWIDGET
#define ASCEDITORWIDGET
#include <QWidget>
#include <QTabWidget>
#include <QTabBar>
#include <QStyleOption>
#include <QPainter>
#include <QApplication>
namespace NSAscEditor
{
enum EditorType
{
etDocument = 0,
etPresentation = 1,
etSpreadsheet = 2
};
}
#if 0
class CAscEditorWidget : public QWidget
{
Q_OBJECT
public:
NSAscEditor::EditorType m_etType;
public:
CAscEditorWidget(QWidget *parent = 0, NSAscEditor::EditorType etType = NSAscEditor::etDocument) : QWidget(parent)
{
m_etType = etType;
setStyleSheet("background-color:#FF00FF");
}
~CAscEditorWidget()
{
}
void SetIcon(int nIndex, QTabWidget* pWidget)
{
int nSelectedIndex = pWidget->tabBar()->currentIndex();
QTabBar* pTabBar = pWidget->tabBar();
bool bIsActive = (nIndex == nSelectedIndex) ? true : false;
switch (m_etType)
{
case NSAscEditor::etPresentation:
{
pTabBar->setTabIcon(nIndex, bIsActive ? QIcon(":/Icons/tabicon_PE_active.png") : QIcon(":/Icons/tabicon_PE_normal.png"));
break;
}
case NSAscEditor::etSpreadsheet:
{
pTabBar->setTabIcon(nIndex, bIsActive ? QIcon(":/Icons/tabicon_SE_active.png") : QIcon(":/Icons/tabicon_SE_normal.png"));
break;
}
case NSAscEditor::etDocument:
default:
{
pTabBar->setTabIcon(nIndex, bIsActive ? QIcon(":/Icons/tabicon_DE_active.png") : QIcon(":/Icons/tabicon_DE_normal.png"));
break;
}
}
pTabBar->setTabTextColor(nIndex, bIsActive ? QColor(255, 255, 255) : QColor(51, 51, 51));
}
protected:
void paintEvent(QPaintEvent* e)
{
Q_UNUSED(e);
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
};
#else
#include "./cef/qcefwebview.h"
class CAscEditorWidget : public QCefWebView
{
Q_OBJECT
public:
NSAscEditor::EditorType m_etType;
public:
CAscEditorWidget(QWidget *parent = 0, NSAscEditor::EditorType etType = NSAscEditor::etDocument, std::wstring strUrl = L"") : QCefWebView(parent)
{
this->setParentTabs((QTabWidget*)parent);
m_etType = etType;
std::wstring sUrl = QApplication::applicationDirPath().toStdWString();
sUrl += L"/deploy/apps/api/documents/index.html";
if (etType == NSAscEditor::etSpreadsheet)
sUrl += L"?doctype=spreadsheet";
if (etType == NSAscEditor::etPresentation)
sUrl += L"?doctype=presentation";
if (strUrl.length() != 0)
sUrl = strUrl;
this->load(sUrl);
}
virtual ~CAscEditorWidget()
{
}
void SetIcon(int nIndex, QTabWidget* pWidget)
{
int nSelectedIndex = pWidget->tabBar()->currentIndex();
QTabBar* pTabBar = pWidget->tabBar();
bool bIsActive = (nIndex == nSelectedIndex) ? true : false;
switch (m_etType)
{
case NSAscEditor::etPresentation:
{
pTabBar->setTabIcon(nIndex, bIsActive ? QIcon(":/Icons/tabicon_PE_active.png") : QIcon(":/Icons/tabicon_PE_normal.png"));
break;
}
case NSAscEditor::etSpreadsheet:
{
pTabBar->setTabIcon(nIndex, bIsActive ? QIcon(":/Icons/tabicon_SE_active.png") : QIcon(":/Icons/tabicon_SE_normal.png"));
break;
}
case NSAscEditor::etDocument:
default:
{
pTabBar->setTabIcon(nIndex, bIsActive ? QIcon(":/Icons/tabicon_DE_active.png") : QIcon(":/Icons/tabicon_DE_normal.png"));
break;
}
}
//pTabBar->setTabTextColor(nIndex, bIsActive ? QColor(255, 255, 255) : QColor(51, 51, 51));
pTabBar->setTabTextColor(nIndex, QColor(51, 51, 51));
}
};
#endif
#endif // ASCEDITORWIDGET
#pragma once
#include <QFile>
#include <QScreen>
#include <QDir>
#include "QAscApplicationManager.h"
#include "QAscMainPanel.h"
#ifdef WIN32
#include <shlwapi.h>
#include <shlobj.h>
#endif
#include <QStandardPaths>
static std::wstring GetAppDataPath()
{
#ifdef WIN32
WCHAR szPath[MAX_PATH];
// Get path for each computer, non-user specific and non-roaming data.
if ( SUCCEEDED( SHGetFolderPathW( NULL, CSIDL_COMMON_APPDATA, NULL, 0, szPath ) ) )
{
// TODO: [0]
// QStringList arr = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
// Append product-specific path
std::wstring sAppData(szPath);
sAppData += L"/ONLYOFFICE";
return sAppData;
}
#else
std::wstring sAppData = QDir::homePath().toStdWString();
sAppData += L"/ONLYOFFICE";
return sAppData;
#endif
return L"";
}
#include <QMainWindow>
#include <QApplication>
class QAscMainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit QAscMainWindow(QWidget *parent, CAscApplicationManager* pAppManager) : QMainWindow(parent)
{
this->resize(1000, 500);
QWidget* pMainPanel = new QAscMainPanel(this, pAppManager);
this->setCentralWidget(pMainPanel);
((QAscApplicationManager*)pAppManager)->m_pPanel = (QAscMainPanel*)pMainPanel;
QMetaObject::connectSlotsByName(this);
}
~QAscMainWindow()
{
}
};
static int AscEditor_Main( int argc, char *argv[] )
{
bool bIsChromiumSubprocess = false;
for (int i = 0; i < argc; ++i)
{
if ((0 == strcmp("--type=gpu-process", argv[i])) ||
(0 == strcmp("--type=renderer", argv[i])) ||
(0 == strcmp("--type=zygote", argv[i])))
{
bIsChromiumSubprocess = true;
break;
}
}
#if 0
FILE* f = fopen("E:\\12345.txt", "a+");
fprintf(f, "-----------------------------------------------\n");
for (int i = 0; i < argc; ++i)
{
fprintf(f, argv[i]);
fprintf(f, "\n");
}
fprintf(f, "-----------------------------------------------\n");
fclose(f);
#endif
if (bIsChromiumSubprocess)
{
QApplication aa(argc, argv);
CApplicationCEF oCef;
CAscApplicationManager oManager;
std::wstring sUserPath = GetAppDataPath();
oManager.m_oSettings.SetUserDataPath(sUserPath);
oCef.Init_CEF(&oManager);
return aa.exec();
}
QApplication a(argc, argv);
CApplicationCEF* application_cef = new CApplicationCEF();
CAscApplicationManager* pApplicationManager = new QAscApplicationManager();
std::wstring sUserPath = GetAppDataPath();
pApplicationManager->m_oSettings.SetUserDataPath(sUserPath);
qreal ww = a.primaryScreen()->logicalDotsPerInch();
qreal hh = a.primaryScreen()->physicalDotsPerInch();
application_cef->Init_CEF(pApplicationManager);
pApplicationManager->CheckFonts();
a.setStyleSheet("#mainPanel { margin: 0; padding: 0; }\
#systemPanel { margin: 0; padding: 0; } \
#centralWidget { background: #fff; }");
// Font
QFont mainFont = a.font();
mainFont.setStyleStrategy( QFont::PreferAntialias );
a.setFont( mainFont );
// Background color
HBRUSH windowBackground = CreateSolidBrush( RGB( 49, 52, 55 ) );
// Create window
QAscMainWindow w(NULL, pApplicationManager);
w.show();
// Launch
a.exec();
// release all subprocesses
pApplicationManager->CloseApplication();
delete application_cef;
delete pApplicationManager;
return 0;
}
#ifndef QMAINPANEL_H
#define QMAINPANEL_H
#include <QMouseEvent>
#include <QResizeEvent>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QPushButton>
#include <QLabel>
#include "../../../lib/include/applicationmanager.h"
class QAscMainPanel : public QWidget, public NSEditorApi::CAscMenuEventListener
{
Q_OBJECT
signals:
void downloadEvent( NSEditorApi::CAscDownloadFileInfo* );
void setModified(int, bool);
void signalPrint(int, int);
void dialogSave();
public:
QAscMainPanel( QWidget *parent, CAscApplicationManager* pManager );
void resizeEvent(QResizeEvent* event);
public slots:
void pushButtonSaveClicked();
void pushButtonMainClicked();
void downloadEventSlot( NSEditorApi::CAscDownloadFileInfo* );
void onSetModified(int, bool);
void slotPrint(int, int);
void onDialogSave();
private:
QPushButton* m_pButtonMain;
QWidget* m_pMainWidget;
QPushButton* m_pButtonMinimize;
QPushButton* m_pButtonMaximize;
QPushButton* m_pButtonClose;
QPushButton* m_pSaveModifiedButton;
QTabWidget* m_pTabs;
QWidget* m_pSeparator;
std::wstring m_sDownloadName;
CAscApplicationManager* m_pManager;
std::map<int, NSEditorApi::CAscDownloadFileInfo*> m_mapDownloads;
QWidget* m_pDownloadBackground;
QLabel* m_pDownloadLable;
public:
WId GetHwndForKeyboard()
{
return ((QWidget*)m_pTabs->parent())->winId();
}
public:
virtual void OnEvent(NSEditorApi::CAscMenuEvent* pEvent);
virtual bool IsSupportEvent(int nEventType)
{
return true;
}
void sendDialogSave(std::wstring sName);
private:
void RecalculatePlaces();
};
#endif // QMAINPANEL_H
#include "QAscMain.h"
int main( int argc, char *argv[] )
{
return AscEditor_Main(argc, argv);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment