Commit 296883a4 by Szeberényi Imre

w0

parents
Közös alkönyvtárak: lab_13/img és lab_13_meg/img
diff -upN lab_13/ladaapp.cpp lab_13_meg/ladaapp.cpp
--- lab_13/ladaapp.cpp 2015-04-26 10:28:01.056830000 +0200
+++ lab_13_meg/ladaapp.cpp 2015-04-26 10:03:17.296830000 +0200
@@ -14,6 +14,7 @@
#include <Wt/WIntValidator>
#include <Wt/WPushButton>
#include <Wt/WComboBox>
+#include <Wt/WSound>
#include "ladawidget.h"
#include "tortadiagram.h"
@@ -27,6 +28,10 @@ class LadaApplication : public WApplicat
LadaWidget *ladak; /**< A ladak tablazatos formaban a weboldalon. */
WLineEdit *tomegLine; /**< Tomeg beviteli mezo. */
// a lokalis valtozok meg bovulhetnek
+ WLineEdit *maxLine; /**< Max beviteli mezo. */
+ WComboBox *combo; /**< combo beviteli mezo. */
+ WSound *bumm; /**< Hangeffekt. */
+
/** Segedfuggveny: Szovegmezo tartalmanak int-te konvertalasa.
*/
@@ -42,10 +47,12 @@ class LadaApplication : public WApplicat
*/
void hozzaad() {
int tomeg = lineToint(tomegLine);
- int max = 10; // it kell kiolvasnia a max beviteli mezot
+ int max = lineToint(maxLine);
std::ostringstream ss;
ss << ++db << ". lada (" << tomeg << ";" << max << ")";
+ size_t elotte=ladak->magassag();
ladak->hozzaad(*new Lada(ss.str(), tomeg, max));
+ if (ladak->magassag() != elotte+1) bumm->play();
}
/** A tomeg szovegmezo valtozasanak esemenykezeloje. Ujra kell rajzolni
@@ -56,6 +63,16 @@ class LadaApplication : public WApplicat
}
// Celszeruen Ide kerul a comboBox (nyelvvalaszto) esemenykezeloje
+ void nyelvValtozott() {
+ switch(combo->currentIndex()) {
+ case 0:
+ setLocale("hu");
+ break;
+ case 1:
+ setLocale("en");
+ break;
+ }
+ }
public:
/** Konstruktor.
@@ -95,26 +112,25 @@ LadaApplication::LadaApplication(const W
WPushButton* button = new WPushButton(WString::tr("HOZZAAD"), panel->elementAt(2,0));
// Ide jon majd a tobbi felhasznaloi elem: a masik beviteli mezo
-// label = new WLabel(WString::tr("MAX"), panel->elementAt(1,0)); // felirat (Max)
-// ...
+ label = new WLabel(WString::tr("MAX"), panel->elementAt(1,0)); // felirat (Max)
+ maxLine = new WLineEdit("10", panel->elementAt(1,0));// egysoros editbox
+ maxLine->setValidator(new WIntValidator(1, 200)); // 0 es 200 kozott lehet az erteke
+ label->setBuddy(maxLine); // a felirat melle teszuk
// ide jon a combobox letrehozasa
-// combo = new WComboBox(panel->elementAt(3, 0)); // panel 3. sora
-// ..
-
-
-
-
+ combo = new WComboBox(panel->elementAt(3, 0)); // panel 3. sora
+ combo->addItem("hu"); // kitöltjük 0. = hu
+ combo->addItem("en"); // 1. = en
+ combo->setCurrentIndex(0); // 0. kivalasztása
+ combo->activated().connect(this, &LadaApplication::nyelvValtozott); // eseménykezelő bekötese
// Ide jon a tortadiagram letrehozasa
-
-
-
-
+ new Tortadiagram(ladak, layout->elementAt(0,2));
// esemenykezelo fuggvenyek bekotese
button->clicked().connect(this, &LadaApplication::hozzaad); // nyomogomb megnyomasa
tomegLine->keyWentUp().connect(this, &LadaApplication::tomegValtozott); // billentyu felengedese az editboxban
+ bumm = new WSound("img/boom23.mp3");
}
/*
diff -upN lab_13/ladaapp_en.xml lab_13_meg/ladaapp_en.xml
--- lab_13/ladaapp_en.xml 1970-01-01 01:00:00.000000000 +0100
+++ lab_13_meg/ladaapp_en.xml 2015-04-26 08:05:04.668830000 +0200
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <comment>
+/// \file
+/// \brief ladaaapp nyelvi lokalizacioja.
+ </comment>
+ <messages>
+ <message id='TOMEG'>Mass:</message>
+
+ <message id='MAX'>Max:</message>
+
+ <message id='GYENGE'>Weak:</message>
+
+ <message id='EROS'>Strong:</message>
+
+ <message id='HOZZAAD'>Add</message>
+
+ </messages>
+
diff -upN lab_13/ladaapp.xml lab_13_meg/ladaapp.xml
--- lab_13/ladaapp.xml 2015-04-26 10:28:01.056830000 +0200
+++ lab_13_meg/ladaapp.xml 2015-04-26 08:05:04.668830000 +0200
@@ -6,6 +6,12 @@
<messages>
<message id='TOMEG'>Tömeg:</message>
+ <message id='MAX'>Max:</message>
+
+ <message id='GYENGE'>Gyenge:</message>
+
+ <message id='EROS'>Erős:</message>
+
<message id='HOZZAAD'>Hozzáad</message>
</messages>
diff -upN lab_13/ladawidget.cpp lab_13_meg/ladawidget.cpp
--- lab_13/ladawidget.cpp 2015-04-26 10:28:01.040830000 +0200
+++ lab_13_meg/ladawidget.cpp 2015-04-26 08:05:04.668830000 +0200
@@ -11,7 +11,17 @@
#include "ladawidget.h"
using namespace Wt;
-LadaWidget::LadaWidget(WContainerWidget* parent) : WTable(parent) {}
+LadaWidget::LadaWidget(WContainerWidget* parent) : WTable(parent),
+ WStandardItemModel(parent) // StandardItemModell inic is kell !
+{
+ // megjelenitendo adatok létrehozása
+ WStandardItemModel::insertColumns(WStandardItemModel::columnCount(), 2); // ket oszlopa lesz
+ WStandardItemModel::insertRows(WStandardItemModel::rowCount(), 2); // es ket sora
+ WStandardItemModel::setData(0, 0, WString(tr("EROS"))); // EROS ladak sora
+ WStandardItemModel::setData(0, 1, 5);
+ WStandardItemModel::setData(1, 0, WString(tr("GYENGE"))); // GYENGE ladak sora
+ WStandardItemModel::setData(1, 1, 0);
+}
void LadaWidget::hozzaad(Lada l) {
rarak(l);
@@ -37,6 +47,8 @@ void LadaWidget::rajzol(int t) {
}
l->setImage(kep);
+ WStandardItemModel::setData(0, 1, eros);
+ WStandardItemModel::setData(1, 1, gyenge);
}
}
diff -upN lab_13/ladawidget.h lab_13_meg/ladawidget.h
--- lab_13/ladawidget.h 2015-04-26 10:28:01.040830000 +0200
+++ lab_13_meg/ladawidget.h 2015-04-26 08:05:04.672830000 +0200
@@ -8,12 +8,13 @@
#include <Wt/WContainerWidget>
#include <Wt/WTable>
+#include <Wt/WStandardItemModel>
#include "ladak.h"
/** A ladakbol epitett oszlopot reprezentalo webes kezeloelem (widget).
*/
-class LadaWidget : public Wt::WTable, public LadaOszlop {
+class LadaWidget : public Wt::WTable, public Wt::WStandardItemModel, public LadaOszlop {
public:
/** Konstruktor.
*/
Közös alkönyvtárak: lab_13/resources és lab_13_meg/resources
Közös alkönyvtárak: lab_13/.svn és lab_13_meg/.svn
#
cmake_minimum_required(VERSION 2.8)
#
SET(WT_PROJECT_TARGET ladaapp.wt)
SET(WT_PROJECT_SOURCES
ladaapp.cpp
ladawidget.cpp
ladak.cpp
tortadiagram.cpp
)
set (CMAKE_CXX_FLAGS "-Wall -pedantic -DBOOST_SIGNALS_NO_DEPRECATION_WARNING")
SET (WT_CONNECTOR "wthttp" CACHE STRING "Connector used (wthttp)")
INCLUDE_DIRECTORIES(/usr/local/include)
ADD_EXECUTABLE(${WT_PROJECT_TARGET} ${WT_PROJECT_SOURCES})
TARGET_LINK_LIBRARIES(${WT_PROJECT_TARGET} ${WT_CONNECTOR} wt boost_signals)
find_package(Doxygen)
if(DOXYGEN_FOUND)
add_custom_target(doc
${DOXYGEN_EXECUTABLE} Doxyfile
COMMENT "Generating API documentation with Doxygen" VERBATIM
)
endif(DOXYGEN_FOUND)
This diff is collapsed. Click to expand it.
File added
#!/bin/bash
APPNAME=ladaapp.wt
DOCROOT=`pwd`
PATH_TO_SCRIPT=$(cd ${0%/*} && echo $PWD/${0##*/})
PREFIX=`dirname "$PATH_TO_SCRIPT"`
# Required until wthttp accepts a "--approot path" parameter
cd $PREFIX
echo appdir: $PREFIX
echo appname: $PREFIX/$APPNAME
echo docroot: $DOCROOT
$PREFIX/$APPNAME --docroot $DOCROOT --http-port 8080 --http-addr ::0 $@
/**
* \file
* \brief LadaApplication osztaly megvalositasa.
*/
#include <string>
#include <sstream>
#include <Wt/WApplication>
#include <Wt/WContainerWidget>
#include <Wt/WLabel>
#include <Wt/WTable>
#include <Wt/WLineEdit>
#include <Wt/WIntValidator>
#include <Wt/WPushButton>
#include <Wt/WComboBox>
#include "ladawidget.h"
#include "tortadiagram.h"
using namespace Wt;
/** A webalkalmazas osztaly.
*/
class LadaApplication : public WApplication {
int db; /**< Szamlalo a ladak egyedi cimkezesehez. */
LadaWidget *ladak; /**< A ladak tablazatos formaban a weboldalon. */
WLineEdit *tomegLine; /**< Tomeg beviteli mezo. */
// a lokalis valtozok meg bovulhetnek
/** Segedfuggveny: Szovegmezo tartalmanak int-te konvertalasa.
*/
int lineToint(WLineEdit *line) {
std::istringstream ss(line->text().narrow());
int i;
if (ss >> i)
return i;
return 1;
}
/** Uj lada hozzaadasa a szovegmezokben megadott adatoknak megfeleloen.
*/
void hozzaad() {
int tomeg = lineToint(tomegLine);
int max = 10; // it kell kiolvasnia a max beviteli mezot
std::ostringstream ss;
ss << ++db << ". lada (" << tomeg << ";" << max << ")";
ladak->hozzaad(*new Lada(ss.str(), tomeg, max));
}
/** A tomeg szovegmezo valtozasanak esemenykezeloje. Ujra kell rajzolni
* a ladakat, mert a pirositas valtozhat.
*/
void tomegValtozott() {
ladak->rajzol(lineToint(tomegLine));
}
// Celszeruen Ide kerul a comboBox (nyelvvalaszto) esemenykezeloje
public:
/** Konstruktor.
*/
LadaApplication(const WEnvironment& env);
};
/** Konstruktor. Letrehozza a widget-eket:
* - beviteli mezok a tomegnek es a terhelhetosegnek
* - nyomogomb uj lada hozzaadasara
* - LadaWidget a ladak oszlopanak kezelesere es tablazatos
* megjelenitesere.
*
* A nyomogomb clicked() esemenyet osszekapcsolja a hozzaad() metodussal.
* A tomeg mezo keyWentUp() esemenyet meg a tomegValtozott()-tal.
*/
LadaApplication::LadaApplication(const WEnvironment& env)
: WApplication(env), db(0) {
// a Wstring::tr a ladaapp.xml fajlbol veszi a stringeket
messageResourceBundle().use("ladaapp");
// letrehozunk egy tablazatot kulonbozo elemekkel
WTable* layout = new WTable();
root()->addWidget(layout); // ez lesz az alkalmazás fo ablaka
WTable* panel = new WTable(layout->elementAt(0,0)); // panel a beviteli mezokhoz
ladak = new LadaWidget(layout->elementAt(0,1)); // ladaoszlopot megjelenito widget
layout->elementAt(0,1)->setPadding(5); // csinositas
// beviteli panel kialakitasa (tomeg mezo, nyomogomb)
// label a panel 0. sor 0. oszlobpaba
WLabel* label = new WLabel(WString::tr("TOMEG"), panel->elementAt(0,0)); // felirat (Tomeg)
tomegLine = new WLineEdit("2", panel->elementAt(0,0));// egysoros editbox
tomegLine->setValidator(new WIntValidator(0, 200)); // 0 es 200 kozott lehet az erteke
label->setBuddy(tomegLine); // a felirat melle teszuk
// a nyomogombot pedig a 2. sor 0. oszlopaba tesszuk
WPushButton* button = new WPushButton(WString::tr("HOZZAAD"), panel->elementAt(2,0));
// Ide jon majd a tobbi felhasznaloi elem: a masik beviteli mezo
// label = new WLabel(WString::tr("MAX"), panel->elementAt(1,0)); // felirat (Max)
// ...
// ide jon a combobox letrehozasa
// combo = new WComboBox(panel->elementAt(3, 0)); // panel 3. sora
// ..
// Ide jon a tortadiagram letrehozasa
// esemenykezelo fuggvenyek bekotese
button->clicked().connect(this, &LadaApplication::hozzaad); // nyomogomb megnyomasa
tomegLine->keyWentUp().connect(this, &LadaApplication::tomegValtozott); // billentyu felengedese az editboxban
}
/*
* Alkalmazas osztaly peldanyositasa a megfelelo kornyezeti valtozokkal.
* Minden http kapcsolathoz (session) onallo peldany keletkezik.
*/
WApplication *createApplication(const WEnvironment& env) {
return new LadaApplication(env);
}
/*
* Foprogram.
* Mehgivja a WApplication osztaly WRun tagfuggvenyet.
* Ez minden sesson-hoz keszit egy LadaaApplication peldanyt
*/
int main(int argc, char **argv) {
return WRun(argc, argv, &createApplication);
}
<?xml version="1.0" encoding="UTF-8"?>
<comment>
/// \file
/// \brief ladaaapp nyelvi lokalizacioja.
</comment>
<messages>
<message id='TOMEG'>Tömeg:</message>
<message id='HOZZAAD'>Hozzáad</message>
</messages>
/**
* \file
* \brief LadaOszlop osztaly megvalositasa.
*/
#include "ladak.h"
bool LadaOszlop::elbir(int t, size_t i) const {
for (size_t j = 0; j < i; j++) {
t += oszlop[j].tomeg();
}
return oszlop[i].terhelheto()>=t;
}
void LadaOszlop::rarak(Lada l) {
for (int i=oszlop.size()-1; i>=0; i--) { //lentrol fel
if (!elbir(l.tomeg(),i)) { //keresunk gyenge ladakat
oszlop.erase(oszlop.begin()+i); //es toroljuk
}
}
oszlop.push_front(l); //tetejere kerul az uj
}
size_t LadaOszlop::magassag() const {
return oszlop.size();
}
Lada& LadaOszlop::operator[](size_t i) {
return oszlop[i];
}
/**
* \file
* \brief Lada es LadaOszlop osztaly deklaracioja
*/
#ifndef LADAK_H
#define LADAK_H
#include <deque>
#include <string>
/** Lada osztaly.
*/
class Lada {
std::string cimke_; /**< A lada felirata. */
int tomeg_; /**< A lada tomege. */
int terhelheto_; /**< A lada maximalis terhelhetosege. */
public:
/** Konstruktor.
*/
Lada(std::string cimke, int tomeg = 10, int max = 100)
:cimke_(cimke), tomeg_(tomeg), terhelheto_(max) {}
/** Visszaadja a lada tomeget.
*/
int tomeg() const { return tomeg_ ;}
/** Visszaadja a lada maximalis terhelhetoseget.
*/
int terhelheto() const { return terhelheto_; }
/** Visszaadja a lada szoveges cimkejet.
*/
std::string cimke() const { return cimke_; }
};
/** Egymas tetejere rakott ladakbol allo oszlop.
*/
class LadaOszlop {
std::deque<Lada> oszlop; /**< Az egymasra helyezett ladak (elso legfelul) */
public:
/** Megallapitja, hogy elbirja-e egy lada a terhet.
* @param t extra tomeg, amit az oszlop tetejere szeretnenk tenni
* @param i a lada indexe (0 a legfelsoe, size()-1 a legalsoe)
* @return true, ha az i indexu lada elbirja az osszes felette levot,
* plusz a parameterkent megadott t tomeget
*/
bool elbir(int t, size_t i) const ;
/** Uj ladat helyez az oszlop tetejere. Szimulalja a tul gyenge ladak
* megsemmisuleset alulrol kezdve.
* @param l masolata kerul az oszlop tetejere
*/
void rarak(Lada l);
/** Ladak szama az oszlopban. */
size_t magassag() const;
/** A ladak eleresere.
* @param i a lada indexe (0 a legfelsoe, size()-1 a legalsoe)
* @return az i indexu lada*/
Lada& operator[](size_t i);
};
#endif
/**
* \file
* \brief LadaWidget osztaly megvalositasa.
*/
#include <Wt/WContainerWidget>
#include <Wt/WLabel>
#include <Wt/WTable>
#include <Wt/WImage>
#include "ladawidget.h"
using namespace Wt;
LadaWidget::LadaWidget(WContainerWidget* parent) : WTable(parent) {}
void LadaWidget::hozzaad(Lada l) {
rarak(l);
rajzol(l.tomeg());
}
void LadaWidget::rajzol(int t) {
WTable::clear(); // toroljuk a megjelenitett ladakat
int eros = 0; // gyenge ladak szama
int gyenge = 0; // eros ladak szama
for (size_t i = 0; i < magassag(); i++) {
//lada info kiiras
WLabel *l = new WLabel((*this)[i].cimke(), elementAt(i,0));
//ha nem birja el a felette levoket, akkor piros ikon lesz
WImage *kep;
if (elbir(t,i)) {
kep = new WImage("img/chest.png");
eros++;
} else {
kep = new WImage("img/chest-red.png");
gyenge++;
}
l->setImage(kep);
}
}
/**
* \file
* \brief LadaWidget osztaly deklaracioja
*/
#ifndef LADAWIDGET_H
#define LADAWIDGET_H
#include <Wt/WContainerWidget>
#include <Wt/WTable>
#include "ladak.h"
/** A ladakbol epitett oszlopot reprezentalo webes kezeloelem (widget).
*/
class LadaWidget : public Wt::WTable, public LadaOszlop {
public:
/** Konstruktor.
*/
LadaWidget(Wt::WContainerWidget* parent = 0);
/** Uj lada hozzaadasa. Szimulalja az oszlop mukodeset: a nem elegendo
* terhelhetosegu ladak megsemmisulnek. A megjelenitesben az uj allapot
* tukrozodik.
*/
void hozzaad(Lada l);
/** Megjeleniti a ladakat. Pirossal jeloli azokat, amik nem birjak a
* megadott extra terhet.
* @param t extra tomeg, amit az oszlop tetejere szeretnenk tenni
*/
void rajzol(int t);
private:
};
#endif
/**
* \file
* \brief Tortadiagram osztaly megvalositas
*/
#include "tortadiagram.h"
using namespace Wt;
using namespace Wt::Chart;
/**
* Konstruktor.
*/
Tortadiagram::Tortadiagram(WStandardItemModel* model, WContainerWidget* parent)
: WPieChart(parent)
{
setModel(model); // beallitjuk a modellt
setLabelsColumn(0); // ez az oszlop lesz a felirat oszlopa
setDataColumn(1); // ez az oszlop lesz az adat
// tipus es hely megadasa
setDisplayLabels(Outside | TextLabel | TextPercentage);
// engedelyezzuk a 3D-t
setPerspectiveEnabled(true, 0.2);
// a 0. elemeit kiemeljuk
setExplode(0, 0.3);
resize(800, 300);
// margok beallitasa
setMargin(10, Top | Bottom);
setMargin(WLength::Auto, Left | Right);
}
/**
* \file
* \brief Tortadiagram osztaly deklaracioja
*/
#ifndef TORTADIAGRAM_H
#define TORTADIAGRAM_H
#include <Wt/WContainerWidget>
#include <Wt/WStandardItemModel>
#include <Wt/Chart/WPieChart>
/**
* Tortadiagram.
*/
class Tortadiagram : public Wt::Chart::WPieChart {
public:
Tortadiagram(Wt::WStandardItemModel* model, Wt::WContainerWidget* parent = 0);
};
#endif // TORTADIAGRAM_H
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 sign in to comment