[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Eliot-dev] eliot/qt aux_window.cpp aux_window.h board_widg...
From: |
eliot-dev |
Subject: |
[Eliot-dev] eliot/qt aux_window.cpp aux_window.h board_widg... |
Date: |
Sat, 26 Jan 2008 23:03:36 +0000 |
CVSROOT: /cvsroot/eliot
Module name: eliot
Changes by: Olivier Teulière <ipkiss> 08/01/26 23:03:36
Modified files:
qt : aux_window.cpp aux_window.h board_widget.cpp
history_widget.cpp main_window.cpp
main_window.h player_widget.cpp
prefs_dialog.cpp qtcommon.h training_widget.cpp
training_widget.h
qt/ui : main_window.ui training_widget.ui
Log message:
- Allow sorting the training results
- Added auxiliary windows for the history and the external board
- Gave a title to auxiliary windows and remember their position (more
or less) and size
- Auxiliary windows do not survive anymore after the main one
- Preferences are now stored in a sensible place
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/aux_window.cpp?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/aux_window.h?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/board_widget.cpp?cvsroot=eliot&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/history_widget.cpp?cvsroot=eliot&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/main_window.cpp?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/main_window.h?cvsroot=eliot&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/player_widget.cpp?cvsroot=eliot&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/prefs_dialog.cpp?cvsroot=eliot&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/qtcommon.h?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/training_widget.cpp?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/training_widget.h?cvsroot=eliot&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/ui/main_window.ui?cvsroot=eliot&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/eliot/qt/ui/training_widget.ui?cvsroot=eliot&r1=1.1&r2=1.2
Patches:
Index: aux_window.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/aux_window.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- aux_window.cpp 20 Jan 2008 18:40:12 -0000 1.1
+++ aux_window.cpp 26 Jan 2008 23:03:32 -0000 1.2
@@ -18,19 +18,28 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
+#include "config.h"
+
#include <QtGui/QAction>
#include <QtGui/QWidget>
#include <QtGui/QVBoxLayout>
+#include <QtGui/QCloseEvent>
+#include <QtCore/QSettings>
#include "aux_window.h"
+#include "qtcommon.h"
-AuxWindow::AuxWindow(QWidget &iWidget, QAction *iAction)
- : m_widget(iWidget), m_action(iAction)
+AuxWindow::AuxWindow(QWidget &iWidget, QString iWindowTitle,
+ QString iWindowName, QAction *iAction)
+ : m_widget(iWidget), m_windowName(iWindowName), m_action(iAction)
{
+ setWindowTitle(iWindowTitle);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(&iWidget);
setLayout(layout);
+
+ readSettings();
}
@@ -40,7 +49,16 @@
}
-void AuxWindow::showEvent(QShowEvent * event)
+void AuxWindow::toggleVisibility()
+{
+ if (isVisible())
+ hide();
+ else
+ show();
+}
+
+
+void AuxWindow::showEvent(QShowEvent *event)
{
if (m_action)
m_action->setChecked(true);
@@ -48,10 +66,39 @@
}
-void AuxWindow::hideEvent(QHideEvent * event)
+void AuxWindow::hideEvent(QHideEvent *event)
{
if (m_action)
m_action->setChecked(false);
QWidget::hideEvent(event);
}
+
+void AuxWindow::closeEvent(QCloseEvent *event)
+{
+ writeSettings();
+ event->accept();
+}
+
+
+void AuxWindow::writeSettings() const
+{
+ QSettings settings(ORGANIZATION, PACKAGE_NAME);
+ settings.beginGroup(m_windowName);
+ settings.setValue("size", size());
+ settings.setValue("pos", pos());
+ settings.endGroup();
+}
+
+
+void AuxWindow::readSettings()
+{
+ QSettings settings(ORGANIZATION, PACKAGE_NAME);
+ settings.beginGroup(m_windowName);
+ QSize size = settings.value("size").toSize();
+ if (size.isValid())
+ resize(size);
+ move(settings.value("pos", QPoint(200, 200)).toPoint());
+ settings.endGroup();
+}
+
Index: aux_window.h
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/aux_window.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- aux_window.h 20 Jan 2008 18:40:12 -0000 1.1
+++ aux_window.h 26 Jan 2008 23:03:34 -0000 1.2
@@ -39,20 +39,36 @@
/**
* Constructor. The AuxWindow takes ownership of the given widget (i.e. it
* is responsible for its deletion).
- * The optional action checked/unchecked when the window is shown/hidden
+ * @param iWindowTitle: title of the window; e.g.: "Bag"
+ * @param iWindowName: name of the window, used in the settings
+ * e.g.: "BagWindow"
+ * @param iAction: if not NULL, it will be checked/unchecked when the
+ * window is shown/hidden
*/
- AuxWindow(QWidget &iWidget, QAction *iAction = NULL);
+ AuxWindow(QWidget &iWidget, QString iWindowTitle,
+ QString iWindowName, QAction *iAction = NULL);
~AuxWindow();
+ void toggleVisibility();
+
protected:
virtual void showEvent(QShowEvent *event);
virtual void hideEvent(QHideEvent *event);
+ virtual void closeEvent(QCloseEvent *event);
private:
QWidget &m_widget;
+ /// Name of the window, used to save its state
+ QString m_windowName;
+
/// Action to check/uncheck
QAction *m_action;
+
+ /// Save window state
+ void writeSettings() const;
+ /// Restore window state
+ void readSettings();
};
#endif
Index: board_widget.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/board_widget.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- board_widget.cpp 26 Jan 2008 16:58:46 -0000 1.3
+++ board_widget.cpp 26 Jan 2008 23:03:34 -0000 1.4
@@ -66,7 +66,7 @@
QSize BoardWidget::sizeHint() const
{
- return QSize(300, 300);
+ return QSize(400, 400);
}
Index: history_widget.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/history_widget.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- history_widget.cpp 26 Jan 2008 16:58:47 -0000 1.4
+++ history_widget.cpp 26 Jan 2008 23:03:34 -0000 1.5
@@ -18,7 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
-#include <iostream>
+#include "config.h"
+
#include <QtGui/QTreeView>
#include <QtGui/QTabWidget>
#include <QtGui/QStandardItemModel>
@@ -89,7 +90,7 @@
if (m_history != NULL && m_history->getSize() != 0)
{
// Should we align the rack with its solution?
- QSettings qs;
+ QSettings qs(ORGANIZATION, PACKAGE_NAME);
bool align = qs.value(PrefsDialog::kINTF_ALIGN_HISTORY).toBool();
if (!align)
Index: main_window.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/main_window.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- main_window.cpp 26 Jan 2008 16:58:47 -0000 1.6
+++ main_window.cpp 26 Jan 2008 23:03:34 -0000 1.7
@@ -25,6 +25,7 @@
#include <QtGui/QMessageBox>
#include <QtGui/QFileDialog>
#include <QtGui/QDockWidget>
+#include <QtGui/QCloseEvent>
#include <QtCore/QSettings>
#include "main_window.h"
@@ -53,7 +54,8 @@
MainWindow::MainWindow(QWidget *iParent)
: QMainWindow(iParent), m_dic(NULL), m_game(NULL), m_newGameDialog(NULL),
- m_prefsDialog(NULL), m_bagWindow(NULL)
+ m_prefsDialog(NULL), m_bagWindow(NULL), m_boardWindow(NULL),
+ m_historyWindow(NULL)
{
m_ui.setupUi(this);
QObject::connect(this, SIGNAL(gameChanged(const Game*)),
@@ -109,7 +111,7 @@
emit gameChanged(NULL);
// Load dictionary
- QSettings qs;
+ QSettings qs(ORGANIZATION, PACKAGE_NAME);
QString dicPath = qs.value(PrefsDialog::kINTF_DIC_PATH, "").toString();
// FIXME: the messages are not displayed anymore when the window is shown
if (dicPath == "")
@@ -134,6 +136,8 @@
MainWindow::~MainWindow()
{
delete m_bagWindow;
+ delete m_boardWindow;
+ delete m_historyWindow;
delete m_game;
delete m_dic;
}
@@ -197,6 +201,19 @@
}
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ // Make sure auxiliary windows don't survive after the main one
+ if (m_bagWindow)
+ m_bagWindow->close();
+ if (m_boardWindow)
+ m_boardWindow->close();
+ if (m_historyWindow)
+ m_historyWindow->close();
+ event->accept();
+}
+
+
void MainWindow::on_action_GameNew_triggered()
{
if (m_dic == NULL)
@@ -311,7 +328,7 @@
displayInfoMsg(QString("Loaded dictionary '%1'").arg(fileName));
// Save the location of the dictionary in the preferences
- QSettings qs;
+ QSettings qs(ORGANIZATION, PACKAGE_NAME);
QString dicPath = qs.value(PrefsDialog::kINTF_DIC_PATH,
"").toString();
qs.setValue(PrefsDialog::kINTF_DIC_PATH, fileName);
}
@@ -327,21 +344,53 @@
{
if (m_bagWindow == NULL)
{
- // Create the bag window
- BagWidget *bagWidget = new BagWidget(NULL);
- bagWidget->setGame(m_game);
- m_bagWindow = new AuxWindow(*bagWidget, m_ui.action_WindowsBag);
+ // Create the window
+ BagWidget *bag = new BagWidget(NULL);
+ bag->setGame(m_game);
+ m_bagWindow = new AuxWindow(*bag, _q("Bag"), "BagWindow",
+ m_ui.action_WindowsBag);
QObject::connect(this, SIGNAL(gameChanged(const Game*)),
- bagWidget, SLOT(setGame(const Game*)));
+ bag, SLOT(setGame(const Game*)));
QObject::connect(this, SIGNAL(gameUpdated()),
- bagWidget, SLOT(refresh()));
- // XXX
- m_bagWindow->move(20, 20);
+ bag, SLOT(refresh()));
}
- if (m_bagWindow->isVisible())
- m_bagWindow->hide();
- else
- m_bagWindow->show();
+ m_bagWindow->toggleVisibility();
+}
+
+
+void MainWindow::on_action_WindowsBoard_triggered()
+{
+ if (m_boardWindow == NULL)
+ {
+ // Create the window
+ BoardWidget *board = new BoardWidget(NULL);
+ board->setGame(m_game);
+ m_boardWindow = new AuxWindow(*board, _q("Board"), "BoardWindow",
+ m_ui.action_WindowsBoard);
+ QObject::connect(this, SIGNAL(gameChanged(const Game*)),
+ board, SLOT(setGame(const Game*)));
+ QObject::connect(this, SIGNAL(gameUpdated()),
+ board, SLOT(refresh()));
+ }
+ m_boardWindow->toggleVisibility();
+}
+
+
+void MainWindow::on_action_WindowsHistory_triggered()
+{
+ if (m_historyWindow == NULL)
+ {
+ // Create the window
+ HistoryTabWidget *history = new HistoryTabWidget(NULL);
+ history->setGame(m_game);
+ m_historyWindow = new AuxWindow(*history, _q("History"),
"HistoryWindow",
+ m_ui.action_WindowsHistory);
+ QObject::connect(this, SIGNAL(gameChanged(const Game*)),
+ history, SLOT(setGame(const Game*)));
+ QObject::connect(this, SIGNAL(gameUpdated()),
+ history, SLOT(refresh()));
+ }
+ m_historyWindow->toggleVisibility();
}
Index: main_window.h
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/main_window.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- main_window.h 26 Jan 2008 16:58:47 -0000 1.6
+++ main_window.h 26 Jan 2008 23:03:34 -0000 1.7
@@ -54,6 +54,10 @@
void displayErrorMsg(QString iMsg, QString iContext = "");
void displayInfoMsg(QString iMsg);
+protected:
+ /// Handler for close events
+ virtual void closeEvent(QCloseEvent * e);
+
private slots:
void on_action_GameNew_triggered();
void on_action_GameLoad_triggered();
@@ -61,6 +65,8 @@
void on_action_SettingsChooseDic_triggered();
void on_action_SettingsPreferences_triggered();
void on_action_WindowsBag_triggered();
+ void on_action_WindowsBoard_triggered();
+ void on_action_WindowsHistory_triggered();
void on_action_HelpAbout_triggered();
/**
@@ -85,8 +91,12 @@
/// Dialog for the preferences
PrefsDialog *m_prefsDialog;
- /// Bag window
+ /// Auxiliary windows
+ //@{
AuxWindow *m_bagWindow;
+ AuxWindow *m_boardWindow;
+ AuxWindow *m_historyWindow;
+ //@}
/// Destroy the current game (if any) and the associated widgets
void destroyCurrentGame();
Index: player_widget.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/player_widget.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- player_widget.cpp 26 Jan 2008 16:58:47 -0000 1.5
+++ player_widget.cpp 26 Jan 2008 23:03:34 -0000 1.6
@@ -272,7 +272,9 @@
trWidget->setGame(iGame);
QObject::connect(this, SIGNAL(refreshSignal()),
trWidget, SLOT(refresh()));
- // Forward the gameUpdated() signal to the outside
+ // Forward signals to the outside
+ QObject::connect(trWidget, SIGNAL(notifyProblem(QString)),
+ this, SIGNAL(notifyProblem(QString)));
QObject::connect(trWidget, SIGNAL(gameUpdated()),
this, SIGNAL(gameUpdated()));
addTab(trWidget, qfw(player.getName()));
Index: prefs_dialog.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/prefs_dialog.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- prefs_dialog.cpp 26 Jan 2008 16:58:47 -0000 1.2
+++ prefs_dialog.cpp 26 Jan 2008 23:03:34 -0000 1.3
@@ -18,6 +18,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
+#include "config.h"
+
#include <QtCore/QSettings>
#include <QtGui/QFileDialog>
@@ -35,7 +37,7 @@
setupUi(this);
// Interface settings
- QSettings qs;
+ QSettings qs(ORGANIZATION, PACKAGE_NAME);
checkBoxIntfAlignHistory->setChecked(qs.value(kINTF_ALIGN_HISTORY).toBool());
lineEditIntfDicPath->setText(qs.value(kINTF_DIC_PATH, "").toString());
@@ -68,7 +70,7 @@
bool shouldEmitUpdate = false;
// Interface settings
- QSettings qs;
+ QSettings qs(ORGANIZATION, PACKAGE_NAME);
if (qs.value(kINTF_ALIGN_HISTORY).toBool() !=
checkBoxIntfAlignHistory->isChecked())
{
// We need to redraw the history widget
Index: qtcommon.h
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/qtcommon.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- qtcommon.h 20 Jan 2008 18:40:13 -0000 1.1
+++ qtcommon.h 26 Jan 2008 23:03:35 -0000 1.2
@@ -43,4 +43,7 @@
// Translation macro to use gettext
#define _q(s) qfu(_(s))
+// Used for QSettings
+#define ORGANIZATION "Eliot"
+
#endif
Index: training_widget.cpp
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/training_widget.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- training_widget.cpp 24 Jan 2008 20:18:01 -0000 1.1
+++ training_widget.cpp 26 Jan 2008 23:03:35 -0000 1.2
@@ -23,6 +23,7 @@
#include "training_widget.h"
#include "qtcommon.h"
+#include "dic.h"
#include "game.h"
#include "training.h"
#include "player.h"
@@ -53,12 +54,15 @@
// Associate the model to the view
m_model = new QStandardItemModel(this);
treeViewResults->setModel(m_model);
- m_model->setColumnCount(5);
+ m_model->setColumnCount(6);
m_model->setHeaderData(0, Qt::Horizontal, _q("Word"), Qt::DisplayRole);
m_model->setHeaderData(1, Qt::Horizontal, _q("Ref"), Qt::DisplayRole);
m_model->setHeaderData(2, Qt::Horizontal, _q("Points"), Qt::DisplayRole);
m_model->setHeaderData(3, Qt::Horizontal, "*", Qt::DisplayRole);
m_model->setHeaderData(4, Qt::Horizontal, "", Qt::DisplayRole);
+ // Hidden column, used to store internal data
+ m_model->setHeaderData(5, Qt::Horizontal, "", Qt::DisplayRole);
+ treeViewResults->setColumnHidden(5, true);
// Enable the Play button only when there is a selection in the tree
QObject::connect(treeViewResults->selectionModel(),
@@ -142,6 +146,8 @@
m_model->setData(m_model->index(rowNum, 2), r.getPoints());
m_model->setData(m_model->index(rowNum, 3),
r.getBonus() ? "*": "");
+ // Hidden data, used to handle proper sorting in the tree view
+ m_model->setData(m_model->index(rowNum, 5), i);
}
treeViewResults->resizeColumnToContents(0);
treeViewResults->resizeColumnToContents(1);
@@ -165,7 +171,10 @@
m_game->removeTestPlay();
if (!iSelected.indexes().empty())
{
- m_game->testPlay(iSelected.indexes().first().row());
+ // Use the hidden column to get the result number
+ const QModelIndex &index =
+ m_model->index(iSelected.indexes().first().row(), 5);
+ m_game->testPlay(m_model->data(index).toUInt());
emit gameUpdated();
}
}
@@ -174,11 +183,15 @@
void TrainingWidget::on_lineEditRack_textEdited(const QString &iText)
{
// FIXME: first parameter is hardcoded
- // FIXME: return code ignored
- m_game->setRackManual(false, qtw(iText));
+ int res = m_game->setRackManual(false, qtw(iText));
+ if (res == 0)
+ {
pushButtonSearch->setEnabled(m_model->rowCount() == 0 &&
lineEditRack->text() != "");
emit gameUpdated();
+ }
+ else
+ emit notifyProblem(_q("Warning: Cannot set the rack to
'%1'").arg(iText));
}
@@ -223,7 +236,9 @@
if (!iIndex.isValid())
return;
m_game->removeTestPlay();
- m_game->playResult(iIndex.row());
+ // Use the hidden column to get the result number
+ const QModelIndex &index = m_model->index(iIndex.row(), 5);
+ m_game->playResult(m_model->data(index).toUInt());
emit gameUpdated();
}
@@ -248,6 +263,9 @@
if (m_bag == NULL)
return Invalid;
+ if (!m_bag->getDic().validateLetters(qtw(input)))
+ return Invalid;
+
// The letters must be in the bag
for (int i = 0; i < input.size(); ++i)
{
Index: training_widget.h
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/training_widget.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- training_widget.h 24 Jan 2008 20:18:01 -0000 1.1
+++ training_widget.h 26 Jan 2008 23:03:35 -0000 1.2
@@ -29,6 +29,7 @@
class Training;
class RackValidator;
class QStandardItemModel;
+class QString;
class TrainingWidget: public QWidget, private Ui::TrainingWidget
{
@@ -43,6 +44,7 @@
signals:
void gameUpdated();
+ void notifyProblem(QString iMsg);
protected:
/// Define a default size
Index: ui/main_window.ui
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/ui/main_window.ui,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- ui/main_window.ui 26 Jan 2008 10:10:51 -0000 1.5
+++ ui/main_window.ui 26 Jan 2008 23:03:35 -0000 1.6
@@ -96,6 +96,8 @@
<string>_("&Windows")</string>
</property>
<addaction name="action_WindowsBag" />
+ <addaction name="action_WindowsBoard" />
+ <addaction name="action_WindowsHistory" />
</widget>
<addaction name="menuFile" />
<addaction name="menuHelp" />
@@ -183,6 +185,25 @@
<string>Ctrl+S</string>
</property>
</action>
+ <action name="action_WindowsBoard" >
+ <property name="checkable" >
+ <bool>true</bool>
+ </property>
+ <property name="text" >
+ <string>_("External board")</string>
+ </property>
+ </action>
+ <action name="action_WindowsHistory" >
+ <property name="checkable" >
+ <bool>true</bool>
+ </property>
+ <property name="text" >
+ <string>_("History")</string>
+ </property>
+ <property name="shortcut" >
+ <string>Ctrl+H</string>
+ </property>
+ </action>
</widget>
<resources/>
<connections>
Index: ui/training_widget.ui
===================================================================
RCS file: /cvsroot/eliot/eliot/qt/ui/training_widget.ui,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- ui/training_widget.ui 24 Jan 2008 20:18:02 -0000 1.1
+++ ui/training_widget.ui 26 Jan 2008 23:03:35 -0000 1.2
@@ -76,6 +76,9 @@
<property name="editTriggers" >
<set>QAbstractItemView::NoEditTriggers</set>
</property>
+ <property name="sortingEnabled" >
+ <bool>true</bool>
+ </property>
</widget>
</item>
</layout>
@@ -84,5 +87,22 @@
</layout>
</widget>
<resources/>
- <connections/>
+ <connections>
+ <connection>
+ <sender>lineEditRack</sender>
+ <signal>returnPressed()</signal>
+ <receiver>pushButtonSearch</receiver>
+ <slot>click()</slot>
+ <hints>
+ <hint type="sourcelabel" >
+ <x>283</x>
+ <y>31</y>
+ </hint>
+ <hint type="destinationlabel" >
+ <x>281</x>
+ <y>48</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
</ui>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Eliot-dev] eliot/qt aux_window.cpp aux_window.h board_widg...,
eliot-dev <=