HGGitLab

Commit 6ff349b2 authored by luoliangyi's avatar luoliangyi

增加状态栏功能

parent 81f777ff
......@@ -67,7 +67,8 @@ SOURCES += \
mainwindow.cpp \
../../../ui/HGImgView.cpp \
../../../ui/HGImgThumb.cpp \
widget_imgproc_base.cpp
widget_imgproc_base.cpp \
widget_statusbar.cpp
HEADERS += \
../../../ui/HGUIGlobal.h \
......@@ -85,7 +86,8 @@ HEADERS += \
mainwindow.h \
../../../ui/HGImgView.h \
../../../ui/HGImgThumb.h \
widget_imgproc_base.h
widget_imgproc_base.h \
widget_statusbar.h
FORMS += \
dialog_export.ui \
......@@ -100,7 +102,8 @@ FORMS += \
dialog_saveas.ui \
dialog_savequality.ui \
mainwindow.ui \
widget_imgproc_base.ui
widget_imgproc_base.ui \
widget_statusbar.ui
TRANSLATIONS += \
Scanner_zh_CN.ts
......
......@@ -3,6 +3,7 @@
#include <QButtonGroup>
#include <QMessageBox>
#include <algorithm>
#include <QRegExpValidator>
#include "dialog_savequality.h"
#include "HGUIGlobal.h"
......@@ -39,8 +40,7 @@ Dialog_Export::Dialog_Export(int total, const std::vector<int> &selectedIndexs,
ui->radio_allPages->setChecked(true);
QRegExp rx("[0-9,-]+$");
m_qReg = new QRegExpValidator(rx, this);
ui->lineEdit_nominatePages->setValidator(m_qReg);
ui->lineEdit_nominatePages->setValidator(new QRegExpValidator(rx, this));
ui->lab_nominatePages->setEnabled(ui->radio_nominatedPages->isChecked());
ui->lineEdit_nominatePages->setEnabled(ui->radio_nominatedPages->isChecked());
ui->lab_warning->setVisible(false);
......@@ -48,9 +48,6 @@ Dialog_Export::Dialog_Export(int total, const std::vector<int> &selectedIndexs,
Dialog_Export::~Dialog_Export()
{
delete m_qReg;
m_qReg = nullptr;
delete ui;
}
......
......@@ -2,7 +2,6 @@
#define DIALOG_EXPORT_H
#include <QDialog>
#include <QRegExpValidator>
namespace Ui {
class Dialog_Export;
......@@ -35,7 +34,6 @@ private:
Ui::Dialog_Export *ui;
int m_total;
std::vector<int> m_selectedIndexs;
QRegExpValidator *m_qReg;
QString m_savePath;
int m_saveQuality;
......
......@@ -21,7 +21,7 @@ Dialog_FullScreen::Dialog_FullScreen(class MainWindow *mainWidget, const QString
connect(&m_timer_hide, SIGNAL(timeout()), this, SLOT(on_hide()));
connect(ui->view, SIGNAL(escape()), this, SLOT(on_escape()));
connect(ui->view, SIGNAL(mouseMove(int, int)), this, SLOT(on_mouseMove(int, int)));
connect(ui->view, SIGNAL(mousePos(int, int)), this, SLOT(on_mousePos(int, int)));
this->setWindowFlags(Qt::FramelessWindowHint);
this->setWindowState(Qt::WindowFullScreen);
......@@ -195,7 +195,7 @@ void Dialog_FullScreen::on_escape()
m_mainWidget->exitFullScreen();
}
void Dialog_FullScreen::on_mouseMove(int x, int y)
void Dialog_FullScreen::on_mousePos(int x, int y)
{
(void)x;
(void)y;
......
......@@ -31,7 +31,7 @@ private slots:
void on_hide();
void on_escape();
void on_mouseMove(int x, int y);
void on_mousePos(int x, int y);
private:
void setBtnOpacity(qreal opacity);
......
......@@ -4,6 +4,9 @@
#include <QFileDialog>
#include <QMessageBox>
#include <QDateTime>
#include <QLineEdit>
#include <QRegExpValidator>
#include "widget_statusbar.h"
#include "dialog_openimageindex.h"
#include "dialog_saveas.h"
#include "dialog_export.h"
......@@ -66,6 +69,19 @@ MainWindow::MainWindow(QWidget *parent)
ui->dockWidget->setTitleBarWidget(new QWidget());
ui->dockWidget->titleBarWidget()->setVisible(false);
QRegExp rx("[0-9,-]+$");
m_multiPageLineEdit = new HGLineEdit(this);
m_multiPageLineEdit->setValidator(new QRegExpValidator(rx, this));
m_multiPageLineEdit->setFixedWidth(70);
m_multiPageLineEdit->setAlignment(Qt::AlignHCenter);
ui->toolBar->insertWidget(ui->act_nextPage, m_multiPageLineEdit);
m_wndStatusBar = new Widget_StatusBar(ui->act_zoomIn, ui->act_zoomOut, ui->statusBar);
ui->statusBar->addWidget(m_wndStatusBar, 1);
m_wndStatusBar->setDeviceStatusInfo(tr("disconnect"));
connect(m_view, SIGNAL(scaleChanged(double)), this, SLOT(on_viewerScale(double)));
connect(m_view, SIGNAL(mousePos(int, int)), this, SLOT(on_viewerMousePos(int, int)));
connect(m_view, SIGNAL(drop(const QString &)), this, SLOT(on_viewerDrop(const QString &)));
connect(m_thumb, SIGNAL(itemCountChanged(int)), this, SLOT(on_itemCountChanged(int)));
connect(m_thumb, SIGNAL(itemSelectingChanged()), this, SLOT(on_itemSelectingChanged()));
......@@ -73,6 +89,8 @@ MainWindow::MainWindow(QWidget *parent)
connect(m_thumb, SIGNAL(itemDoubleClicked(int)), this, SLOT(on_itemDoubleClicked(int)));
connect(m_thumb, SIGNAL(contextMenuEvent(int)), this, SLOT(on_thumbContextMenu(int)));
connect(m_multiPageLineEdit, SIGNAL(editingFinished()), this, SLOT(on_multiPageLineEditFinished()));
m_view->enableScroll(true);
m_view->setScrollSize(16);
m_view->setMinScrollSliderSize(20);
......@@ -182,6 +200,7 @@ void MainWindow::on_act_90Left_triggered()
if (HGBASE_ERR_OK == m_view->rotateLeft())
{
m_modify = true;
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -191,6 +210,7 @@ void MainWindow::on_act_90Right_triggered()
if (HGBASE_ERR_OK == m_view->rotateRight())
{
m_modify = true;
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -200,6 +220,7 @@ void MainWindow::on_act_180_triggered()
if (HGBASE_ERR_OK == m_view->rotate180())
{
m_modify = true;
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -265,7 +286,7 @@ void MainWindow::on_act_fullscreen_triggered()
void MainWindow::on_itemCountChanged(int count)
{
(void)count;
m_wndStatusBar->setPageInfo(count, m_currIndex);
updateActionStatus();
}
......@@ -323,6 +344,7 @@ void MainWindow::on_currItemChanged(int index)
else
{
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
......@@ -336,10 +358,15 @@ void MainWindow::on_currItemChanged(int index)
m_multiIndex = -1;
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
int count = 0;
m_thumb->getItemCount(&count);
m_wndStatusBar->setPageInfo(count, m_currIndex);
updateStatusBarPixelInfo();
updateActionStatus();
}
......@@ -357,6 +384,16 @@ void MainWindow::on_thumbContextMenu(int index)
qDebug("show menu");
}
void MainWindow::on_viewerScale(double scale)
{
m_wndStatusBar->setScale(scale);
}
void MainWindow::on_viewerMousePos(int x, int y)
{
m_wndStatusBar->setMousePosInfo(x, y);
}
void MainWindow::on_viewerDrop(const QString &fileName)
{
int index = -1;
......@@ -415,6 +452,7 @@ void MainWindow::on_viewerDrop(const QString &fileName)
m_relation = false;
m_modify = false;
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -430,6 +468,7 @@ void MainWindow::on_act_thumbGrid_triggered(bool checked)
void MainWindow::on_dialog_adjust_applyToImage(HGImage img)
{
m_view->addImage(img);
updateStatusBarPixelInfo();
}
void MainWindow::on_dialog_multirotate_refreshImgFile(const QString &fileName)
......@@ -437,6 +476,38 @@ void MainWindow::on_dialog_multirotate_refreshImgFile(const QString &fileName)
m_thumb->refreshItem(fileName);
}
void MainWindow::on_multiPageLineEditFinished()
{
if (-1 != m_currIndex && m_multiPageCount > 0)
{
int multiIndex = m_multiPageLineEdit->text().toInt() - 1;
if (multiIndex >= 0 && multiIndex < m_multiPageCount)
{
m_multiIndex = multiIndex;
HGImage img = createImage();
if (nullptr != img)
{
m_view->addImage(img);
HGBase_DestroyImage(img);
m_relation = true;
m_modify = false;
}
else
{
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
updateStatusBarPixelInfo();
}
updateActionStatus();
}
}
void MainWindow::on_act_thumbnailBar_triggered(bool checked)
{
ui->dockWidget->setVisible(checked);
......@@ -545,6 +616,29 @@ int MainWindow::getMultiPageCount()
return count;
}
void MainWindow::updateStatusBarPixelInfo()
{
HGImage img = nullptr;
m_view->getImage(&img);
if (nullptr == img)
{
m_wndStatusBar->setPixelInfo(0, 0, 0);
}
else
{
HGImageInfo imgInfo;
HGBase_GetImageInfo(img, &imgInfo);
int bpp = 0;
if (HGBASE_IMGTYPE_GRAY == imgInfo.type)
bpp = 8;
else if (HGBASE_IMGTYPE_BGR == imgInfo.type || HGBASE_IMGTYPE_RGB == imgInfo.type)
bpp = 24;
else
bpp = 32;
m_wndStatusBar->setPixelInfo(imgInfo.width, imgInfo.height, bpp);
}
}
void MainWindow::updateActionStatus()
{
HGImage img = nullptr;
......@@ -576,6 +670,8 @@ void MainWindow::updateActionStatus()
ui->act_nextPage->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && -1 != m_multiIndex && m_multiIndex < m_multiPageCount - 1);
ui->act_firstPage->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && 0 != m_multiIndex);
ui->act_lastPage->setEnabled(-1 != m_currIndex && m_multiPageCount > 0 && m_multiIndex != m_multiPageCount - 1);
m_multiPageLineEdit->setText(QString("%1/%2").arg(m_multiIndex + 1).arg(m_multiPageCount));
ui->toolBar->actions().at(15)->setVisible(-1 != m_currIndex && m_multiPageCount > 1 && -1 != m_multiIndex);
ui->act_zoomIn->setEnabled(nullptr != img);
ui->act_zoomOut->setEnabled(nullptr != img);
......@@ -626,10 +722,12 @@ void MainWindow::on_act_previousPage_triggered()
else
{
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -651,10 +749,12 @@ void MainWindow::on_act_nextPage_triggered()
else
{
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -676,10 +776,12 @@ void MainWindow::on_act_firstPage_triggered()
else
{
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -701,10 +803,12 @@ void MainWindow::on_act_lastPage_triggered()
else
{
m_view->clearImage();
m_wndStatusBar->setMousePosInfo(0, 0);
m_relation = false;
m_modify = false;
}
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......@@ -724,12 +828,14 @@ void MainWindow::on_act_adjust_triggered()
{
m_view->addImage(dlg.getAfterImage());
m_modify = true;
updateActionStatus();
}
else
{
m_view->addImage(dlg.getBeforeImage());
}
updateStatusBarPixelInfo();
updateActionStatus();
disconnect(&dlg, SIGNAL(applyToImage(HGImage)), this, SLOT(on_dialog_adjust_applyToImage(HGImage)));
}
......@@ -1187,8 +1293,9 @@ void MainWindow::on_act_autoCrop_triggered()
{
m_view->addImage(destImage);
HGBase_DestroyImage(destImage);
m_modify = true;
updateStatusBarPixelInfo();
updateActionStatus();
}
}
......
......@@ -2,6 +2,7 @@
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLineEdit>
#include "HGImgView.h"
#include "HGImgThumb.h"
......@@ -9,6 +10,30 @@ QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class HGLineEdit : public QLineEdit
{
Q_OBJECT
public:
HGLineEdit(QWidget* parent)
: QLineEdit(parent)
{
}
protected:
void focusInEvent(QFocusEvent* e)
{
(void)e;
QString text = this->text();
QStringList list = text.split("/");
text = list.first();
this->setText(text);
this->selectAll();
QLineEdit::focusInEvent(e);
}
};
class MainWindow : public QMainWindow
{
Q_OBJECT
......@@ -50,10 +75,13 @@ private slots:
void on_currItemChanged(int index);
void on_itemDoubleClicked(int index);
void on_thumbContextMenu(int index);
void on_viewerScale(double scale);
void on_viewerMousePos(int x, int y);
void on_viewerDrop(const QString &fileName);
void on_act_thumbGrid_triggered(bool checked);
void on_dialog_adjust_applyToImage(HGImage img);
void on_dialog_multirotate_refreshImgFile(const QString &fileName);
void on_multiPageLineEditFinished();
void on_act_thumbnailBar_triggered(bool checked);
......@@ -105,6 +133,7 @@ protected:
private:
HGImage createImage();
int getMultiPageCount();
void updateStatusBarPixelInfo();
void updateActionStatus();
private:
......@@ -120,6 +149,8 @@ private:
bool m_relation; // m_view上的图像是否关联到m_thumb
bool m_modify; // m_view上面的图像是否改变
class HGLineEdit* m_multiPageLineEdit;
class Widget_StatusBar *m_wndStatusBar;
class Dialog_FullScreen *m_dlgFullScreen;
};
#endif // MAINWINDOW_H
#include "widget_statusbar.h"
#include "ui_widget_statusbar.h"
#include <QToolBar>
Widget_StatusBar::Widget_StatusBar(QAction *zoomIn, QAction *zoomOut, QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget_StatusBar)
{
ui->setupUi(this);
QToolBar *toolBar = new QToolBar(this);
toolBar->setFixedHeight(20);
m_lbl_scale = new QLabel("0%", toolBar);
m_lbl_scale->setFixedWidth(40);
m_lbl_scale->setAlignment(Qt::AlignHCenter);
toolBar->addAction(zoomIn);
toolBar->addWidget(m_lbl_scale);
toolBar->addAction(zoomOut);
reinterpret_cast<QHBoxLayout*>(this->layout())->addWidget(toolBar, 0, Qt::AlignRight);
}
Widget_StatusBar::~Widget_StatusBar()
{
qDebug("~Widget_StatusBar");
delete ui;
}
void Widget_StatusBar::setPageInfo(int total, int page)
{
ui->lbl_page->setText(QString("%1/%2").arg(page + 1).arg(total));
}
void Widget_StatusBar::setPixelInfo(int width, int height, int bpp)
{
ui->lbl_size->setText(QString("%1*%2*%3").arg(width).arg(height).arg(bpp));
}
void Widget_StatusBar::setMousePosInfo(int x, int y)
{
ui->lbl_mousePos->setText(QString("X:%1, Y:%2").arg(x).arg(y));
}
void Widget_StatusBar::setScale(double scale)
{
m_lbl_scale->setText(QString("%1%").arg((int)(scale * 100.0)));
}
void Widget_StatusBar::setDeviceStatusInfo(const QString &info)
{
ui->lbl_devSts->setText(info);
m_devStatusInfos.append(info);
}
#ifndef WIDGET_STATUSBAR_H
#define WIDGET_STATUSBAR_H
#include <QWidget>
#include <QLabel>
namespace Ui {
class Widget_StatusBar;
}
class Widget_StatusBar : public QWidget
{
Q_OBJECT
public:
explicit Widget_StatusBar(QAction *zoomIn, QAction *zoomOut, QWidget *parent = nullptr);
~Widget_StatusBar();
void setPageInfo(int total, int page);
void setPixelInfo(int width, int height, int bpp);
void setMousePosInfo(int x, int y);
void setScale(double scale);
void setDeviceStatusInfo(const QString &info);
private:
Ui::Widget_StatusBar *ui;
QLabel* m_lbl_scale;
QStringList m_devStatusInfos;
};
#endif // WIDGET_STATUSBAR_H
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Widget_StatusBar</class>
<widget class="QWidget" name="Widget_StatusBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>603</width>
<height>50</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,0,0,0,0,0,0,0">
<property name="spacing">
<number>5</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="lbl_devSts">
<property name="text">
<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="lbl_page">
<property name="text">
<string>0/0</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_size">
<property name="text">
<string>0*0*0</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lbl_mousePos">
<property name="text">
<string>X:0, Y:0</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::VLine</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>
......@@ -1360,7 +1360,6 @@ void HGImgView::mouseMoveEvent(QMouseEvent* e)
else
{
assert(0 == m_operate);
emit mouseMove(e->pos().x(), e->pos().y());
MouseStatus mouseStatus = getMouseStatus(e->pos());
if (nullptr != m_image && m_showImage && !m_draging
......@@ -1398,11 +1397,13 @@ void HGImgView::mouseMoveEvent(QMouseEvent* e)
}
else
{
emit mousePos(0, 0);
QToolTip::hideText();
}
}
else
{
emit mousePos(0, 0);
QToolTip::hideText();
}
......@@ -1481,6 +1482,7 @@ void HGImgView::leaveEvent(QEvent *e)
m_mouseOn = false;
m_mouseMoveStatus = MouseStatus_Null;
Show();
emit mousePos(0, 0);
}
void HGImgView::paintEvent(QPaintEvent* e)
......
......@@ -46,7 +46,6 @@ public:
signals:
void escape();
void mouseMove(int x, int y);
void mousePos(int x, int y);
void scaleChanged(double scale);
void drop(const QString &fileName);
......
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