netpanzer-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR...


From: Hankin Chick
Subject: [netPanzer-CVS] netpanzer/src/NetPanzer/Views/MainMenu/Multi IR...
Date: Sat, 15 Nov 2003 08:16:35 -0500

CVSROOT:        /cvsroot/netpanzer
Module name:    netpanzer
Branch:         
Changes by:     Hankin Chick <address@hidden>   03/11/15 08:16:35

Modified files:
        src/NetPanzer/Views/MainMenu/Multi: IRCLobbyView.cpp 
                                            IRCLobbyView.hpp 

Log message:
        scroll bar for server list

Patches:
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.7 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.8
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp:1.7   Fri Nov 
14 06:27:08 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.cpp       Sat Nov 
15 08:16:34 2003
@@ -42,6 +42,7 @@
     setAllowResize(false);
     setAllowMove(false);
     setVisible(false);
+    topViewableItem=0;
 
     moveTo(iXY(bodyTextRect.max.x-400, bodyTextRect.min.y + 200));
 
@@ -55,6 +56,23 @@
     cInputField* input = addInputField(iXY(4, chat_y), &szChat, "", true);
     input->setReturnAction(chatReturnPressed);
 
+    server_list_end_y=lobby_view_height-(Surface::getFontHeight()*6);
+    chat_list_end_y=server_list_end_y+(Surface::getFontHeight()*4);      
+    server_list_end_x=(getClientRect().getSizeX()-12);
+
+    iXY size(12, 12);
+
+    iXY pos(getClientRect().getSizeX() - size.x, 0);
+    upButton.setLabel("-");
+    upButton.setBounds(iRect(pos, pos + size));
+    add(&upButton);
+
+    pos = iXY(getClientRect().getSizeX() - size.x, server_list_end_y-size.y);
+    downButton.setLabel("+");
+    downButton.setBounds(iRect(pos, pos + size));
+    add(&downButton);
+
+
     // XXX ugly ugly ugly
     if(!lobby_view)
         lobby_view = this;
@@ -71,10 +89,7 @@
     
     int y=0;
     int disp_server_upto=0;
-    int server_list_end_y=lobby_view_height-(Surface::getFontHeight()*6);
-    int chat_list_end_y=server_list_end_y+(Surface::getFontHeight()*4);      
 
-// XXX todo: scrollbar for large list of servers
     if(lobby_connection == 0 || !lobby_connection->isConnected()) {
         clientArea.bltString(iXY(0,0),"Not connected to lobby", Color::white);
         View::doDraw(viewArea, clientArea);
@@ -86,12 +101,17 @@
         GameServerList::iterator i;
         GameServerList* serverlist = lobby_connection->game_servers;
         disp_server_upto=0;
+        int upto=0;
         for(i=serverlist->begin(); i!=serverlist->end(); i++) {
+            if(upto>=topViewableItem) { break; }
+            upto++;
+        }
+        for(; i!=serverlist->end(); i++) {
             const GameServer* server = &(*i);
 
             std::stringstream playerstr;
             playerstr << server->playercount << "/" << server->max_players;
-            
+         
             clientArea.bltString(iXY(0,y),server->user.c_str(), Color::white);
             clientArea.bltString(iXY(140,y),playerstr.str().c_str(), 
Color::white);
             clientArea.bltString(iXY(200,y),server->map.c_str(), Color::white);
@@ -125,19 +145,45 @@
 int IRCLobbyView::lMouseUp(const iXY &down_pos,const iXY &up_pos)
 {
     assert(this!=0);
-    int idx_down=down_pos.y/Surface::getFontHeight();
-    int idx=up_pos.y/Surface::getFontHeight();
-    if(idx>=0 && idx_down==idx && idx<total_displayed_servers) {
-        const GameServer *server=displayed_servers[idx];
-        assert(server!=0);
-
-        // connect to this game
-        std::stringstream server_host;
-        server_host << server->host.c_str() <<":"<<server->port;
-        IPAddressView::szServer.setString(server_host.str().c_str());
+    int fontHeight=Surface::getFontHeight();
+    int down_y=(down_pos.y-2);
+    int up_y=(up_pos.y-2);
+    if(up_pos.y<0 || down_pos.y<0) { return View::lMouseUp(down_pos,up_pos); }
+    int idx_down=down_y/fontHeight;
+    int idx=up_y/fontHeight;
+
+    if(up_pos.x<server_list_end_x && down_pos.x<server_list_end_x) {
+        if(idx_down==idx && idx<total_displayed_servers) {
+            const GameServer *server=displayed_servers[idx];
+            assert(server!=0);
+
+            // connect to this game
+            std::stringstream server_host;
+            server_host << server->host.c_str() <<":"<<server->port;
+            IPAddressView::szServer.setString(server_host.str().c_str());
+        }
     }
     return View::lMouseUp(down_pos,up_pos);
 }
+
+
+void IRCLobbyView::actionPerformed(mMouseEvent me)
+{
+    if (me.getID() == mMouseEvent::MOUSE_EVENT_CLICKED) {
+        if (me.getSource(upButton)) {
+            if (--topViewableItem < 0) {
+                topViewableItem = 0;
+            }
+        } else if (me.getSource(downButton)) {
+            int max_size=lobby_connection->game_servers->size()-1;
+            ++topViewableItem;
+            if (max_size>0 && topViewableItem >= max_size) {
+                topViewableItem = max_size;
+            }
+        }
+    }
+}
+
 
 void IRCLobbyView::buttonRefresh()
 {
Index: netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp
diff -u netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.5 
netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.6
--- netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp:1.5   Thu Nov 
13 08:12:20 2003
+++ netpanzer/src/NetPanzer/Views/MainMenu/Multi/IRCLobbyView.hpp       Sat Nov 
15 08:16:34 2003
@@ -24,6 +24,7 @@
 #include "View.hpp"
 #include "Surface.hpp"
 #include "GameServer.hpp"
+#include "Button.hpp"
 
 //---------------------------------------------------------------------------
 class IRCLobbyView : public View
@@ -36,11 +37,16 @@
 
     virtual void doDraw(Surface &windowArea, Surface &clientArea); 
     virtual int lMouseUp(const iXY &up_pos,const iXY &down_pos);
+    virtual void actionPerformed(mMouseEvent me);
 
 private:
     static void buttonRefresh();
     static void chatReturnPressed(cInputField* input);
     
+    int server_list_end_y;
+    int server_list_end_x;
+    int chat_list_end_y;
+    int topViewableItem;
     int lobby_view_height;
     const GameServer *displayed_servers[64];
     int total_displayed_servers;
@@ -48,9 +54,11 @@
     std::string error_message;
     cInputFieldString szChat;
     IRCLobby *lobby_connection;
+
+    Button upButton;
+    Button downButton;
 };
 
 extern IRCLobbyView* lobby_view;
 
 #endif
-




reply via email to

[Prev in Thread] Current Thread [Next in Thread]