Commit fd808f65 by NitefullWind

1. fmp_home增加导航和登录窗口。

parent db092a87
......@@ -6,5 +6,5 @@ StartType=0
[Plugin]
Path=../plugins
Entry=
Entry=fmp.home
Suffix=.dll
\ No newline at end of file
......@@ -7,6 +7,7 @@ SUBDIRS += fmp_manager \
# fmp_uiloader \
fmp_synchronizer \
fmp_epay \
fmPosApp
fmPosApp \
fmp_home
CONFIG += ordered
include ("qtservice/src/qtservice.pri")
QT += core
QT -= gui
QT += core widgets
CONFIG += c++11
TARGET = fmPos
......
#include <QCoreApplication>
#include <QApplication>
#include <fmp_manager_i.h>
#include <QDebug>
#include <QPluginLoader>
......@@ -8,14 +8,14 @@
#include <qtservice.h>
#include "../fmp_settings/fmp_settings_def.h"
class FMPService : public QtService<QCoreApplication>
class FMPService : public QtService<QApplication>
{
public:
FMPService(int argc, char**argv, const QString &svcname) :
_starttype(0),
_name(svcname),
_setting(0),
QtService<QCoreApplication>(argc, argv, svcname)
QtService<QApplication>(argc, argv, svcname)
{
createApplication(argc, argv);
_setting = new QSettings(qApp->applicationDirPath() + "/fmPos.ini", QSettings::IniFormat);
......
#include "fmp_epay_p.h"
#include "fmp_epay_p.h"
class ctkPluginContext;
FMPePay::FMPePay(ctkPluginContext *context)
: _inited(false),
q_ptr(new FMPePayPrivate)
d_ptr(new FMPePayPrivate)
{
}
......
#ifndef FMP_UILOADER_H
#ifndef FMP_UILOADER_H
#define FMP_UILOADER_H
#include <QObject>
......@@ -26,7 +26,7 @@ public slots:
int Pay() { return 0; }
private:
bool _inited;
FMPePayPrivate* q_ptr;
FMPePayPrivate* d_ptr;
};
#endif // FMP_UILOADER_H
#include "fmp_epay_p.h"
#include "fmp_epay_p.h"
#include <fmp_settings_i.h>
#include <QCoreApplication>
#include <QDateTime>
#include <ctkPluginContext.h>
#include <ctkServiceReference.h>
#include <QDebug>
int FMPePayPrivate::Init()
{
qDebug() << "======== ePay init ===========";
Q_Q(FMPePay);
q->_inited = true;
......
Plugin-SymbolicName: fmp.epay
Plugin-Version: 0.1.0
Plugin-Name: fmp.epay
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2017
Plugin-Vendor: Freemud
<RCC>
<qresource prefix="/fmp.epay/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 3
#define VER_BUILD 5
//! Convert version numbers to string
#define _STR(S) #S
......
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FMNumPad</class>
<widget class="QWidget" name="FMNumPad">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>246</width>
<height>305</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="styleSheet">
<string notr="true">QWidget {
font: normal 22px &quot;Microsoft YaHei&quot;;
color: rgb(90,90,90);
}
#FMNumPad {
background: rgb(255,255,255);
border: 1 solid silver;
}
/*
* 标题栏
*/
#title {
background: rgb(61,65,77);
min-height: 32px; max-height: 32px;
border: 1 solid silver;
border-bottom: 0 solid silver;
}
#title_label {
margin-left: 4px;
font: normal 15px &quot;Microsoft YaHei&quot;;
color: rgb(252,252,252);
}
#close_btn {
min-width: 32px; min-height: 32px;
max-width: 32px; max-height: 32px;
border-image: url(&quot;:/img/btn_close.png&quot;);
background: transparent;
}
#close_btn:hover{
min-width: 31px; min-height: 31px;
max-width: 31px; max-height: 31px;
border-image: url(&quot;:/img/btn_alert_close.png&quot;);
}
QPushButton {
border: 1 solid silver;
border-radius: 2px;
min-width: 50px; min-height: 50px;
max-width: 50px; max-height: 50px;
color: rgb(120,120,120);
background: transparent;
}
QPushButton:hover {
background: #7aad65;
color: white;
padding: 2 0 0 2;
}
#no0 {
min-width: 106px;
max-width: 106px;}
#backspace_btn, #clear_btn {
font: normal 16px &quot;Microsoft YaHei&quot;;
}
#backspace_btn {
background-image: url(:/img/num_del.png);
}
#confirm_btn {
background: rgb(93,144,237);
font: 400 16px &quot;Microsoft YaHei&quot;;
color: white;
min-height: 106px;
max-height: 106px;
border: 0 solid white;
border-right: 1 solid silver;
}
#confirm_btn:hover {
padding: 2 0 0 2;
}</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>8</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="title" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="title_label">
<property name="text">
<string>数字键盘</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="close_btn">
<property name="minimumSize">
<size>
<width>34</width>
<height>34</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>34</width>
<height>34</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>10</number>
</property>
<item row="1" column="3">
<widget class="QPushButton" name="clear_btn">
<property name="text">
<string>清空</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QPushButton" name="no0">
<property name="text">
<string>0</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="no9">
<property name="text">
<string>9</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="no6">
<property name="text">
<string>6</string>
</property>
</widget>
</item>
<item row="2" column="3" rowspan="2">
<widget class="QPushButton" name="confirm_btn">
<property name="text">
<string>确认</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="no1">
<property name="text">
<string>1</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="no2">
<property name="text">
<string>2</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="no3">
<property name="text">
<string>3</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="no5">
<property name="text">
<string>5</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="no4">
<property name="text">
<string>4</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="backspace_btn">
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="dot">
<property name="text">
<string>.</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="no7">
<property name="text">
<string>7</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="no8">
<property name="text">
<string>8</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
#include "fmp_home_p.h"
#include <QVariant>
#include <ctkPluginContext.h>
FMPHome::FMPHome(ctkPluginContext *context)
: d_ptr(new FMPHomePrivate(this)),
_inited(false),
_ctx(context)
{
Init(FMPProps());
}
FMPHome::~FMPHome()
{
delete d_ptr;
}
int FMPHome::Init(const FMPProps &props)
{
Q_UNUSED(props)
if (_inited) return FMP_SUCCESS;
Q_D(FMPHome);
return d->Init();
}
int FMPHome::Uninit()
{
if (!_inited) return FMP_SUCCESS;
Q_D(FMPHome);
return d->Uninit();
}
#ifndef FMP_HOME_H
#define FMP_HOME_H
#include <QObject>
#include "fmp_home_i.h"
class ctkPluginContext;
class FMPHomePrivate;
class FMPHome : public QObject, public FMPHomeInterface
{
Q_OBJECT
Q_INTERFACES(FMPHomeInterface)
Q_DECLARE_PRIVATE(FMPHome)
public:
explicit FMPHome(ctkPluginContext *context);
~FMPHome();
int Init(const FMPProps &props);
int Uninit();
int Upgrade() {return 0;}
int Downgrade() {return 0;}
public slots:
void OnUpgraded() {}
public:
int Login() {return 0;}
private:
FMPHomePrivate *d_ptr;
bool _inited;
ctkPluginContext *_ctx;
};
#endif // FMP_HOME_H
#-------------------------------------------------
#
# Project created by QtCreator 2017-02-16T11:47:22
#
#-------------------------------------------------
TEMPLATE = lib
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
SOURCES +=\
fmp_home.cpp \
fmp_home_plugin.cpp \
fmp_home_p.cpp \
fmp_home_navwindow.cpp \
menubutton.cpp \
fmp_wnd.cpp \
fmp_login.cpp \
fmp_num_pad.cpp
HEADERS += fmp_home.h \
fmp_home_plugin_p.h \
fmp_home_i.h \
fmp_home_p.h \
fmp_home_navwindow.h \
fmp_wnd.h \
fmp_login.h \
menubutton.h \
fmp_num_pad.h
FORMS += \
fmp_home_navwindow.ui \
fmp_login.ui \
fmnumpad.ui
unix {
target.path = /usr/lib
INSTALLS += target
}
#Target name
VER = $$system($$PWD/../fmprc.bat $$TARGET)
ORIGIN_TARGET = $$TARGET
TARGET = $${TARGET}_$${VER}
#Header path
INCLUDEPATH += $$PWD/../include/ctk \
+= $$PWD/../include/interface \
#Library path
LIBS += -L$$PWD/../lib
CONFIG(debug, debug|release) {
#Linking library
LIBS += -lCTKCored -lCTKPluginFrameworkd
#Destination path
DESTDIR = $$PWD/../debug/plugins
} else {
LIBS += -lCTKCore -lCTKPluginFramework
DESTDIR = $$PWD/../release/plugins
}
#
RESOURCES += \
res/$${ORIGIN_TARGET}.qrc \
res/img.qrc
win32 {
RC_FILE += res/$${ORIGIN_TARGET}.rc
system($$PWD/../fmprc.bat $$PWD/version.h $$ORIGIN_TARGET)
}
else {
system($$PWD/../fmprc.sh $$PWD/version.h $$ORIGIN_TARGET)
}
#ifndef FMP_HOME_I_H
#define FMP_HOME_I_H
#include <fmp_base_i.h>
class FMPHomeInterface : public FMPluginInterface
{
public:
virtual int Login() = 0;
};
Q_DECLARE_INTERFACE(FMPHomeInterface, "fmp.home")
#endif // FMP_HOME_I_H
#include "fmp_home_navwindow.h"
#include "ui_fmp_home_navwindow.h"
#include "menubutton.h"
#include <QDebug>
#include <QDesktopWidget>
#include <QParallelAnimationGroup>
#include <QPropertyAnimation>
NavWindow::NavWindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::NavWindow),
_btn_group(new QButtonGroup(this)),
_animationShow(new QParallelAnimationGroup(this)),
PI(3.1415926)
{
ui->setupUi(this);
ui->navMainBtn->setMovedItem(this);
btns.push_back("payment");
btns.push_back("tool");
MenuUiProp.distance = 80;
MenuUiProp.beginAngle = -(PI*0.45);
MenuUiProp.endAngle = (PI*0.45);
setNavStatus(Default);
this->setAttribute(Qt::WA_TranslucentBackground);
this->setWindowFlags(windowFlags() | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool);
connect(_btn_group, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(onMenuBtnClicked(QAbstractButton*)));
initMenu();
}
NavWindow::~NavWindow()
{
delete _btn_group;
delete _animationShow;
delete ui;
}
void NavWindow::setNavStatus(const NavStatus status)
{
this->_status = status;
switch (status) {
case Default:
spreadMenus(false);
ui->navMainBtn->setStyleSheet("#navMainBtn{ border-image: url(:fm-icon_01)}");
break;
case Spread:
spreadMenus(true);
ui->navMainBtn->setStyleSheet("#navMainBtn{ border-image: url(:fm-icon_01)}");
break;
case Message:
ui->navMainBtn->setStyleSheet("#navMainBtn{ border-image: url(:xiaoxi)}");
break;
default:
ui->navMainBtn->setStyleSheet("#navMainBtn{ border-image: url(:fm-icon_01)}");
break;
}
}
void NavWindow::on_navMainBtn_clicked()
{
int status = this->_status;
status = (status+1)%2;
setNavStatus((NavStatus)status);
}
void NavWindow::spreadMenus(const bool isSpread)
{
if(isSpread) {
_animationShow->start();
}
foreach (QAbstractButton *b , _btn_group->buttons()) {
QPushButton *btn = qobject_cast<QPushButton*>(b);
btn->setVisible(isSpread);
}
}
void NavWindow::initMenu()
{
int centerX = ui->navMainBtn->x() + ui->navMainBtn->width()/2;
int centerY = ui->navMainBtn->y() + ui->navMainBtn->height()/2;
const int dis = MenuUiProp.distance;
int btnsNum = btns.size();
double jianGe = 0;
if(btnsNum > 1) {
jianGe = (MenuUiProp.endAngle - MenuUiProp.beginAngle)/(btns.size()-1);
}
const int btnWidth = 60;
for(decltype(btns.size()) i = 0; i<btns.size(); ++i) {
auto btn = new QPushButton(this);
btn->setVisible(false);
double angle = MenuUiProp.beginAngle + jianGe*i;
int x = centerX + dis*cos(angle) - btnWidth/2;
int y = centerY + dis*sin(angle) - btnWidth/2;
btn->setObjectName(btns[i]);
btn->setGeometry(x, y, btnWidth, btnWidth);
_btn_group->addButton(btn);
// 创建动画
auto animation = new QPropertyAnimation(btn, "geometry");
animation->setDuration(200);
animation->setStartValue(QRect(centerX-btn->width()/2,centerY-btn->width()/2,btn->width(),btn->height()));
animation->setEndValue(btn->geometry());
_animationShow->addAnimation(animation);
}
ui->navMainBtn->raise();
}
void NavWindow::onMenuBtnClicked(QAbstractButton *btn)
{
QString btnName = btn->objectName();
emit menuBtnClicked(btnName);
}
#ifndef NAVWINDOW_H
#define NAVWINDOW_H
#include <QDialog>
#include <vector>
#include <QString>
namespace Ui {
class NavWindow;
}
class QButtonGroup;
class QAbstractButton;
class QParallelAnimationGroup;
class NavWindow : public QDialog
{
Q_OBJECT
public:
/**
* @brief The NavStatus enum
* Default: 默认状态
* Message: 由新消息状态
* Spread: 菜单按钮展开状态
*/
enum NavStatus {
Default = 0,
Spread,
Message
};
explicit NavWindow(QWidget *parent = 0);
~NavWindow();
public slots:
/**
* @brief setNavStatus
* 设置该导航窗口的状态
* @param status
*/
void setNavStatus(const NavStatus status);
/**
* @brief spreadMenus
* 展开或关闭菜单按钮
* @param isSpread
*/
void spreadMenus(const bool isSpread);
signals:
void menuBtnClicked(QString btnName);
private slots:
void on_navMainBtn_clicked();
void onMenuBtnClicked(QAbstractButton*);
private:
Ui::NavWindow *ui;
NavStatus _status;
QButtonGroup* _btn_group;
QParallelAnimationGroup* _animationShow;
void initMenu();
private:
std::vector<QString> btns;
const double PI;
struct MenuUiProps
{
int distance;
double beginAngle;
double endAngle;
};
MenuUiProps MenuUiProp;
};
#endif // NAVWINDOW_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>NavWindow</class>
<widget class="QDialog" name="NavWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>315</height>
</rect>
</property>
<property name="windowTitle">
<string>NavWindow</string>
</property>
<property name="styleSheet">
<string notr="true">#navMainBtn {
border-image: url(:fm-icon_01)
}
QPushButton {
min-width:60px;
min-height:60px;
}
QPushButton:hover {
border: 5px solid;
}
#tool {
border-image: url(:tool);
}
#tool:pressed {
border-image: url(:tool);
}
#payment {
border-image: url(:payment);
}
#payment:pressed {
border-image: url(:payment_onclick);
}</string>
</property>
<widget class="MenuButton" name="navMainBtn" native="true">
<property name="geometry">
<rect>
<x>140</x>
<y>90</y>
<width>111</width>
<height>111</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text" stdset="0">
<string/>
</property>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>MenuButton</class>
<extends>QWidget</extends>
<header>menubutton.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
#include "fmp_home_p.h"
#include "fmp_home_navwindow.h"
#include <fmp_logger_i.h>
#include <ctkPluginContext.h>
#include <ctkServiceReference.h>
#include <QDebug>
#include "fmp_login.h"
FMPHomePrivate::FMPHomePrivate(FMPHome *q)
: q_ptr(q),
_navWindow(new NavWindow)
{
}
FMPHomePrivate::~FMPHomePrivate()
{
Uninit();
}
int FMPHomePrivate::Init()
{
loginWnd = new FMPLogin;
int ret = loginWnd->exec();
delete loginWnd;
loginWnd = nullptr;
if(ret == FMP_FAILURE) {
return FMP_FAILURE;
}
_navWindow->show();
connect(_navWindow, SIGNAL(menuBtnClicked(QString)), this, SLOT(onMenuBtnClicked(QString)));
Q_Q(FMPHome);
q->_inited = true;
return FMP_SUCCESS;
}
int FMPHomePrivate::Uninit()
{
Q_Q(FMPHome);
// 关闭导航窗口
if (!_navWindow) {
_navWindow->close();
}
delete _navWindow;
_navWindow = 0;
q->_inited = false;
return FMP_SUCCESS;
}
void FMPHomePrivate::onMenuBtnClicked(QString btnName)
{
qDebug() << "====" << __FUNCTION__ << btnName;
Q_Q(FMPHome);
if(btnName == "huiyuanshezhi")
{
ctkServiceReference logger_ref = CtxServiceRef(q->_ctx, FMPLogger);
if(!logger_ref.getPlugin().isNull()) {
FMPLoggerInterface* logger = qobject_cast<FMPLoggerInterface*>(CtxService(q->_ctx, logger_ref));
if(logger) {
logger->Init(FMPProps());
}
}
}
}
#ifndef FMP_HOME_P_H
#define FMP_HOME_P_H
#include "fmp_home.h"
class NavWindow;
class FMPLogin;
class FMPHomePrivate : public QObject
{
Q_OBJECT
Q_DECLARE_PUBLIC(FMPHome)
public:
explicit FMPHomePrivate(FMPHome *q);
~FMPHomePrivate();
int Init();
int Uninit();
public slots:
void onMenuBtnClicked(QString btnName);
public:
FMPHome *q_ptr;
private:
NavWindow *_navWindow;
FMPLogin *loginWnd;
};
#endif // FMP_HOME_P_H
#include "fmp_home_plugin_p.h"
#include "fmp_home.h"
#include <QtPlugin>
FMPHomePlugin::FMPHomePlugin()
:_home_service(0)
{
}
void FMPHomePlugin::start(ctkPluginContext *context)
{
_home_service = new FMPHome(context);
context->registerService(QStringList("FMPHomeInterface"), _home_service);
}
void FMPHomePlugin::stop(ctkPluginContext *context)
{
Q_UNUSED(context)
if (_home_service)
{
delete _home_service;
_home_service = 0;
}
}
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
Q_EXPORT_PLUGIN2(fmp_home, FMPHomePlugin)
#endif
#ifndef FMP_HOME_PLUGIN_P_H
#define FMP_HOME_PLUGIN_P_H
#include <ctkPluginActivator.h>
class FMPHome;
class FMPHomePlugin : public QObject, public ctkPluginActivator
{
Q_OBJECT
Q_INTERFACES(ctkPluginActivator)
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
Q_PLUGIN_METADATA(IID "fmp_home")
#endif
public:
explicit FMPHomePlugin();
void start(ctkPluginContext *context);
void stop(ctkPluginContext *context);
private:
FMPHome* _home_service;
};
#endif // FMP_HOME_PLUGIN_P_H
#include "fmp_login.h"
#include "ui_fmp_login.h"
#include <QMessageBox>
#include <QDesktopWidget>
#include "fmp_num_pad.h"
#include <QDebug>
FMPLogin::FMPLogin(QDialog *parent) :
FMPWnd(parent),
ui(new Ui::FMPLogin),
_numPad(new FMNumPad)
{
ui->setupUi(this);
connect(_numPad, SIGNAL(digit_confirm()), this, SLOT(on_login_btn_clicked()));
QDesktopWidget w;
QRect rc = w.availableGeometry();
_numPad->setGeometry((rc.width()+640)/2, (rc.height()-480)/2, _numPad->width(), _numPad->height());
}
FMPLogin::~FMPLogin()
{
delete ui;
delete _numPad;
}
void FMPLogin::on_login_btn_clicked()
{
_numPad->close();
QMessageBox::information(this, "", tr("Login"), QMessageBox::Ok);
this->close();
}
void FMPLogin::on_key_btn_clicked()
{
_numPad->setLineEdit(ui->user_edit);
_numPad->close();
_numPad->show();
ui->user_edit->setFocus();
}
void FMPLogin::on_key_btn_2_clicked()
{
_numPad->setLineEdit(ui->pwd_edit);
_numPad->close();
_numPad->show();
ui->pwd_edit->setFocus();
}
#ifndef FMP_LOGIN_H
#define FMP_LOGIN_H
#include "fmp_wnd.h"
class FMNumPad;
namespace Ui {
class FMPLogin;
}
class FMPLogin : public FMPWnd
{
Q_OBJECT
public:
explicit FMPLogin(QDialog *parent = 0);
~FMPLogin();
private slots:
void on_login_btn_clicked();
void on_key_btn_clicked();
void on_key_btn_2_clicked();
private:
Ui::FMPLogin *ui;
FMNumPad* _numPad;
};
#endif // FMP_LOGIN_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>FMPLogin</class>
<widget class="QWidget" name="FMPLogin">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>847</width>
<height>615</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<property name="styleSheet">
<string notr="true">#FMPLogin {
background: rgba(100,100,100,80);
}
#Center {
background: rgb(255,255,255);
border: 1 solid silver;
}
QWidget {
font: normal 22px &quot;Microsoft YaHei&quot;;
color: rgb(90,90,90);
}
/*
* 标题栏
*/
#title {
background: rgb(61,65,77);
min-height: 48px; max-height: 48px;
border: 1 solid silver;
border-bottom: 0 solid silver;
}
#logo_label {
min-height: 48px;
color: rgb(252,252,252);
}
#close_btn {
min-width: 50px; min-height: 50px;
border-image: url(&quot;:/img/btn_close.png&quot;);
margin-right: 12px;
}
#close_btn:hover{
min-width: 51px; min-height: 51px;
border-image: url(&quot;:/img/btn_alert_close.png&quot;);
}
/*
* 信息
*/
#tip, #tip QLabel {
background: rgb(186,186,186);
color: rgb(252,252,252);
font-size: 14px;
border-bottom: 1 solid silver;
}
#tip {
min-height: 0px; max-height: 0px;
border: 1 solid silver;
border-top: 0;
}
/*
* 主界面
*/
QLineEdit {
min-height: 49px;
font: 100 19px &quot;Microsoft YaHei&quot;;
color: rgb(50,50,50);
background: white;
border: 1 solid silver;
border-right: 0;
}
#key_btn, #key_btn_2 {
border: 1 solid silver;
border-left: 0px;
color: rgb(130,130,130);
background-color: rgb(255, 255, 255);
font: 13px &quot;微软雅黑&quot;;
min-height: 49px; min-width: 30px;
}
#key_btn:hover, #key_btn_2:hover {
color: rgb(37,176,246);
}
#login_btn {
min-height: 56px;
background: rgb(93,144,237);
font: 400 23px &quot;Microsoft YaHei&quot;;
color: white;
border: 1 solid white;
border-right: 0 solid silver;
}
#login_btn:hover {
padding: 2 0 0 2;
}
</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QWidget" name="Center" native="true">
<property name="maximumSize">
<size>
<width>640</width>
<height>480</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="title" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>20</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>20</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="logo_label">
<property name="text">
<string>非码</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="close_btn">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="main">
<property name="spacing">
<number>40</number>
</property>
<property name="leftMargin">
<number>130</number>
</property>
<property name="rightMargin">
<number>130</number>
</property>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="user_edit">
<property name="text">
<string/>
</property>
<property name="placeholderText">
<string>账号</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="key_btn">
<property name="text">
<string>键盘</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>0</number>
</property>
<item>
<widget class="QLineEdit" name="pwd_edit">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
<property name="placeholderText">
<string>密码</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="key_btn_2">
<property name="text">
<string>键盘</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="login_btn">
<property name="text">
<string>登录</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QWidget" name="tip" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>20</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>20</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="operator_desc_label">
<property name="text">
<string>操作员:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="operator_label">
<property name="text">
<string>00000</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="bd_desc_label_2">
<property name="text">
<string>营业日:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="bd_desc_label">
<property name="text">
<string>2017-02-20</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<tabstops>
<tabstop>login_btn</tabstop>
<tabstop>close_btn</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>
#include "fmp_num_pad.h"
#include "ui_fmnumpad.h"
#include <QLineEdit>
FMNumPad::FMNumPad(QDialog *parent) :
FMPWnd(parent),
ui(new Ui::FMNumPad),
_lineEdit(nullptr)
{
ui->setupUi(this);
connect(ui->no0, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no1, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no2, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no3, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no4, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no5, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no6, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no7, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no8, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->no9, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
connect(ui->dot, &QPushButton::clicked, this, &FMNumPad::on_digit_clicked);
}
FMNumPad::~FMNumPad()
{
delete ui;
if(_lineEdit) {
delete _lineEdit;
_lineEdit = nullptr;
}
}
void FMNumPad::on_digit_clicked()
{
QString num_str = qobject_cast<QPushButton*>(sender())->text();
if(_lineEdit) {
_lineEdit->insert(num_str);
_lineEdit->setFocus();
}
emit digit_click(num_str);
}
void FMNumPad::on_backspace_btn_clicked()
{
if(_lineEdit) {
_lineEdit->backspace();
_lineEdit->setFocus();
}
emit digit_delete();
}
void FMNumPad::on_clear_btn_clicked()
{
if(_lineEdit) {
_lineEdit->clear();
_lineEdit->setFocus();
}
emit digit_clear();
}
void FMNumPad::on_confirm_btn_clicked()
{
emit digit_confirm();
}
void FMNumPad::setLineEdit(QLineEdit *lineEdit)
{
Q_ASSERT(nullptr != lineEdit);
this->_lineEdit = lineEdit;
}
#ifndef FMNUMPAD_H
#define FMNUMPAD_H
#include "fmp_wnd.h"
class QLineEdit;
namespace Ui {
class FMNumPad;
}
class FMNumPad : public FMPWnd
{
Q_OBJECT
public:
explicit FMNumPad(QDialog *parent = 0);
~FMNumPad();
void setLineEdit(QLineEdit* lineEdit);
signals:
void digit_click(QString keynum);
void digit_delete();
void digit_clear();
void digit_confirm();
private slots:
void on_digit_clicked();
void on_backspace_btn_clicked();
void on_clear_btn_clicked();
void on_confirm_btn_clicked();
private:
Ui::FMNumPad *ui;
QLineEdit *_lineEdit;
};
#endif // FMNUMPAD_H
#include "fmp_wnd.h"
#include <QDesktopWidget>
#include <QStyleOption>
#include <QPainter>
#ifdef Q_OS_WIN
#include <windows.h>
#include <windowsx.h>
#endif
FMPWnd::FMPWnd(QDialog *parent)
: QDialog(parent)
{
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
setAttribute(Qt::WA_TranslucentBackground);
}
FMPWnd::~FMPWnd()
{
}
int FMPWnd::exec()
{
showFullScreen();
// ::SetForegroundWindow((HWND)effectiveWinId());
// ::SetWindowPos( (HWND)effectiveWinId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
// showFullScreen();
// ::SetForegroundWindow((HWND)effectiveWinId());
QDesktopWidget w;
QRect rc = w.availableGeometry();
setGeometry((rc.width()-width())/2, (rc.height()-height())/2, width(), height());
return QDialog::exec();
}
void FMPWnd::on_close_btn_clicked()
{
this->done(-1);
}
#ifdef Q_OS_WIN
//! Gui class member of platform
bool FMPWnd::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
Q_UNUSED(eventType)
MSG* msg = (MSG*)message;
//! true indicates the message need to be processed by DefWindowProc
bool fCallDWP = true;
bool fMsgDone = false;
switch (msg->message) {
case WM_NCHITTEST: {
*result = winHCHitTest(msg);
if(*result != HTNOWHERE) {
// HTMINBUTTON 等消息当作HTCLIENT处理
switch (*result) {
case HTMINBUTTON:
case HTMAXBUTTON:
case HTCLOSE:
*result = HTCLIENT;
break;
}
fCallDWP = false;
}
break;
}
case WM_GETMINMAXINFO: {
// 最大化时的处理
MINMAXINFO *mmi = (MINMAXINFO*)(msg->lParam);
QDesktopWidget desktopWidget;
QRect desktop = desktopWidget.availableGeometry();
mmi->ptMaxSize.x = desktop.width();
mmi->ptMaxSize.y = desktop.height();
mmi->ptMaxPosition.x = desktop.x();
mmi->ptMaxPosition.y = desktop.y();
mmi->ptMinTrackSize.x = minimumWidth(); // mininum width for your window
mmi->ptMinTrackSize.y = minimumHeight();
mmi->ptMaxTrackSize.x = maximumWidth();
mmi->ptMaxTrackSize.y = maximumHeight();
*result = 0;
fMsgDone = true;
break;
}
case WA_INACTIVE: {
activateWindow();
break;
}
default:
break;
}
fMsgDone = fMsgDone || !fCallDWP;
return fMsgDone;
}
void FMPWnd::paintEvent(QPaintEvent *event)
{
Q_UNUSED(event);
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
long FMPWnd::winHCHitTest(MSG *msg)
{
// Mouse position
QPoint mouse_pos(GET_X_LPARAM(msg->lParam), GET_Y_LPARAM(msg->lParam));
QRect window_rect = geometry();
// Set default value (HTNOWHERE) (1,1).
USHORT uRow = 1;
USHORT uCol = 1;
bool fOnResizeBorder = false;
// //! Test caption area
// QRegion m_children_region(0, 0, width()-54, 60);
// QRegion new_region = m_children_region.translated(window_rect.x(), window_rect.y());
// if (new_region.contains(mouse_pos)) {
// //! Title regions contains the mouse position, treat it as caption area
// uRow = 0;
// }
// Hit test (HTTOPLEFT, ... HTBOTTOMRIGHT)
LRESULT hitTests[3][3] =
{
{HTTOPLEFT, fOnResizeBorder ? HTTOP : HTCAPTION, HTTOPRIGHT},
{HTLEFT, HTNOWHERE, HTRIGHT},
{HTBOTTOMLEFT, HTBOTTOM, HTBOTTOMRIGHT},
};
//! Test borders area
if (minimumSize() != maximumSize()) {
//! To be implemented
}
return hitTests[uRow][uCol];
}
#endif
#ifndef FMP_WND_H
#define FMP_WND_H
#include <QDialog>
class FMPWnd : public QDialog
{
Q_OBJECT
public:
explicit FMPWnd(QDialog* parent = 0);
~FMPWnd();
int exec();
public slots:
void on_close_btn_clicked();
#ifdef Q_OS_WIN
protected:
bool nativeEvent(const QByteArray &eventType, void *message, long *result);
void paintEvent(QPaintEvent *event);
long winHCHitTest(MSG* msg);
#endif
};
#endif // FMP_WND_H
#include "menubutton.h"
#include <QDebug>
MenuButton::MenuButton(QWidget *parent)
: QPushButton(parent),
_mouseMove(false),
_mousePress(false),
_canMove(false),
_movedItem(this)
{
}
void MenuButton::setMovedItem(QWidget *item)
{
Q_ASSERT(item!=0);
this->_movedItem = item;
}
void MenuButton::mousePressEvent(QMouseEvent *e)
{
if (e->button()==Qt::LeftButton)
{
_mousePress = true;
_lastMousePos = e->globalPos();
_canMove = false;
}
QPushButton::mousePressEvent(e);
return;
}
void MenuButton::mouseMoveEvent(QMouseEvent *e)
{
if (_mousePress && (e->buttons()==Qt::LeftButton))
{
QPoint moved = e->globalPos() - _lastMousePos;
// 防止因抖动误拖动
if(_canMove || (abs(moved.x())>10 || abs(moved.y())>10)) {
_movedItem->move(_movedItem->pos() + moved);
_lastMousePos = e->globalPos();
_mouseMove = true;
_canMove = true;
}
}
return;
}
void MenuButton::mouseReleaseEvent(QMouseEvent *e)
{
if (e->button()==Qt::LeftButton)
{
_mousePress = false;
}
if(!_mouseMove)
{
QPushButton::mouseReleaseEvent(e);
}
_mouseMove = false;
return;
}
#ifndef MENUBUTTON_H
#define MENUBUTTON_H
#include <QPushButton>
#include <QMouseEvent>
class MenuButton : public QPushButton
{
Q_OBJECT
public:
explicit MenuButton(QWidget* parent = 0);
void setMovedItem(QWidget *item);
protected:
void mouseMoveEvent(QMouseEvent * e);
void mousePressEvent(QMouseEvent * e);
void mouseReleaseEvent(QMouseEvent * e);
private:
bool _mouseMove;
bool _mousePress;
bool _canMove;
QPoint _lastMousePos;
QWidget* _movedItem;
};
#endif // MENUBUTTON_H
Plugin-SymbolicName: fmp.home
Plugin-Version: 0.1.0
Plugin-Name: fmp.home
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2017
Plugin-Vendor: Freemud
<RCC>
<qresource prefix="/fmp.home/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
<RCC>
<qresource prefix="/">
<file alias="xiaoxi">img/消息.png</file>
<file>img/btn_close.png</file>
<file>img/num_del.png</file>
<file alias="fm-icon_01">img/fm-icon_01.png</file>
<file alias="payment">img/fm-icon_payment.png</file>
<file alias="payment_onclick">img/fm-icon_payment_onclick.png</file>
<file alias="tool">img/fm-icon_tool.png</file>
<file>img/btn_alert_close.png</file>
</qresource>
</RCC>
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
#ifndef _VERSION_H_
#define _VERSION_H_
#define VER_MAJOR 0
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 6
//! Convert version numbers to string
#define _STR(S) #S
#define STR(S) _STR(S)
#define _MAK_VER(maj, min, rev, build) STR(##maj.##min.##rev.##build\0)
#define MAK_VER(maj, min, rev, build) _MAK_VER(maj, min, rev, build)
//! Resource version infomation
#define RES_FILE_VER VER_MAJOR,VER_MINOR,VER_REVISION,VER_BUILD
#define RES_PRODUCT_VER VER_MAJOR,VER_MINOR,VER_REVISION,VER_BUILD
#define RES_STR_FILE_VER MAK_VER(VER_MAJOR, VER_MINOR, VER_REVISION, VER_BUILD)
#define RES_STR_PRODUCT_VER MAK_VER(VER_MAJOR, VER_MINOR, VER_REVISION, VER_BUILD)
#define RES_COMPANY_NAME "上海非码网络科技有限公司\0"
#define RES_COPYRIGHT "Freemud Ltd. Copyright (C) 2014-2017\0"
#define RES_FILE_DESC "fmp.home\0"
#define RES_INTER_NAME "fmp.home\0"
#define RES_FILE_NAME "fmp.home\0"
#define RES_PRODUCT_NAME "fmp.home\0"
#define RES_FILE_EXT "*\0"
#endif //!_VERSION_H_
Plugin-SymbolicName: fmp.logger
Plugin-Version: 0.1.0
Plugin-Name: fmp.logger
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2017
Plugin-Vendor: Freemud
<RCC>
<qresource prefix="/fmp.logger/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 4
#define VER_BUILD 5
//! Convert version numbers to string
#define _STR(S) #S
......
#include "fmp_manager.h"
#include "fmp_manager.h"
#include <ctkPluginFramework.h>
#include <ctkPluginContext.h>
#include <ctkPluginFrameworkLauncher.h>
......
Plugin-SymbolicName: fmp.manager
Plugin-Version: 0.1.0
Plugin-Name: fmp.manager
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2017
Plugin-Vendor: Freemud
<RCC>
<qresource prefix="/fmp.manager/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 4
#define VER_BUILD 5
//! Convert version numbers to string
#define _STR(S) #S
......
Plugin-SymbolicName: fmp.settings
Plugin-Version: 0.1.0
Plugin-Name: fmp.settings
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2017
Plugin-Vendor: Freemud
<RCC>
<qresource prefix="/fmp.settings/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 3
#define VER_BUILD 5
//! Convert version numbers to string
#define _STR(S) #S
......
Plugin-SymbolicName: fmp.synchronizer
Plugin-Version: 0.1.0
Plugin-Name: fmp.synchronizer
Plugin-Copyright: Freemud Ltd. Copyright (C) 2014-2017
Plugin-Vendor: Freemud
<RCC>
<qresource prefix="/fmp.synchronizer/META-INF">
<file>MANIFEST.MF</file>
</qresource>
</RCC>
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by fmproxy_service.rc
// ¶һĬֵ
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 4
#define VER_BUILD 5
//! Convert version numbers to string
#define _STR(S) #S
......
#include "../../fmp_epay/fmp_epay_i.h"
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