2017-10-02 07:32:33 +02:00
|
|
|
/************************************************************************
|
|
|
|
* listview.cpp - Example for using a multi-column FListView widget *
|
|
|
|
* *
|
|
|
|
* This file is part of the Final Cut widget toolkit *
|
|
|
|
* *
|
|
|
|
* Copyright 2017 Markus Gans *
|
|
|
|
* *
|
|
|
|
* The Final Cut is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 3 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
* The Final Cut is distributed in the hope that it will be useful, *
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
|
|
* GNU General Public License for more details. *
|
|
|
|
* *
|
|
|
|
* You should have received a copy of the GNU General Public License *
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
|
|
************************************************************************/
|
2017-07-18 23:50:51 +02:00
|
|
|
|
|
|
|
#include <iostream>
|
|
|
|
#include <fstream>
|
2017-09-11 03:06:02 +02:00
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
2017-07-18 23:50:51 +02:00
|
|
|
|
2017-09-17 21:32:46 +02:00
|
|
|
#include <final/fapplication.h>
|
|
|
|
#include <final/fdialog.h>
|
|
|
|
#include <final/flistview.h>
|
|
|
|
#include <final/fmessagebox.h>
|
2017-07-18 23:50:51 +02:00
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------
|
2017-08-01 00:56:12 +02:00
|
|
|
// class Listview
|
2017-07-18 23:50:51 +02:00
|
|
|
//----------------------------------------------------------------------
|
|
|
|
|
|
|
|
#pragma pack(push)
|
|
|
|
#pragma pack(1)
|
|
|
|
|
|
|
|
class Listview : public FDialog
|
|
|
|
{
|
2017-09-11 03:06:02 +02:00
|
|
|
public:
|
|
|
|
// Constructor
|
|
|
|
explicit Listview (FWidget* = 0);
|
|
|
|
// Destructor
|
|
|
|
~Listview();
|
|
|
|
|
|
|
|
private:
|
|
|
|
// Disable copy constructor
|
|
|
|
Listview (const Listview&);
|
|
|
|
// Disable assignment operator (=)
|
|
|
|
Listview& operator = (const Listview&);
|
|
|
|
|
|
|
|
// Event handlers
|
|
|
|
void onClose (FCloseEvent*);
|
|
|
|
|
|
|
|
// Callback methods
|
|
|
|
void cb_exitApp (FWidget*, data_ptr);
|
|
|
|
void cb_showInMessagebox (FWidget*, data_ptr);
|
2017-07-18 23:50:51 +02:00
|
|
|
};
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
Listview::Listview (FWidget* parent)
|
|
|
|
: FDialog(parent)
|
|
|
|
{
|
|
|
|
// Create FListView object
|
|
|
|
FListView* listView = new FListView (this);
|
|
|
|
listView->setGeometry(2, 1, 33, 14);
|
|
|
|
|
|
|
|
// Add columns to the view
|
|
|
|
listView->addColumn ("City");
|
|
|
|
listView->addColumn ("Condition");
|
2017-07-28 22:18:42 +02:00
|
|
|
listView->addColumn ("Temp.");
|
2017-07-18 23:50:51 +02:00
|
|
|
listView->addColumn ("Humidity");
|
2017-07-28 22:18:42 +02:00
|
|
|
listView->addColumn ("Pressure", 10);
|
|
|
|
|
|
|
|
// Set right alignment for the third, fourth, and fifth column
|
|
|
|
listView->setColumnAlignment (3, fc::alignRight);
|
|
|
|
listView->setColumnAlignment (4, fc::alignRight);
|
|
|
|
listView->setColumnAlignment (5, fc::alignRight);
|
|
|
|
|
2017-07-18 23:50:51 +02:00
|
|
|
// Populate FListView with a list of items
|
|
|
|
std::string weather[][5] =
|
|
|
|
{
|
|
|
|
{ "Alexandria", "Sunny", "31°C", "61%", "1006.4 mb" },
|
|
|
|
{ "Amsterdam", "Cloudy", "21°C", "82%", "1021.3 mb" },
|
|
|
|
{ "Baghdad", "Fair", "47°C", "9%", "1001.0 mb" },
|
|
|
|
{ "Bangkok", "Partly Cloudy", "30°C", "69%", "1002.0 mb" },
|
|
|
|
{ "Beijing", "Fair", "31°C", "68%", "1007.1 mb" },
|
|
|
|
{ "Berlin", "Cloudy", "22°C", "53%", "1022.0 mb" },
|
|
|
|
{ "Bogotá", "Fair", "9°C", "95%", "1028.5 mb" },
|
|
|
|
{ "Budapest", "Partly Cloudy", "23°C", "37%", "1020.7 mb" },
|
|
|
|
{ "Buenos Aires", "Cloudy", "7°C", "73%", "1019.0 mb" },
|
|
|
|
{ "Cairo", "Fair", "39°C", "22%", "1006.1 mb" },
|
|
|
|
{ "Cape Town", "Partly Cloudy", "12°C", "45%", "1030.1 mb" },
|
|
|
|
{ "Chicago", "Mostly Cloudy", "21°C", "81%", "1014.9 mb" },
|
|
|
|
{ "Delhi", "Haze", "33°C", "68%", "998.0 mb" },
|
|
|
|
{ "Dhaka", "Haze", "32°C", "64%", "996.3 mb" },
|
|
|
|
{ "Houston", "Cloudy", "23°C", "100%", "1014.2 mb" },
|
|
|
|
{ "Istanbul", "Mostly Cloudy", "27°C", "61%", "1011.2 mb" },
|
|
|
|
{ "Jakarta", "Fair", "28°C", "71%", "1009.1 mb" },
|
|
|
|
{ "Jerusalem", "Sunny", "35°C", "17%", "1005.8 mb" },
|
|
|
|
{ "Johannesburg", "Fair", "18°C", "16%", "1020.0 mb" },
|
|
|
|
{ "Karachi", "Mostly Cloudy", "29°C", "76%", "998.0 mb" },
|
|
|
|
{ "Lagos", "Mostly Cloudy", "27°C", "86%", "1014.6 mb" },
|
|
|
|
{ "Lima", "Cloudy", "17°C", "83%", "1017.3 mb" },
|
|
|
|
{ "London", "Cloudy", "23°C", "71%", "1023.0 mb" },
|
|
|
|
{ "Los Angeles", "Fair", "21°C", "78%", "1011.9 mb" },
|
|
|
|
{ "Madrid", "Fair", "32°C", "35%", "1020.0 mb" },
|
|
|
|
{ "Mexico City", "Partly Cloudy", "14°C", "79%", "1028.5 mb" },
|
|
|
|
{ "Moscow", "Partly Cloudy", "24°C", "54%", "1014.2 mb" },
|
|
|
|
{ "Mumbai", "Haze", "28°C", "77%", "1003.0 mb" },
|
|
|
|
{ "New York City", "Sunny", "21°C", "80%", "1014.2 mb" },
|
|
|
|
{ "Paris", "Partly Cloudy", "27°C", "57%", "1024.4 mb" },
|
|
|
|
{ "Reykjavík", "Mostly Cloudy", "11°C", "76%", "998.6 mb" },
|
|
|
|
{ "Rio de Janeiro", "Fair", "24°C", "64%", "1022.0 mb" },
|
|
|
|
{ "Rome", "Fair", "32°C", "18%", "1014.2 mb" },
|
|
|
|
{ "Saint Petersburg", "Mostly Cloudy", "18°C", "55%", "1014.6 mb" },
|
|
|
|
{ "São Paulo", "Fair", "19°C", "53%", "1024.0 mb" },
|
|
|
|
{ "Seoul", "Cloudy", "26°C", "87%", "1012.2 mb" },
|
|
|
|
{ "Shanghai", "Fair", "32°C", "69%", "1009.1 mb" },
|
|
|
|
{ "Singapore", "Mostly Cloudy", "29°C", "73%", "1009.1 mb" },
|
|
|
|
{ "Tehran", "Fair", "36°C", "14%", "1013.2 mb" },
|
|
|
|
{ "Tokyo", "Mostly Cloudy", "28°C", "67%", "1009.1 mb" },
|
|
|
|
{ "Zurich", "Mostly Cloudy", "23°C", "44%", "1023.7 mb" }
|
|
|
|
};
|
|
|
|
|
|
|
|
const int lastItem = int(sizeof(weather) / sizeof(weather[0])) - 1;
|
|
|
|
|
2017-08-27 09:50:30 +02:00
|
|
|
for (int i = 0; i <= lastItem; i++)
|
2017-07-18 23:50:51 +02:00
|
|
|
{
|
2017-09-20 16:56:20 +02:00
|
|
|
FStringList line (&weather[i][0], &weather[i][0] + 5);
|
2017-07-18 23:50:51 +02:00
|
|
|
listView->insert (line);
|
|
|
|
}
|
|
|
|
|
|
|
|
// Quit button
|
|
|
|
FButton* Quit = new FButton (this);
|
|
|
|
Quit->setGeometry(24, 16, 10, 1);
|
|
|
|
Quit->setText (L"&Quit");
|
|
|
|
|
|
|
|
// Add some function callbacks
|
|
|
|
Quit->addCallback
|
|
|
|
(
|
|
|
|
"clicked",
|
|
|
|
F_METHOD_CALLBACK (this, &Listview::cb_exitApp)
|
|
|
|
);
|
2017-08-01 00:56:12 +02:00
|
|
|
|
|
|
|
listView->addCallback
|
|
|
|
(
|
|
|
|
"clicked",
|
|
|
|
F_METHOD_CALLBACK (this, &Listview::cb_showInMessagebox)
|
|
|
|
);
|
2017-07-18 23:50:51 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------
|
2017-09-11 03:06:02 +02:00
|
|
|
Listview::~Listview() // destructor
|
2017-07-18 23:50:51 +02:00
|
|
|
{ }
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
void Listview::onClose (FCloseEvent* ev)
|
|
|
|
{
|
|
|
|
int ret = FMessageBox::info ( this, "Quit"
|
|
|
|
, "Do you really want\n"
|
|
|
|
"to quit the program ?"
|
|
|
|
, FMessageBox::Yes
|
|
|
|
, FMessageBox::No );
|
|
|
|
if ( ret == FMessageBox::Yes )
|
|
|
|
ev->accept();
|
|
|
|
else
|
|
|
|
ev->ignore();
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
void Listview::cb_exitApp (FWidget*, data_ptr)
|
|
|
|
{
|
|
|
|
close();
|
|
|
|
}
|
|
|
|
|
2017-08-01 00:56:12 +02:00
|
|
|
//----------------------------------------------------------------------
|
|
|
|
void Listview::cb_showInMessagebox (FWidget* widget, data_ptr)
|
|
|
|
{
|
2017-08-06 17:02:19 +02:00
|
|
|
FListView* listView = static_cast<FListView*>(widget);
|
2017-08-01 00:56:12 +02:00
|
|
|
FListViewItem* item = listView->getCurrentItem();
|
|
|
|
FMessageBox info ( "Weather in " + item->getText(0)
|
|
|
|
, " Condition: " + item->getText(1) + "\n"
|
|
|
|
"Temperature: " + item->getText(2) + "\n"
|
|
|
|
" Humidity: " + item->getText(3) + "\n"
|
|
|
|
" Pressure: " + item->getText(4)
|
|
|
|
, FMessageBox::Ok, 0, 0, this );
|
|
|
|
info.show();
|
|
|
|
}
|
2017-07-18 23:50:51 +02:00
|
|
|
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
// main part
|
|
|
|
//----------------------------------------------------------------------
|
|
|
|
|
|
|
|
int main (int argc, char* argv[])
|
|
|
|
{
|
2017-09-19 06:18:03 +02:00
|
|
|
// Create the application object
|
2017-07-18 23:50:51 +02:00
|
|
|
FApplication app(argc, argv);
|
|
|
|
|
2017-09-19 06:18:03 +02:00
|
|
|
// Create main dialog object
|
2017-07-18 23:50:51 +02:00
|
|
|
Listview d(&app);
|
2017-08-01 00:56:12 +02:00
|
|
|
d.setText (L"Weather data");
|
2017-07-18 23:50:51 +02:00
|
|
|
d.setGeometry (int(1 + (app.getWidth() - 37) / 2), 3, 37, 20);
|
|
|
|
d.setShadow();
|
|
|
|
|
2017-09-19 06:18:03 +02:00
|
|
|
// Set dialog d as main widget
|
2017-07-18 23:50:51 +02:00
|
|
|
app.setMainWidget(&d);
|
2017-09-19 06:18:03 +02:00
|
|
|
|
|
|
|
// Show and start the application
|
2017-07-18 23:50:51 +02:00
|
|
|
d.show();
|
|
|
|
return app.exec();
|
|
|
|
}
|