- Warnings/errors message box
- Send JOIN_ROOM on double click on rooms list
- Some small iprovements more
--- a/hedgewars/hwLibrary.pas Sat Nov 21 12:40:33 2015 +0300
+++ b/hedgewars/hwLibrary.pas Sat Nov 21 17:07:06 2015 +0300
@@ -181,6 +181,7 @@
connectOfficialServer,
passNetData,
sendChatLine,
+ joinRoom,
// dunno what these are
RunEngine,
--- a/hedgewars/uFLNet.pas Sat Nov 21 12:40:33 2015 +0300
+++ b/hedgewars/uFLNet.pas Sat Nov 21 17:07:06 2015 +0300
@@ -61,20 +61,33 @@
procedure handler_;
begin
sendUI(mtNetData, @state.cmd, sizeof(state.cmd));
- writeln('handler_');
handleTail()
end;
procedure handler_L;
+var cmd: TCmdParamL;
begin
- writeln('handler_L');
+ cmd.cmd:= state.cmd;
+ cmd.str1:= getShortString; // FIXME long line
+ if cmd.str1[0] = #0 then exit;
+ sendUI(mtNetData, @cmd, sizeof(cmd));
handleTail()
end;
procedure handler_ML;
+var cmd: TCmdParamL;
+ f: boolean;
begin
writeln('handler_ML');
- handleTail()
+ sendUI(mtNetData, @state.cmd, sizeof(state.cmd));
+ cmd.cmd:= Succ(state.cmd);
+
+ repeat
+ cmd.str1:= getShortString; // FIXME long line
+ f:= cmd.str1[0] <> #0;
+ if f then
+ sendUI(mtNetData, @cmd, sizeof(cmd));
+ until not f
end;
procedure handler_MS;
@@ -93,8 +106,12 @@
end;
procedure handler_S;
+var cmd: TCmdParamS;
begin
- writeln('handler_S');
+ cmd.cmd:= state.cmd;
+ cmd.str1:= getShortString;
+ if cmd.str1[0] = #0 then exit;
+ sendUI(mtNetData, @cmd, sizeof(cmd));
handleTail()
end;
--- a/hedgewars/uFLNetProtocol.pas Sat Nov 21 12:40:33 2015 +0300
+++ b/hedgewars/uFLNetProtocol.pas Sat Nov 21 17:07:06 2015 +0300
@@ -4,6 +4,7 @@
procedure passNetData(p: pointer); cdecl;
procedure sendChatLine(msg: PChar); cdecl;
+procedure joinRoom(roomName: PChar); cdecl;
implementation
uses uFLNetTypes, uFLTypes, uFLUICallback, uFLNet;
@@ -60,6 +61,7 @@
procedure handler_ERROR(var p: TCmdParamL);
begin
+ sendUI(mtError, @p.str1[1], length(p.str1));
end;
procedure handler_HH_NUM(var p: TCmdParam);
@@ -84,6 +86,8 @@
procedure handler_JOINED_s(var s: TCmdParamS);
begin
+ if s.str1 = 'qmlfrontend' then // we joined a room
+ sendNet('LIST');
end;
procedure handler_JOINING(var p: TCmdParamS);
@@ -115,6 +119,8 @@
procedure handler_LOBBY_LEFT(var p: TCmdParamSL);
begin
+ p.str2:= p.str1 + #10 + p.str2;
+ sendUI(mtRemoveLobbyClient, @p.str2[1], length(p.str2));
end;
procedure handler_NICK(var p: TCmdParamS);
@@ -230,6 +236,7 @@
procedure handler_WARNING(var p: TCmdParamL);
begin
+ sendUI(mtWarning, @p.str1[1], length(p.str1));
end;
const handlers: array[TCmdType] of PHandler = (PHandler(@handler_ASKPASSWORD),
@@ -263,5 +270,11 @@
sendNet(msg);
end;
+procedure joinRoom(roomName: PChar); cdecl;
+begin
+ sendNetLn('JOIN_ROOM');
+ sendNet(roomName);
+end;
+
end.
--- a/hedgewars/uFLTypes.pas Sat Nov 21 12:40:33 2015 +0300
+++ b/hedgewars/uFLTypes.pas Sat Nov 21 17:07:06 2015 +0300
@@ -5,7 +5,7 @@
TMessageType = (mtPreview, mtAddPlayingTeam, mtRemovePlayingTeam, mtAddTeam, mtRemoveTeam
, mtTeamColor, mtNetData, mtConnected, mtDisconnected, mtAddLobbyClient
, mtRemoveLobbyClient, mtLobbyChatLine, mtAddRoom, mtUpdateRoom
- , mtRemoveRoom);
+ , mtRemoveRoom, mtError, mtWarning);
TIPCMessage = record
str: shortstring;
--- a/qmlFrontend/flib.h Sat Nov 21 12:40:33 2015 +0300
+++ b/qmlFrontend/flib.h Sat Nov 21 17:07:06 2015 +0300
@@ -23,6 +23,8 @@
, MSG_ADDROOM
, MSG_UPDATEROOM
, MSG_REMOVEROOM
+ , MSG_ERROR
+ , MSG_WARNING
};
typedef union string255_
@@ -52,6 +54,7 @@
typedef void flibFree_t();
typedef void passNetData_t(const char * data);
typedef void sendChatLine_t(const char * msg);
+typedef void joinRoom_t(const char * roomName);
typedef char **getThemesList_t();
typedef void freeThemesList_t(char **list);
--- a/qmlFrontend/hwengine.cpp Sat Nov 21 12:40:33 2015 +0300
+++ b/qmlFrontend/hwengine.cpp Sat Nov 21 17:07:06 2015 +0300
@@ -37,6 +37,7 @@
connectOfficialServer_t * flibConnectOfficialServer;
passNetData_t * flibPassNetData;
sendChatLine_t * flibSendChatLine;
+ joinRoom_t * flibJoinRoom;
}
Q_DECLARE_METATYPE(MessageType);
@@ -84,6 +85,7 @@
flibConnectOfficialServer = (connectOfficialServer_t*) hwlib.resolve("connectOfficialServer");
flibPassNetData = (passNetData_t*) hwlib.resolve("passNetData");
flibSendChatLine = (sendChatLine_t*) hwlib.resolve("sendChatLine");
+ flibJoinRoom = (joinRoom_t*) hwlib.resolve("joinRoom");
flibInit("/usr/home/unC0Rr/Sources/Hedgewars/Hedgewars-GC/share/hedgewars/Data", "/usr/home/unC0Rr/.hedgewars");
flibRegisterUIMessagesCallback(this, &guiMessagesCallback);
@@ -191,7 +193,8 @@
break;
}
case MSG_REMOVELOBBYCLIENT: {
- emit lobbyClientRemoved(QString::fromUtf8(msg));
+ QStringList l = QString::fromUtf8(msg).split('\n');
+ emit lobbyClientRemoved(l[0], l[1]);
break;
}
case MSG_LOBBYCHATLINE: {
@@ -213,6 +216,14 @@
emit roomRemoved(QString::fromUtf8(msg));
break;
}
+ case MSG_ERROR: {
+ emit errorMessage(QString::fromUtf8(msg));
+ break;
+ }
+ case MSG_WARNING: {
+ emit warningMessage(QString::fromUtf8(msg));
+ break;
+ }
}
}
@@ -294,6 +305,11 @@
flibSendChatLine(msg.toUtf8().constData());
}
+void HWEngine::joinRoom(const QString &roomName)
+{
+ flibJoinRoom(roomName.toUtf8().constData());
+}
+
void HWEngine::setTheme(const QString &theme)
{
flibSetTheme(theme.toUtf8().constData());
--- a/qmlFrontend/hwengine.h Sat Nov 21 12:40:33 2015 +0300
+++ b/qmlFrontend/hwengine.h Sat Nov 21 17:07:06 2015 +0300
@@ -38,7 +38,12 @@
Q_INVOKABLE void sendChatMessage(const QString & msg);
+ Q_INVOKABLE void joinRoom(const QString & roomName);
+
signals:
+ void errorMessage(const QString & message);
+ void warningMessage(const QString & message);
+
void previewImageChanged();
void localTeamAdded(const QString & teamName, int aiLevel);
void localTeamRemoved(const QString & teamName);
@@ -52,7 +57,7 @@
void netDisconnected(const QString & message);
void lobbyClientAdded(const QString & clientName);
- void lobbyClientRemoved(const QString & clientName);
+ void lobbyClientRemoved(const QString & clientName, const QString & reason);
void lobbyChatLine(const QString & nickname, const QString & line);
void roomAdded(quint32 flags
--- a/qmlFrontend/qml/qmlFrontend/Chat.qml Sat Nov 21 12:40:33 2015 +0300
+++ b/qmlFrontend/qml/qmlFrontend/Chat.qml Sat Nov 21 17:07:06 2015 +0300
@@ -43,7 +43,7 @@
}
Text {
color: "#ffffff"
- text: name
+ text: line
MouseArea {
z: 1
@@ -56,7 +56,7 @@
}
function addLine(nickname, line) {
- chatLinesModel.append({"nick" : nickname, "name": line})
+ chatLinesModel.append({"nick" : nickname, "line": line})
if(chatLinesModel.count > 200)
chatLinesModel.remove(0)
chatLines.currentIndex = chatLinesModel.count - 1
@@ -118,12 +118,18 @@
Connections {
target: HWEngine
- onLobbyClientAdded: chatClientsModel.append({"isAdmin": false, "name": clientName})
+ onLobbyClientAdded: {
+ chatClientsModel.append({"isAdmin": false, "name": clientName})
+ chatLines.addLine("***", qsTr("%1 joined").arg(clientName))
+ }
onLobbyClientRemoved: {
var i = chatClientsModel.count - 1;
while ((i >= 0) && (chatClientsModel.get(i).name !== clientName)) --i;
- if(i >= 0) chatClientsModel.remove(i, 1);
+ if(i >= 0) {
+ chatClientsModel.remove(i, 1);
+ chatLines.addLine("***", qsTr("%1 quit (%2)").arg(clientName).arg(reason))
+ }
}
}
}
--- a/qmlFrontend/qml/qmlFrontend/LobbyPage.qml Sat Nov 21 12:40:33 2015 +0300
+++ b/qmlFrontend/qml/qmlFrontend/LobbyPage.qml Sat Nov 21 17:07:06 2015 +0300
@@ -49,7 +49,7 @@
MouseArea {
z: 1
anchors.fill: parent
- onClicked: ;
+ onDoubleClicked: HWEngine.joinRoom(name);
}
}
--- a/qmlFrontend/qml/qmlFrontend/main.qml Sat Nov 21 12:40:33 2015 +0300
+++ b/qmlFrontend/qml/qmlFrontend/main.qml Sat Nov 21 17:07:06 2015 +0300
@@ -36,9 +36,45 @@
}
}
+ Rectangle {
+ id: warningsBox
+ y: parent.height - height
+ width: parent.width - 120
+ height: 80
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "#7e3232"
+ border.color: "#d3ec2d"
+ visible: false
+ z: 2
+
+ function showMessage(message) {
+ msgBox.text = message
+ visible = true
+ }
+
+ Text {
+ id: msgBox
+ x: 0
+ y: 0
+ height: parent.height
+ font.pixelSize: 12
+ wrapMode: Text.Wrap
+ }
+ HWButton {
+ id: closeButton
+ x: parent.width - width
+ y: 0
+ width: 40
+ height: 40
+ onClicked: warningsBox.visible = false
+ }
+ }
+
Connections {
target: HWEngine
onNetConnected: currentPage = "LobbyPage";
onNetDisconnected: currentPage = "First";
+ onWarningMessage: warningsBox.showMessage(message);
+ onErrorMessage: warningsBox.showMessage(message);
}
}