gelldur / Kino-Time-Tracker

Kino Time Tracker
1 stars 0 forks source link

Dodawanie tasków w aplikacji #27

Closed gelldur closed 11 years ago

gelldur commented 11 years ago

Teraz chciałbym wpisać w naszym głównym oknie task jaki chce wykonać i go wystartować.

gelldur commented 11 years ago

Related to Issue #34

maciej-nowak commented 11 years ago

Okej, klikamy Start, i co z tym dalej? Nie dodajemy go do bazy danych, bo to juz zostalo zrobione w innym issue. Mam dodac ten task do okienka current activities?

gelldur commented 11 years ago

NIe nie no właśnie dodawanie do bazy jest ale nie ma połączenia okienko -> do bazy danych.

Twoim zadaniem jest jak wcisniesz start to zapisujesz do bazy danych co trzeba jak wciśniesz stop to aktualizujesz to co jest już w bazie danych (metoda update w TaskManager)

maciej-nowak commented 11 years ago

A to czaje, wlasciwie jedyne co musze zrobic to oprogramowac przycisk, uzywajac gotowych metod. Yhym

gelldur commented 11 years ago

Dokładnie tak nic więcej nie musisz w okienku robić jedynie obsłużyć start stop no i małą ukrytą rzecz jak jest start to zamienia się na stop i na odwrót :)

maciej-nowak commented 11 years ago

No okej, wydaje mi sie ze spelnia to swoje zadanie, przy kliknieciu zmienia tekst na STOP, jednak przy ponownym kliknieciu, zamiast zmieniac tekst na START, to wywala program. Dlaczego? Co zrobilem nie tak?

maciej-nowak commented 11 years ago

Okej, doszedlem do tego co jest nie tak, chodzi o tworzenie obiektu typu Task, zle to robie, wiec sila rzeczy to nie wie co powinno updateowac, wiec wywala, narazie brakuje funkcjalnosci updatu. Hmm w jaki sposob moge to rozwiazac?

Do ifa z update, dorzucam mu cos takiego: Task *task = new Task(task->getId(), task->getTitle(), task->getDescription(), task->getStartTime(), task->setEndTime());

ale nie pasuja mu parametry, konkretnie ostatni, a gdy go zmienie na geta np albo na currentTime to mu nie pasuja wszystkie

no new tu nie pasuje oczywiscie, ciagle nei wiem jak to logicznie zrobic. przy kliknieciu tworze taska, jesli przycisk ma start, to tego taska uzupelniam danymi, jesli przycisk ma stop to powinienem zupdatetowac tego taska ktorego wlasnie przed chwila uzupelnilem danymi, a tymczasem updatuje pustego taska. w jaki sposob moge mu przekazac tego taska? bo wydaje sie bezsensu tworzyc pustego taska, task powinien byc tworzony tylko w ifie, ale wtedy nie jest on widoczny w drugim ifie.

gelldur commented 11 years ago

Masz 2 zmienne task tak samo nazwanę przed pierwszym ifem i w pierwszym ifie. Więc do drugiego if'a przekazujesz NULL.

Generalnie słaby pomysł do spr czy jest start czy stop porównanie stringów jest nie uniwersalne już lepiej wykorzystaj jakąś falgę boolowską czyli zmienną prywatną która np. isWorking = true jeżeli wcisnąłeś start i stop w przeciwnym przypadku.

Albo inne lepsze jak dla mnie podejście w prywatnym polu trzymasz currentTask i jeżeli jest on NULL to oznacza ,że nie masz żadnego taska obecnie więc jak startujesz to go tworzysz i przypisujesz do tej zmiennej. Następnie go updejtujesz i ustawiasz na NULL jak kończysz pracę nad nim.

Inne podejście to zmienna statyczna o zakresie tylko w tej metodzie reszta podobnie jak w przypadku wyżej ale to nam daje pewne ograniczenia ale dużo większą hermetyczność no ale to rozw. jest brzydsze :D więc polecam to rozwiązanie wyżej.

gelldur commented 11 years ago

zobacz sobie tutaj ja w ciągu 2 min skomentuje kod https://github.com/gelldur/Kino-Time-Tracker/commit/b31775be57478b6186c05cc0c7e8f174ff48b79e

maciej-nowak commented 11 years ago

Zamykam, wydaje mi sie ze alles gut

gelldur commented 11 years ago

no no no niestety gdybyśmy nie mieli dobrych praktyk to bym nie otworzył no ALE :)

  1. nazwy zmiennych pól
  2. Czemu task manager jest trzymany w polu raczej myślę to zbędne. Pamiętamy by wykorzystywać to co nam jest potrzebne no chyba ,że storzenie tego czegoś jest skomplikowane ale w tym wypadku wręcz trywialne.

Więc do poprawki te kosmetyczne zmiany.

maciej-nowak commented 11 years ago

Teraz chyba juz ok :)

gelldur commented 11 years ago

właściwie chyba mogę być uperdliwy :) ale Ci nie reotworzę bo są święta :) ustaliliśmy:

  1. Pola w klasie poprrzedzamy przez m_
  2. Nie używamy bez sensowanych nazw jak b24 czy "c" :) nie wiem jak nie ma pomysłu to tak samo jak klasę można nazwać tylko ,że zaczynasz z małej np taskManager (nie mówie tutaj o kodzie testowym)

Ale to jak coś na przyszłość. (Przy okazji ten sam błąd z QCompleterem :))