Initial commit

This commit is contained in:
Filippo Gentile 2021-03-16 10:46:22 +01:00
commit da75a023e3
553 changed files with 61346 additions and 0 deletions

682
CHANGELOG Normal file
View File

@ -0,0 +1,682 @@
Current: (***STILL IN PROGRESS***) future 5.25.0
- Removed Lua scripting feature
ROLLINGSTOCK
- RS Import: show sheet index as 1-based
- RS Import: FixDuplicatesDlg fix not showing remaining item count in messagebox
- RS Import: FixDuplicatesDlg do not close if user selects Hide Fixed Items
- SessionStartEndRSViewer: new title Rollingstock Summary
- RollingstockManager: added toolbar action to show SessionStartEndRSViewer
ODT EXPORT:
- SessionRSExport: new P5 style, table contents are non-bold and sans serif now, except header row
- JobWriter: writeJob() fixed query not reset after use, now reset before binding again
STATIONS:
- LinesMatchModel: can free query after timer expires
- LinesSQLModel: on-demand model replacing old LinesMatchModel, LineObj live now inside LineStorage class, member of MeetingSession
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.24.0:
GENERAL
- Changed cmdline parameter 'test' to '--test' so in case a file is named 'test' we don't interpret it as cmdline parameter
- QFileDialog: set initial directory to Documents or Pictures
JOBS:
- EditStopDialog: fixed warning electrical engine on non electricfied line, wrong logic
ROLLINGSTOCK
- Fixed RS Import: tolerate office version 1.3 and fixed ods keys settings
- Rs Import: added default type and speed selection for model created from scratch
- RollingstockSQLModel: UTILS format right justify with '0' engine numbers to at least 3 digits
ODT EXPORT:
- changed '-Sg:' and '+Ag:' to translatable 'Cp:' and 'Unc:' removed +/- sign, made bold with new T1 text style
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.23.1:
ODT EXPORT:
- SessionRSExport: prevent overlapping border between table cells
- StationSheetExport: fixed wrong table-row termination and prevent overlapping borders
JOBS:
- fixed categories not translated because MeetingSession constructor is called before translations are loaded
now categories are loaded on-demand instead of cached in MeetingSession constructor
- StopModel: prevent setting departure = arrival on normal stops (at least 1 minute stop)
- StopModel: fixed wrong query always using default freight platform even for passengers
- StopEditor: prevent setting departure < arrival and on normal stops at least 1 minute
- StopEditor: holding shift while changing arrival doesn't update departure, without shift deparure follows arrival (stop duration is preserved)
- JobCategory: added HIGH_SPEED catecory (HSP)
- JobCategory: FAST_REGIONAL is abbreviated RF (instead of RV) and FREIGHT is abbreviated FRG (instead of FR)
- JobEditor: warn if user tries to set jobId to an already existent number
SETTINGS:
- Changed default JobCategory colors
- Default auto inster transit to true
- Bigger SettingsDialog size
SEARCHBOX:
- fixed weird bug sometimes not showing results, turns out that when re-using task we must mReceiver again
otherwise we don't receive result (thus results are not shown to the user) and the task deletes himself
while SearchResultModel still holds a reference to it causing memory corruption and sometimes also forever hanging on held-lock when stopping all task
MAINWINDOW:
- Renamed 'Save As' action to 'Save Copy As' because when saving a copy we keep editing original file, while with 'Save As' the user would expect to edit the new file
- Added warning label that tells user to create at least 1 line in session if there aren't lines and prevents showing QGraphicsView until 1 line is created
- New managing that goes through setCentralWidgetMode() and checkLineNumber(), tooltips and action are enabled/disabled in a central place
BACKGROUND_MANAGER
- Added new subfolder backgroundmanager
- New generic class BackgroundManager which is a central place to manage tasks
- RsChackerManager: new class to manage Rs Error Checking, tied to BackgroundManager
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.20.1:
DOXYGEN
- Added Doxygen documentation system to project. Now function must be documented!
METADATA:
- Added option key to hide/show dates in sheet export
- Ensure end date is not before start date
- MeetingInformationDialog: use QTextEdit instead of QPlainTextEdit in order to align text to center and use bold 18pt font to mimic ODT output
- MetadataManager: new function hasKey() to check presence without retriving value
JOBS:
- StopModel: uncoupleStillCoupledAtLastStop() fixed uncoupling in all stops instead of just the last one
- TrainAssetModel: fixed query wrong bind placeholders and table name
- EditStopDialog: removed redundant refreshData() calls after setStop() calls which internally already refreshes model
- EditStopDialog: refresh TrainAssetModel after retriving originalArrival from StopModel, otherwise it doesn't load properly
ODT EXPORT:
- JobWriter: fixed wrong styles in job asset table and rollingstock column
- JobWriter: new styles to fix overlapping borders in job asset table
- StationWriter: show also station short name if present
- ODF compliance: mimetype file must be the first in the zip archive
- OdtDocument: zip also images
- OdtDocument: added meta.xml metadata file with some informations and description of the session
- OdtDocument: added possibility to specify a title which will be stored in meta.xml
- OdtDocument: use Liberation Sans font for header/footer
- ShiftSheetExport: added logo picture and other meeting information in the cover page
- ShiftSheetExport: use Liberation Sand for shift name and meeting location
- removed function 'writeCellList()' from odtutils.h (use only writeCellListStart/End)
SETTINGS:
- Added option: SheetStoreLocationDateInMeta, default true, store meeting location and dates in sheets metadata
STATIONS:
- StationsMatchModel: fixed wrong parenthesis precedence in query leading to duplicates item shown if a station has multiple lines
UTILS
- ImageViewer: added info lablel showing text saved into image and size in px and cm
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.20.1:
JOBS:
- StopModel: removed some queries, now they are prepared only when needed
- StopModel: do not depend on StationsModel and validate platform (ex. platform 6 but station has only 5 platforms)
- Removed ShiftCombo class in favour of generic CustomCompletionLineEdit
- RSCoupleDialog: added legend box, explaining the meanings of RS colors
ROLLINGSTOCK:
- RS Import: allow custom importation like import only RS Models but no owners or viceversa. (Still to import RS you have to import also both Models and Owners)
- RS Import: custom options per Import Source (Currently ODS and TrainTimetable Session)
- ImportTask: fixed wrong suffix imported
- Duplicates: allow not to import one to avoid having to fake its name/number to only then pass and unselect
- RSImportedOwnersModel::clearDatabeseData(): removed in favour of MeetingSession equivalent function
- RSImportedRollingstockModel: format number according to RS type
- FixDuplicatesDlg: allow to go back to previous page
- RollingStockManager: removed UI file, all UI is now C++ based
- RollingStockManager: added 'Delete All Models' and 'Delete All Owners'
- RollingStockManager: allow to search for a RS and view it's plan instead of having to scroll and find it in the list
- RSJobViewer: fixed wrong owner name displayed
STATIONS:
- KmSpinBox: better focus on single sections, pressing '+' switches sections
- RailwayNodeModel: add at 1000 m (1 km) after highest km in line when adding new station
- StationsModel: prevent invalid default platform (like out of bound)
SESSION:
- rs_list.number NOT NULL, rs_models.suffix NOT NULL, rs_models.type NOT NULL, rs_models.sub_type NOT NULL
METADATA:
- Fixed memory leak, not deleting ImageMetaData::ImageBlobDevice, QPointer is weak, use std::unique_pointer
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.19.0:
UTILS:
- IQuittableTask: unified base class for QThreadPool worker tasks
SEARCHBOX:
- SearchEngine: moved to ISqlFKMatchModel, and use unified CustomCompletionLineEdit
SESSION:
- removed unused 'rs_view' sql view
- 'railways' table: renamed column 'km' to 'pos_meters', now position is expressed in meters to achieve a better precision
SQL CONSOLE:
- Moved files to /sqlconsole/ sub directory and splitted in multiple files
JOBS:
- StopModel: when propagating time shift, first shift all subsequent stops by 24 hours to avoid hitting UNIQUE constraint, then manually reset one by one
- StopModel: auto uncouple RS at end of job, and move uncoupled in last stop when adding a new stop after.
- JobPathEditor: allow multiple stops contiguous selection.
- StopModel: allow to toggle/set/unset transit on multiple stops at once
- StopEditor: use CustomCompletionLineEdit to choose station, restrict items to all stations of current line except from previous station
- JobManager: added 'Remove all Jobs' button
ROLLINGSTOCK:
- RS Import: IRsImportModel common base class now is a IPagedItemModel
- RS Import: allow to not import duplicates directly instead of having to choose a fake number and the set not to import.
- RS Import: allow to import from anothe session
- RS Import: use custom spinbox delegate for NewNumber column
- RollingstockManager: added 'Remove all rollingstock' button
STATIONS:
- Moved railway managing to sub directory /stations/manager/railwanode
- railwanode: new KmSpinBox delegate to edit station position with format like '12+186'
- StationManager: use custom spinbox delegate for platform/depots, do not allow negative values
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.18.0:
UTILS:
- CustomCompletionLineEdit: generic class to complete typing with a ISqlFKMatchModel
SESSION:
- MeetingSession: enable extended error codes in database for API return values
- Metadata: added centralized getter/setters
- MeetingInformationDialog: created dialog to fill metadata about location/days/associations etc
- MeetingSession: use QStandardPaths to locate settings file path
SHIFTS:
- ShiftsModel: removed in favour of on-demand ShiftSQLModel
- Shifts: jobshifts name NOT NULL
- ShiftBusyDlg: move query into ShiftBusyModel, do not depend on JobsModel
- ShiftGraph: change job shift by double clicking job line uses now ShiftCombo.
ROLLINGSTOCK:
- RollingstockModel: removed in favour of on-demand RollingstockSQLModel
- RSModelsModel: removed in favour of on-demand RSModelsSQLModel
- RSOwnersModel: removed in favour of on-demand RSOwnersSQLModel
- RS models: added 'suffix' column, UNIQUE(name,suffix)
- RSCouplingInterface: do not depend on RollingstockModel and do not manage coupled/uncoupled models
- MergeModelsDialog/MergeOwnersDialog: do not depend on external models
ERROR CHECKER:
- RsErrorTreeModel: do not depend on external models
JOBS:
- jobsegmets: added UNIQUE(jobId,num)
- stops: added UNIQUE(jobId, arrival) and UNIQUE(jobId, departure)
- JobPathEditor: removed Shift QComboBox in favour of CustomCompletionLineEdit with ShiftComboModel
- TrainGraphics: jobName() utility moved to JobCategoryName (in utils)
- JobPassesModel: store JobCategory to avoid using JobsModel
- RSListOnDemandModel: added on-demand model for EditStopDialog to list coupled/uncoupled rs
- RSProxyModel: do not depend on JobsModel
- TrainAssetModel: made on-demand
GRAPH:
- GraphManager: handle settings change internally
ODT EXPORT:
- ODT Export: give precedence to database metadata for header/footer
- JobWriter, SessionRSWriter, StationWriter: use less lists, instead write data directly into QXmlStreamWriter as soon as it is selected
STATIONS:
- StationsModel: used simplified() QString for user input, emit error messagebox if name already exist or station cannot be removed.
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.17.0:
- Started replacing QOds and QuaZip libs with bare libzip
- OdtDocument: use libzip instead of QuaZip
- OdtDocument: instead of creating the mimetype file in the temp directory now it's added directly to the zip archive
- SessionRSExport: export ODT sheet for session rs position at start/end
- SessionStartEndRSViewer: new window to view all RS position at start or end of session order by station/owner, managed by ViewManager
- Mainwindow: deleted unused action JobPlanner and added RsErrorsWidget action to toolbar and also SessionStartEndRSViewer
- SettingsDialog: added Sheet Export page, with header and footer settings, in future they will be session-specific
- ShiftGraph: added option to change job shift by double clicking job line and a dialog shows.
- JobPathEditor: (StopDelegate) replaced line type simbols with lightning svg icon (Electric: normal icon, Diesel lines: lightning with a diaglonal red bar), loading icon "app_path/icons/lightning.svg"
- Removed unused UI fine app/importrsdialog.ui replaced by RSImportWizard
- StationsModel: added columns DefaulPlatformFreight and DefaulPlatformPassenger, with DefaulPlatformDelegate that uses PlatformSpinBox (simple subclass)
- StopModel: when setting stop's station the platform resets to station's default platform for that job category
- TrainGraphics: removed enum Category replaced by JobCategory enum in utils headers
- MeetingSession: use new class JobCategoryName as context for translating categories
- Settings: job category colors are now accessed by index instead of one getter/setters for each category
- SettingsDialog: job category colors are now loop-based and grouped in Passenger/Non Passenger in a scroll area
- StopModel: fixed bug when deleting all job stops it didn't delete last remained segment causing errors and hiding the job in graph (it was trying to delete segment before deleting stop, failing)
- RS Error Checker: from settings now you can choose to start it when opening a file and when a job is edited
- Added common FileFormats class in 'utils/file_format_names.h' to translate file formats in file dialogs
- New Experimental RS Importer
- NSIS installer -> new registered file format *.ttt
- RS import: deleted old models and pages, created new ondemand models (data is loaded in small chunks),
it can import from ODS and in future also from other sessions,
you can filter out owners and models, assign custom names and numbers and match existing models/owners,
additionally it detects duplicates in models/owners/RS and impose user to fix them by setting a custom name
- MeetingSession: check if imported_rs_* tables are empty when opening database, if not give user chance to recover data (probably app crashed) and resume RS importation
- MeetingSession: new metadata table, now stores FormatVersion when creating a new session and checks it when opening
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.16.0:
NAME CHANGE: removed all occurences on the word FREMO because it might be covered by copyright:
- App NAME: FremoTimeTable -> TrainTimetable
- Project TARTGET: fremo_db_5 -> TrainTimetable
- class FremoSession -> MeetingSession
- class FremoAppSettings -> TrainTimetableSettings
- singleton getter macro FremoSettings -> AppSettings
- typedef for 'fremo_id' -> 'db_id'
- Removed the 'Fremo' alternative format in Save/Open/New dialogs (extension .fremo)
- Translations: fremo5_it.ts -> traintimetable_it.ts
- Changed strings when exporting (printing/printworker.cpp, shifts/shiftgraph/shiftgrapheditor.cpp)
Other Changes;
- REMOVED INCOMPLETE 'de' AND 'es' translations for now, they will be reintroduced when needed
- StationFreeRSViewer: added sort by 'Job A' and 'Job B' column to model,
it can be useful if searching for all RS uncoupled by the same job if multiple jobs uncouple at same time
- Mainwindow: changed title behaviour, now we explicitly set 'applicationDisplayName' and it is shown automatically in the title bar,
We don't set the title explicitly (otherwise we end with double 'Train Timetable', one set by us and one by Qt)
Removed 'Mainwindow' title from designer mainwindow.ui file.
We just set the 'windowFilePath' and reset it in 'closeSession()', this way it shows the stripped filename
- Mainwindow: removed member QString curFile and added to MeetingSession a member QString fileName
- Mainwindow: added menu File -> Properties to show file properties, in particular the full file path (not shown anymore in the title bar)
- info.h added build date constant
- Mainwindow: about dialog shows build date
- Started using string constants in info.h instead of repeating app display name
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.15.0:
- RSProxyModel: not anymore subclassing QSortFilterProxyModel with RollingstockModel as source
- RSProxyModel: loaded by RSCoupleDialog, detect Free RS in station, Unused RS, First used RS, possible wrong operations to remove.
- RSProxyModel: use background colors to immidiately recognize errors or informations
- RSCouplingInterface: when checking for a possible next couple operation to delete check only operations of current job
- EditStopDialog: don't ask for leaving an Engine coupled right after closing uncoupled dialog, instead ask only when Accepting EditStopDialog
- EditStopDialog: temp remove possibility to Cancel dialog
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.15.0:
- JobPathEditor: prevent context menu while editing stop
- RollingstockModel: experimental use of cached iterators
- RSModelsModel: shifted RS SubType by one: Now Electric is 1 (previously zero) and Zero is Invalid
- RSCouplingInterface: warn if coupling an Electric engine in a non-electric line
- StationSheetExport: bigger font point size in P4 style for highlighted Arrival/Departure
- EditStopDialog: FIXED BUG, wrong query for selecting max train speed, was removing uncoupled rollingstock of all jobs and stops instead of considering only stops before the current one and of course only of the current job
- StopsModel, EditStopDialog: check Arrival, set minimum accepted value to previous departure plus 1 minute
- EditStopDialog: use originalArrival for getting train speed instead of UI QTimeEdit value because the latter may be changed by the user and might be after the next stop
- EditStopDialog: renamed onAccepted() slot to normal function saveDataToModel(), directly called in done() instead of connecting to slot
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.14.0:
- StopModel: removed hack aboutToEditCoupling(), startStopEditing() now is called directly from RSCouplingInterface whit bonus thath if from EditStopDialog user opens coupling dialog but doesn't modify couplings, the JobPathEditor is not marked as edited
- StopModel: reload of stops on revertChanged() is now done internally
- StopModel: when editing arrival/departure/platform/transit/description now station is also marked for update
- StopModel: removed q_fixPlatform, more correct platform fix in setStation_intenal and just reusing q_setPlatform
- EditStopDialog: recalculate platform on station change
- StationsModel: don't allow negative numberf for platform/depot count. Ensure station has at least 1 platform (main or depot but at least 1)
- SearchEngine: more efficent, store also JobCategory instead of asking twice per row the category from JobsModel (which involves a QHash lookup)
- StationFreeRSViewer: added widget/model to view free RS at a given time in a given station
- StationFreeRSViewer: model can sort by column (but only ascending order)
- ViewManager: fix bug, didn't connect RS removed signal
- StationsModel: fixed possible memory leak, when removing line from all stations it didn't delete JobStops. (Luckily they should be already deleted by then because of FK constraint)
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.13.1:
- StopsModel: fix BUG last station not setting rw_node in 'setStation()' (q_getRwNode query called before setting s.stationId -> now uses 'stId' function argument directly)
- StopModel: warn if Last stop is set Transit or TransitLineChange in the database
- StopModel: fix BUG if removing Last stop of job and the previous one was transit now becoming the new Last stop it also unsets the 'transit' flag
- FremoSession: if disconnecting from database returns SQLITE_BUSY (db is still used somewhere) re-prepare queries and abort closing
- FremoSession: new enum DB_Error to get spcific open/new/close db errors
- Mainwindow: show messagebox when try to close database while busy
- Main: wait 10 secs for threapool to finish before closing
- SearchEngine: new experimental Async Mode
- Rs Errors Checker: ported from raw QThread to QThreadPool
- Rs Errors: deprecated and removed RsErrorsModel in favor of RsErrorTreeModel
- Rs Errors: fixed and update translations
- Rs Errors: added check for 'Rs not uncoupled at the end of the job' also when coupling twice.
- Rs error check: added possibility to check only specific RS instead of check all of them
- JobPathEditor: moved rsToUpdate to StopModel
- JobPathEditor: when saving or discarding send rsToUpdate to ViewManager and to background error checker for specific check.
- RSJobViewer: removed call to adjustSize() in updatePlan()
- RSJobViewer: moved data to new model RsPlanModel
- RSJobViewer: do not update plan if only info (model, number, owner) changed ('updateInfo()')
- RSJobViewer: added context menu with 'Show in JobEditor' action
- RsErrorsWidget: fixed context menu coordinates (mapToGlobal() must be called from viewport)
- Added file utils/worker_event_types.h as a centralized place for custom QEvent::Type enumeration
- rs_models: added 'sub_type' column for engine type (Steam, Diesel, Electric)
- RSModelsModel: added SubType column with delegate
- ShiftGraph: removed QGraphicsSimpleText items for hour labels. Now they are drawn directly in scene 'drawBackground()', more efficent
- ShiftGraph: removed hack to manually update the view on graph option change. It's enough to call QGraphicsScene::invalidate(sceneRect) passing the whole scene rect.
- myMessageHandler: custom message handler now guard QTextStream with a QMutexLocker, seems to fix crashes in QDebug destructor
- JobPathEditor: moved stationToUpdate logic to StopModel; Now involved StationJobView are updated when saving/discarding job changes
- StationJobView: using new StationPlanModel, added possibility to show JobEditor selecting the stop.
- ShiftViewer: using new model ShiftJobModel, added possibility to show job in JobEditor.
- SearchEngine: fixed bug not resetting query results in only partial result shown
- JobPathEditor: fixed in Mainwindow that JobPathEditor was enabled when opening a file
- JobPathEditor: fixed still enabled after current job was removed
- JobPathEditor: when Job has less than 2 stops but user doesn't want to remove it we give a second chance, not closing still editing
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.13.0:
- StopModel: auto insert transit is now faster because instead of calling 'begingInsertRows()' and 'setStation()' for each transit
we now do a single cumulative insert and then use 'setStation_intenal()' that skips dataChanged() and other stuff
- FremoSession: use database::enable_foreign_keys() instead of executing PRAGMA in openDB() and createNewDB()
- New Feature: initial experimental implementation of background checker for rollingstock
- Fix: workaround QT-BUG, QDockWidget doesn't dock anymore if closed whie floating, install event filter and re-dock it manually when closed. See mainwindow.cpp
- Mainwindow: added RS Errors dock in Top/Bottom areas, allow Job Dock to use all vertical space when RS Errors dock is docked at bottom.
- BUG FIX ShiftModel: setData() and data() checked idx.column() >= 0 -> return false (Always executed). Changed to idx.column() > 0 (without equal)
- ShiftModel: print warning when query returns error code
- SQLite: print warning if library is not thread-safe
- RSCouplingInterface: fix QMessageBox No/Yes inverted actions
- RSCouplingInterface: fix query select only one next RS operation and of the same job
- ViewManager: possible to highlight a specific stop on JobPathEditor (both on current or on newly opened)
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.12.1:
- StopModel: prevent setting transit if there are coupling operations, inform user with QMessageBox
- Moded ColorView from Settings to Utils subdirectory
- Updated translations
- Changed all models to use enum NCols in columnCount
- StationManager: size 550x500
- StationsModel: user can choose color for main platforms per each station, chosing white (#FFFFFF) gets back to defult color, added ColorDelegate
- FremoSettings: auto insert transits defaults to false (disabled)
- JobSheetExport, StationSheetExport: transit are in italic
- StopModel: removes old transits before adding new ones
- StationSheetExport: use 'Dep' instead of 'Depot' because it's shorter
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.11.0:
- ShiftSheetExport: added header with {text \tab \tab Page Number}, mirrored for left pages {Page Number \tab \tab text}
- ShiftSheetExport: added footer with text
- StopModel: fix transit was always set to TransitLineChange when using context menu
- ViewManager: fix Show Next/Prev Segment when there are 2 segment in the same line
- StopModel: added backup/restore with new tables (old_jobsegments, old_stops, old_coupling)
- JobPathEditor: moved category/jobId/shiftId logic to StopModel
- JobPathEditor: is now EditPermission free
- StationManager: is now EditPermission free
- ShiftManager: is now EditPermission free
- ViewManager: is now EditPermission free
- Deleted EditPermission and EditorManager
- RollingstockManager: smaller margins, removed button box
- RollingstockModel: fix bug, not able to create first rollingstock
- Fix Crash on closing: JobPathEditor tried to check a shift after database was closed
- Fix JobPathEditor: if job has less than 2 stops (+ AddHere) and chooses to save changes but not to delete job now changes are committed to db
- Feature: now is possible to edit multiple things at the same time, like adding rollingstock while editing a job
- JobManager: can now create new job and delete selected job
- JobPathEditor: translate 'Line %1'
- Moved TrainGraphics::Category enum to independent JobCategory enum in utils/types.h so there is no need to include the whole traingraphics.h (removed include from fremosession.h)
- StopModel: default stop time is now category specific, if it's 0 minutes the stop is trasformed into Transit
- EditStopDialog: fixed bug not changing station if edited from there
- TrainGraphics: removed unused query q_selectStops
- ViewManager: removed slot onStAdded, when a station is created it isn't in any line so no need to redraw jobs
- StationsModel: new signal 'stationNameChanged()' to separate name/short name changes from platform/depots changed, updated ViewManager, JobsModel, ShiftGraphHolder and StationLayer to use this signal instead of 'stationModified()'
- GraphManager: redraw names in StationLayer if current line is modified
- StationObj: JobStop stores stopId to avoid duplicates in shadow stops
- LinesModel: update line when station is added or removed
- LineStationsModel, StationLinesModel: update line if user changed station km
- LinesModel: stations platform now have z value of -1 so they stay below jobs and labels
- TrainGraphics, StationObj::JobStop: labels now have z value of +1 so they stay above jobs and platforms
- SQLViewer: replaced QStandardItemModel with custom SQLResultModel.
- SQLConsole: new feature, timed query execute every interval and results blink in red to notify update
- StopModel: transit are set to 0 minutes stop time, and when switching back from transit stop time becomes default for that job category but at least 1 minute
- StopModel: fixed bug trying to destroy segment before setting to NULL references to it -> Foreign Key prevented deletion.
- StopModel: fixed bug resetting otherSegment without resetting also other_rw_node -> removed query q_resetStopNextSeg in favour of setNextSeg()
- StopModel: fixed bug resetting next line may cause two separate segment adjacent of the same line because it break the loop too early.
- StopModel: fixed bug transit type was inverted on saving
- JobPathEditor: rename slot 'onViewMenu' to 'onContextMenu'
- StopEditor/StopDelegate: now transit are editable too, only arrival box is shown
- EditStopDialog: on transits disable Departure box and Edit Coupled/uncoupled RS.
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.10.0:
- Changed data() function on many item models to return also on Qt::EditRole so when user edits a cell it's previous value is shown instead of clearing cell contents
- RSImportWizard: experimental import wizard for rollingstock, almost working
- JobSheetExport: smaller font on job_stops and wider column A of job_summary
- Fixed crash: when no line selected in graph StationLayer tried to retrive station names of a null LineObj* pointer. This prevented the creation of new files because new files have no line yet
- StationLayer: ensure stations names are update when changing line by explicitly calling update()
- LinesModel: now lines can be non-electric or electric
- LinesModel: prevent line removal only if there are jobs on that line
- JobsModel: fix job removal, must delete stops before segments not after
- DB: added UNIQUE constraint to railways table on (lineId, stationId)
- DB, StopsModel: now stops table registers also curent and next railway node to prevent user removing railway nodes (uses foreign key restrict)
- SQLite version 3.29
- JobsModel: fix foreign key preventing changing jobId -> added ON UPDATE CASCADE to stops and jobsegmets
- StationLinesModel, LineStationsModel: use query error codes to check if there is already that station in that line to avoid duplicates instead of a separate query
- TrainGraphics: fixed bug, when setting a new id old stop labels in stations weren't erased so you ended up with multiple labels
- ShiftGraph: center job name, fix job line height not constant
- Removed old RSImportDialog in favour of the new RSImportWizard
- Updated translations
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.9.1:
- EditStopDialog: Major refactor of coupling/uncoupling
- EditStopDialog: Added logic to remove errors of RS coupld/uncoupled twice
- EditStopDialog: Removed queries but not q_GetTrainSpeed
- EditStopDialog: removed button to show all RS, now it updates automatically
- Sheets: Now odt sheets are translatable
- StationLayer: fixed bug not refreshing on when station name changed
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.9.0:
- ShiftGraph: shift name labels centered horizontally and automatically add the word Shift -> 'Shift %name%' in ShiftGraph and Shift Sheet
- Job Sheet, Station Sheet, ShiftSheet: column Binario -> Bin, to save space
- Station Sheet: arrival column in bold for Arrival row, Departure in bold for Departure row
- Removed files 'rsnumber.h' and '.cpp', now RS numbers are fixed to XXX-X
- Added new RsNumberDelegate with custom spinbox (it is enabled only for non Engines)
- Rs delgates moved to /rollingstock/manager/delegates/
- Rs Dialogs moved to /rollingstock/manager/dialogs/ (MergeOwners and MergeModels)
- Job Sheet: in last stop show asset before stop so reapeat previous row. This is because last stop should uncouple all rollingstock so asset after stop is always empty
- Removed Fremosession::getLineId and FremoSession::getLineName, use LinesModel directly (removed also query from FremoSession)
- Fixed BUG: when chosing to delete a job (because it has less than 2 stop, First + Last) it crashed because of recursion in JobPathEditor::clearJob()
- Job Graph: stations label locked on top like HourPane
- RS: added new types 'Freight Wagon' and 'Coach' instead of generic 'Wagon'. Warning: Engine type was changed from '1' to '0'
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.8.1:
- Transit are now stored and loaded correctly
- Fix BUG: StationJobView and Station Sheet used iterator even after erase()
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.8.0:
- EditStopDialog: now Passes/Crosses views have label on top.
- EditStopDialog: removed q_getLineSpeed (now LinesModel from StopsModel is used instead) and q_selectPasses
- EditStopDialog: moved passes/crosses to a custom model
- GraphManager: fixed bug, if a job was selected and user selected another job with searchbox bot jobs get selected, now only the one from searchbox is selected
- StationJobView: prevent cell editing
- StationJobView: fixed platform column was skipped on repeated Departure rows
- StationJobView: don't repeat Arrival on Departure rows
- StationJobView: reuse 'insertStop()' also for the first time a stop is inserted (removes duplicate code)
- Station Sheet ODT: fixed, it was putting '0' in description column
- Station Sheet ODT: fixed extension is now ODT instead of ODS
- Station Sheet ODT and StationJobView: fixed BUG, sort repeated rows by Departure
- Job Sheet ODT: don't duplicate Arrival/Departure on first and last stops
- RollingstockModel, RSModelsModel, RSOwnersModel: 'removeRS' and 'removeRSAtRow' now based on 'removeRS_internal' (removed duplicate code)
- RSJobViewer: fixed arrival and departure displayed in minutes (internal integer) instead of 'HH:mm'
- Removed action JobPlanner (deprecated) and added separator before View->Editor toggle
- Updated translations
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.7.2:
- SearchEngine: can search multiple job categories that start with user input
- SearchEngine: fixed error when searching by both category and number
- Forward decleared ViewManager, EditorManager, SearchEngine in fremosession.h
- StationJobView: removed unimplemented Station Graph page and unused PixViewer class, rearranged the layout
- StationJobView: moved in StationManager (/stations/manager) subfolder
- Merge Models: new functionality, with settings options to remove by default the merged model
- Merge Owners: new functionality, with settings options to remove by default the merged owner
- SettingsDialog: better layout
- RS Type: now properly editable through 'Engine/Wagon' combo delegate
- JobPathEditor: when saving (Commit changes pressing 'Ok') resets JobId to the old value if the new one is already in use
- FremoSession: removed 'removeJob' function, use JobsModel directly instead
- DB Fix: 'jobsegmets' table, added FK 'jobId' to jobs(id)
- Logging: log current date and time at start with format 'dd/MM/yyyy HH:mm' instead of day names
- FremoSession: moved some functions and queries to RollingstockModel (like RS_lastKnownPos)
- FremoSession: removed 'getStID' (with q_getStId query) and 'getStName' functions, use StationsModel directly instead
- FremoSettings: added 'HourLineStartOffset' so that hour line start a bit before the first platform of the first station
- FremoSettings: added ShiftGraph options to SettingsDialog
- FremoSettings: removed sheets border settings (unused since switching to ODT instead of ODS)
- Fixed BUG: bug that prevented adding a station to a line if the station had the same ID as a line ID to which it was already added
(for instance St 1 in Line 1, cannot add St to other lines)
- Fixed BUG: updating Job Id could lead to crash because JobsModel::lookupTable was not updated with the new iterator from JobsModel::m_data
- Fixed BUG: adding a new stop to job on the same line caused the call to 'resetStopsLine' but there wasn't no 'nextLine' so a warning was printed
- Fixed BUG: TrainAssetModel spelling error table 'rs_model' instead of 'rs_models'
- Fixed BUG: changing shift graph settings while shift graph was open caused glitches (now explicitly call QGraphicsView::update)
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.7.1:
- Removed old FremoSession API for printing/exporting sheets
- Removed unused FlowLayout class (app/flowLayout.cpp)
- Implemented searchbox: SearchEngine can match by category, number or both
- JobPathEditor: trainIdSpin color works also when the widget is not in focus
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.7.0:
- Moved 'platformName()' from FremoSession to utils/platform_utils.h in 'utils' namespace
- Commented 'GraphicsScene::mousePressEvent' in graph/graphicsScene.cpp
- Initial job selection refactor (not finished yet)
- Fixed crash: JobPathEditor read-only mode when clicking job number spinbox and then clicking out, anywhere else
- JobPathEditor in editing mode hides 'Save Job Sheet' button. It doesn't make sense while editing
- JobSheetExport and ShiftSheetExport and StationSheetExport, new API and implementation to write sheets in ODT format rather then ODS format used previously
ODT is better for formatting and table columns when there are more tables in the same page. Also better page break handling
- ShiftViewer: minimum width to 600 so user doesn't need to resize
- JobManager: minimum width to 750 and height to 300 so user doesn't need to resize
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.6.0:
- Removed old unused files (mydelegate, importrsdialog, linespage2, jobwizard) -> Smaller executable
- New Feature: (toggable in settings) When adding a stop in JobPathEditor before editing the newly added stop,
the editor goes back to the second-last stop (penultima fermata) (former Last stop but user added another)
and lets the user choose which line is taken.
- New Experimental feature (not finished yet): StopModel auto adds transits between two stops
- New Experimental feature: 'Show Next/Prev Job Segment' allows to easily navigate between railway lines
keeping the job path selected
- Line ComboBox in mainwindow toolbar now changes if current line is programmatically changed
(bidirectional connection with GraphManager)
- Fix EditPermission: don't allow multiple 'endEditing()' calls
- Fix JobPathEditor: endEditing() not called in the right place caused infinite loop and read-only mode errors
- Fix LinesModel and StationsModel: it was impossible to change name (it was ignored)
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.4.0:
- EditStopDialog2 renamed to EditStopDialog
- LinesModel moved to QMap-based implementation. Lines are now automatically sorted by name
- StationsModel moved to QMap-based implementation. Stations are now automatically sorted by name
- Fix RollingstockModel: switch case in 'setData()' added break
----------------------------------------------------------------------------------------------------------------------------------------
Version 5.3.1:
- New RS Import Dialog: not yet implemented, deprecate old importrsdialog
- New searchbox module: not yet implemented
- Implemented TrainAssetModel
- EditStopDialog2: use TrainAssetModel instead of direct query to show train asset in 'Info' page.
also distinguish before/after stop. Hides 'Before' on First and hides 'After' on Last
- Fix SelectionPage: in printing sub module added a break in format switch case
- Fix JobsModel: removing a job now also remove couplings
- JobPathEditor: in read-only mode show context menu but disable actions that are not permitted
- RollingstockModel: when removing a model or owner, it removes all associated RS.
- ShiftGraphHolder: auto refresh station names when edited, use short-name, fallback to full name

158
CMakeLists.txt Normal file
View File

@ -0,0 +1,158 @@
cmake_minimum_required(VERSION 3.5)
include(CMakeDependentOption)
project(TrainTimetable VERSION 5.25.0 LANGUAGES CXX)
option(UPDATE_TS "Update translations" OFF)
option(UPDATE_TS_KEEP_OBSOLETE "Keep obsolete entries when updating translations" ON)
option(BUILD_DOXYGEN "Build Doxygen documentation" OFF)
if (WIN32)
option(RUN_WINDEPLOYQT "Run windeployqt after executable is installed" ON)
endif()
## Defines ##
set(DB_FORMAT_VERSION 7)
set(APP_PRODUCT_NAME "TrainTimeTable")
set(APP_DISPLAY_NAME "Train Timetable")
set(APP_COMPANY_NAME "Train Software")
set(PROJECT_HOMEPAGE_URL "www.pollofrittomachebuono.altervista.org")
set(APP_HELP_URL ${APP_ABOUT_URL})
set(APP_UPDATE_URL ${APP_ABOUT_URL})
set(PROJECT_DESCRIPTION "${APP_DISPLAY_NAME} lets you create and manage model railway sessions")
set(APP_ICON ${CMAKE_SOURCE_DIR}/files/icons/icon.ico)
# Create main application target
set(TRAINTIMETABLE_TARGET "train-timetable")
## defines end ##
# NSIS Installer
if(WIN32)
configure_file(packaging/windows/NSIS/constants.nsh.in ${CMAKE_BINARY_DIR}/NSIS/constants.nsh @ONLY)
configure_file(packaging/windows/NSIS/installer.nsi ${CMAKE_BINARY_DIR}/NSIS/installer.nsi COPYONLY)
endif()
add_custom_target(NSIS
DEPENDS ${TRAINTIMETABLE_TARGET}
#COMMAND TODO add NSIS compiler
SOURCES
packaging/windows/NSIS/constants.nsh.in
packaging/windows/NSIS/installer.nsi
packaging/windows/resources.rc.in
VERBATIM)
## CUSTOM CONFIGURATION ##
option(CONFIG_GLOBAL_TRY_CATCH "Global try/catch at main()" OFF)
option(CONFIG_NO_DEBUG_CALL_TRACE "Disable scope call trace messages" OFF)
option(CONFIG_PRINT_DBG_MSG "Debug messages (some)" ON)
option(CONFIG_ENABLE_BACKGROUND_MANAGER "Enable background task manager" ON)
cmake_dependent_option(CONFIG_ENABLE_RS_CHECKER "Enable rollingstock checker" ON "CONFIG_ENABLE_BACKGROUND_MANAGER" OFF)
cmake_dependent_option(CONFIG_SEARCHBOX_MODE_ASYNC "Use thread to search for jobs" ON "CONFIG_ENABLE_BACKGROUND_MANAGER" OFF)
option(CONFIG_ENABLE_AUTO_TIME_RECALC "Automatic recalculation of travel times based on rollingstock speed, experimental" OFF)
option(CONFIG_ENABLE_USER_QUERY "Enable SQL console" OFF)
if(CONFIG_GLOBAL_TRY_CATCH)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DGLOBAL_TRY_CATCH)
endif()
if(CONFIG_NO_DEBUG_CALL_TRACE)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DNO_DEBUG_CALL_TRACE)
endif()
if(CONFIG_PRINT_DBG_MSG)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DPRINT_DBG_MSG)
endif()
if(CONFIG_ENABLE_BACKGROUND_MANAGER)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DENABLE_BACKGROUND_MANAGER)
endif()
if(CONFIG_ENABLE_RS_CHECKER)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DENABLE_RS_CHECKER)
endif()
if(CONFIG_SEARCHBOX_MODE_ASYNC)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DSEARCHBOX_MODE_ASYNC)
endif()
if(CONFIG_ENABLE_AUTO_TIME_RECALC)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DENABLE_AUTO_TIME_RECALC)
endif()
if(CONFIG_ENABLE_USER_QUERY)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DENABLE_USER_QUERY)
endif()
## Config end ##
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(TRAINTIMETABLE_DEFINITIONS ${TRAINTIMETABLE_DEFINITIONS} -DAPPVERSION="${PROJECT_VERSION}" -DQT_DEPRECATED_WARNINGS)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
find_package(Qt5 REQUIRED
COMPONENTS
Core
Gui
Widgets
Svg
PrintSupport
LinguistTools)
find_package(SQLite3)
find_package(ZLIB)
# Locate libzip
if(NOT ZIP_INCLUDE_DIR OR NOT ZIP_LIBRARY)
set(ZIP_INCLUDE_DIR NOTFOUND CACHE PATH "Path to libzip include directory, contains 'zip.h' file.")
set(ZIP_LIBRARY NOTFOUND CACHE FILEPATH "Path to libzip library (shared DLL usually libzip.dll).")
message(FATAL_ERROR "libzip NOT FOUND (set ZIP_INCLUDE_DIR and ZIP_LIBRARY)")
endif()
if(BUILD_DOXYGEN)
find_package(Doxygen)
endif()
#Locate windeployqt
if(WIN32 AND RUN_WINDEPLOYQT AND NOT WINDEPLOYQT_EXE)
set(WINDEPLOYQT_EXE_TMP NOTFOUND)
message("Searching windeployqt executable")
if(QT_QMAKE_EXECUTABLE)
get_filename_component(WINDEPLOYQT_DIR ${QT_QMAKE_EXECUTABLE} DIRECTORY)
set(WINDEPLOYQT_EXE_TMP "${WINDEPLOYQT_DIR}/windeployqt.exe")
endif()
if(NOT EXISTS ${WINDEPLOYQT_EXE_TMP} AND Qt5_DIR)
get_filename_component(WINDEPLOYQT_EXE_TMP "${Qt5_DIR}/../../../bin/windeployqt.exe" REALPATH)
endif()
if(EXISTS ${WINDEPLOYQT_EXE_TMP})
message("Found ${WINDEPLOYQT_EXE_TMP}")
else()
message("windeployqt NOT FOUND")
set(WINDEPLOYQT_EXE_TMP NOTFOUND)
endif()
set(WINDEPLOYQT_EXE ${WINDEPLOYQT_EXE_TMP} CACHE FILEPATH "windeployqt executable file path.")
unset(WINDEPLOYQT_EXE_TMP)
unset(WINDEPLOYQT_DIR)
endif()
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_subdirectory(src)
add_subdirectory(packaging)

329
TODO Normal file
View File

@ -0,0 +1,329 @@

axel.thobaben@siemens.com
TODOS:
BASSA PRIORITA':
- per chi ha più monitor possibilità di dividere la finestra e ogni monitor può vedere una linea diversa o anche tutti la stessa linea ma in punti diversi, inoltre aggiungere slider zoom per il grafico servizi
- Funzione nuova: stazioni spunta presenziata/non presenziata: (default true, presenziata), se non è presenziata un treno non può partire/terminare da quella stazione e nei fogli stazione non compare nelle colonne 'Arriva da'/'Parte per' bensì mostra quella prima e quella dopo
- Aggiungi logo nella copertina dei turni
- Aggiungi testo impostabile nella copertina turni
- Files: esetensione personalizzata, icona, file associations
- Fogli Esportati: Fai scegliere lingua direttamente all'utente (di default è la stessa scelta per il programma)
-------------------------------------
fare PER ULTIMO
- Concetto di treno successivo/precedente
Aggiungi nel database le relative colonne in 'jobs'
Quando si crea un treno in JobPathEditor l'utente può specificare un treno precedente
(Quello corrente diventa il suo successivo)
- Devono essere della stessa categoria
- Deve partire dalla stessa stazione dove finisce il precedente
Chiedi all'utente se vuole importare i rotabili del treno precedente (Tutto/solo carri/solo loco)
es: regionale che fa navetta ha sempre la stessa composizione che viene ricopiata
I rotabili sono occupati anche da quando finisce un servizio all' inizio del successivo
quindi non possono essere agganciati da altri treni
COUPLING OPERATION:
- 0 = Sgancia rotabile
- 1 = Aggancia rotabile
- 2 = Importato da treno precedente (il rotabile è già in composizione)
- 3 = Lascia in composizione per treno successivo
Queste distizioni servono per capire se alla fine di un servizio un rotabile è libero (op = 0 sganciato)
o è occupato in attesa del treno successivo (op = 3)
Inoltre sono utili per annullare azioni precedenti (Undo)
cioè se l'utente aveva impostato un treno precedente e poi lo toglie i rotabili che erano stati importati
vengono tolti automaticamente e sul treno precedente segni che i rotabili vengono liberati (op = 0 sganciato)
Di default sgancia tutti i rotabili alla fine servizio
viene campbiato da solo quando si specifica un treno precedente e quindi quello precedente setta i rs a op = 3
Nel JobPathEditor e nelle Stampe:
La prima stazione indica eventuale treno precedente
L'ultima stazione indica eventuale treno successivo
------------------------------------------------------------------------------------------
PRIORITA' MEDIA:
- Usare QString::simplified() per inserire dati (es. nome stazioni, turni, linee, ecc)
- Linee: mettere opzione binario singolo e impedisce incroci in linea, FIND_INCROCI_1.sql, FIND_PRECEDENZE_IN_LINEA.sql, però limitare solo a linee contrassegnate come binario singolo e anche ricalcolare quando un servizio viene modificato
- Categorie Treno: ogni categoria IMPOSTABILE un range NUMERI TRENO massimo/minimo, (Default nelle impostazioni per nuove sessioni, precedenza a valori specifici database)
JobPathEditor: quando cambio categoria dalla combobox -> cambia anche il numero treno in base ai range impostati, quando cambio manualmente numero trno fuori dal range avverti e l'utente sceglie se mantenere o annullare la modifica
- Fogli esportati: inoltre grandezza font impostabile
- Sgancio avviene con orario di arrivo e Aggancio avviene con orario di partenza, eventualmente avvisa se si aggancia un carro sganciato da un altro treno solo un minuto prima: potrebbe ritardare anche solo se il macchinista non sgancia il carro proprio subito arrivato in stazione ma aspetta un po'
- Tempo fermata default diverso per ogni categoria impostabile e si salva nel database
- JobPathEditor: mostra numero progressivo della fermata a partire da 1 sul bordo sinistro dello StopDelegate
------------------------------------------------------------------------------------------
PRIORITA' ALTA:
- VirtualBox: IE8 in lingua inglese prende male gli orari nei QTimeEdit: 00:00 viene visto come 12:00 AM
- BIG TODO: cambiando turno se si sta editando fermata non si chiude da sola
- Ricalcola tempi SEMPRE quando cambiano i rotabili (non chiedere)
- BIG BIG TODO: quando da EditStopDialog si agganciano rotabili occupati si viene chiesto se rimuovere eventuali altre operazioni anche su altri treni, se poi si annullano le modifiche al servizio queste operzioni non vengono ricostruite perchè non facevano parte di old_couplings, INSERIRLE PRIMA DI RIMUOVERLE o PERMETTERE DI RIMUOVERE OPERAZIONI SOLO DEL PROPRIO SERVIZIO???
- Quando si tenta di eliminare una stazione o un rotabile che sono utilizzati avvisa l'utente con un messaggio altrimenti sembra che il programma non prenda il comando.
- Se su una stazione transitano solo senza fermarsi allora può essere tolta da una linea (avvisa, chiedi conferma -> elimina automaticamente tutti i transiti a meno che non siano TransitLineChange e infine toglie stazione dalla linea) -> così una volta tolta la stazione da tutte le linee si può eliminare
- Piano Giornaliero Stazione: cambia nome pulsante da 'Foglio' in 'Salva Foglio'
- PDF scegli se pagina unica grande o più fogli A4 (Metti la voce in impostazioni)
- Precedenze le vede solo il treno che si ferma non quello che supera
- Aggiungi pulsante 'Elimina tutti i rotabili' con conferma e 'Elimina tutti i servizi' e 'Importa layout (stazioni/linee)' e 'Importa Modelli'
- DOXYGEN: generate documentation for every function
- Use libsodium for public key license encrypt
-------------------------------------------------------------------------------------------
RISOLTI:
FIXED - ODT export scrivi in grassetto -Ag e +Sg, togli + e - rimane solo Ag: e Sg: inoltre a volte -Sg: non va a capo dopo rotabili agganciati
FIXED - Importa Rotabili: fai scegliere Carro/Locomotiva, e velocità di default per quando non trova il modello e lo deve creare da zero
DONE - QFileDialog opens on Program Files Folder - which is read-only so change default to standard paths documents
DONE - QFileDialog opens on Program Files Folder - which is read-only so change default to standard paths documents
DONE - RSCoupleDialog: aggiungi in basso legenda dei colori
FIXED - La prima fermata la mette sempre che parte da binario 1 dep, perche??? forse perche appena si crea il treno viene impostato a MERCI
FIXED - Categorie treni non tradotte
FIXED - StopEditor, se si imposta manualmente la partenza può essere anche precedente o uguale all'arrivo
DONE - Performance: rendere disattivabile l'avvio automatico del RS Error Checker e il lancio selettivo automatico quando viene modificato un servizio
DONE - Rs Error: lanciare in automatico all'apertura del database
DONE - Fogli esportati: imposta scritte pie pagina e intestazione (Default nelle impostazioni usate per nuove sessioni e sessioni dove non è impostato, precedenza ad impostazioni specifica nel database)
DONE - Rotabili Sessione: rendi ordinabile per propprietario o stazione (sempre ordine alfabetico), rendi stampabile (Foglio odt)
FIXED - BUG: rimuovendo tutte le fermate da un job non elimina il segmento, questo porta a segmenti duplicati
DONE - Stazioni: binario di default arrivo per A (Merci, Postale, LIS) e un altro per B (tutte le altre categorie), quando aggiung una nuova fermata, in base alla categoria sceglie il binario di default (se non impostato sceglie 1) COSA succede quando cambio categoria???
DONE - Grafico Turno: cliccando su un treno esce finestra per cambiare turno senza uscire dalla finestra del grafico (cioè senza passare per JobEditor)
DONE - Linee elettrificate/non elettrificate nel JobPathEditor mettere icona fulmine
DONE - Errore rotabili da aprire dalla toolbar
DONE - Rimuovere windowTitle dai file del designer perchè occupano solo memoria nelle stringhe del programma
ULTIMI:
DONE - JobPathEditor: non permettere context menu o EditStopDialog mentre sta editando stop con item delegate
DONE - Foglio stazioni: scritte in grasetto anche piu grandi
DONE - EditStopDialog: agganciati devono vedersi solo rotabili liberi in quella stazione
FIXED - EditStopDialog: BUG applicare orari senza Ricalcola riesce a mettere arrivo a 00:00 che è prima della fermata precedente!
FIXED - file 1.db servizio 40000 fermata Castel di Piave tra gli sganciati non dovrebbe mostrare carro G
---------------------
DONE - StationsManager: colonna colore stazione metti nome.
DONE - Carri vanno con trattino anche nei fogli stazione e turni.
- Berlin Sans fb demi-> nome stazione, intestazione e piè pagina
- Adobe Heiti -> parola Stazione sottolineato (vedi file CASTEL_DI_PIAVE_orario_stazione per i font e le misure esatte)
DONE - Rotabili: da StationsManager interrogare una stazione e vedere che rotabili ci sono in quell'orario (e magari ti suggerisce anche il prossimo orario in cui succede una manovra)
DONE - Aggancio Rotabili: ti permette di agganciare solo rotabili liberi in quella stazione.
DONE - 1) Completare foreign keys per eliminare EditPermission system
DONE - 2) Completare importazione rotabili
DONE - 3) Stazioni colore binari principali impostabile diverso per stazione
DONE - 5) Quando elimini la linea corrente che succede? GraphManager non viene informato!!!
DONE - 6) Quando agganci locomotiva elettrica in linea non elettrificata mostra avviso
DONE - 9) Eliminato EditPermission, permetti di eliminare job da JobManager
FIXED - 11) Ricaica grafico turni sposta linee -> controlla
FIXED - 17) StationsManager: stazioni e linee modificate -> non si aggiorna il grafico
FIXED - 18) StopModel: transiti devono avere 0 minuti di fermata, le altre almeno 1 minuto
FIXED - 19) JobPathEditor: non funziona scegli stazione in AddStop quando trasforma in transito la stazione precedente perde il focus tastiera
FIXED - 21) EditStopDialog: le modifiche al campo stazione non hanno effetto
FIXED - 22) Errore: non elimina segmento se fai VE - Mestre - Mira - Padova e poi da EditStopDialog cambi padova in Mestre
Cambiamenti da fare:
DONE - Nome colonne JobEditor sparisce (?), controllare
DONE - No colonna 'Modello' su tabella Vagoni; si modifica solo nome e numero
DONE - Foglio Job: Mostra assi iniziali del treno SOPRA la Tabella
DONE - Togli prima colonna ("A1") vuota dai fogli
DONE - Bordi celle fogli spessore/colore impostabile
DONE - Controlla 'Opzioni': sembra che non legga i valori di default e quindi mette zero su tutto :-(
DONE - Tasto 'Modifica' RSManager diventa 'Vedi Servizi'
DONE - Traduci UI 'Settings'
DONE - Regola spessore linee dei binari e ore del grafico
DONE - Arrivo/Partenza foglio Job sopra tabella
DONE - Più finestre in contemporanea per visualizzare il piano stazione e i rotabili liberi
DONE - Dividere servizi in turni: Un turno equivale ad un libretto macchinista ovvero
più servizi a scelta ma che non siano in contemporanea (Si guida un treno alla volta)
DONE - Un grafico separato per ogni linea
NUOVI
DONE - TURNO: vedere il grafico con solo treni del turno vedi file:///C:/Filippo/Qt_project/fremo_db_3/files/esempio_grafico_turno.odg
DONE - Migliora pagina orari su EditStopDialog
DONE - JobEditor: Modifica a cascata gli orari
NUOVISSIMI
DONE - Elimina categorie 'Alta Velocità' e 'Rapido', inserisci categori 'Postale' e 'Locomotiva in spostamento (LIS)'(Sarebbero i rimandi)
DONE - Treno che ferma in stazione si vede la fermata su tutti i grafici
esempio: treno da Adria ferma a Mestre, anche dal grafico linea Mestre-Padova_AV si vede il binario occupato dal treno da Adria con relativo nome treno
DONE - Di default treno ferma su binario 1 (principale, non deposito)
DONE - Tempo di fermata di default del treno: non dipende ne da linea ne da stazone, esclusivamente dalla categoria del servizio
Quando aggiungi una fermata su JobPathEditor inserisce già il tempo di fermata impostato (poi eventualmente correggi a mano gli orari, ma si modificano a cascata)
Tempi (Impostabili): -Merci/Postale: 10min
-Tutti i passegeri: 2min
-Diretto: transito
- Migliora gestione transiti
DONE - Quando aggiungi fermata su JobPathEditor la considera come LastStop quindi non ti fa impostare direttamente la partenza
Possibile soluz: le considera tutte come NormalStop e quando dai l'Ok finale tramuta l'ultima in LastStop
DONE - JobPathEditor calcola già tempo di arrivo in base alla distanza e velocità, poi eventualmente correggi a mano gli orari, ma si modificano a cascata
DONE (FIXED) - Settings non applica spessori linea
----------
TASKs
----------
DONE - Finestra Impostazioni ingrandibile
DONE - Numero treni nel Job Graph Font più piccolo per ridurre sovrapposizioni
DONE PRIORITA' MASSIMA (blocca tutte le atre modifice riguardanti rs)
- Rotabili separa modello/numero di serie/proprietario:
Tabella: rs_models
Colonne: ID, Name(String), MaxSpeed, Axes, Engine/Wagon (Nome è composto da lettere e numeri)
Contiene le informazioni sui modelli dei rotabili, va riportata in RollingStockManager in un QTabWidget
Tabella: rs_owners
Colonne: owner_id, name(String)
Vengono aggiunti da soli quando inseriti dalla pagina 'rollingstock'
Tabella: rollingstock
COLONNE ID, model_id, numero_di_serie(INT), owner_id
Su colonna 'owner' propone suggerimenti da 'rs_owners'
Il numero di serie è soggetto a formattazione in gruppi sui carri/carrozze (viene applicato in una funzione es getRSName(fremo_id rsId)
(Di solito 5 o 4 cifre separate in 3/4 + trattino + ultima cifra)
DONE - Le linee delle ore devono finire un po' oltre (più a sinistra) del primo binario della prima stazione
Altrimenti il primo binario sembra una linea di separazione
PRIORITA' (BUG)
DONE - A volte non va menù modifica su JobPathEditor, probabilmente collegato a setReadOnly e il sistema requestEditing
DONE - Stazioni Nome abbreviati per grafico servizio e grafico turni, sulle stampe e JobPathEditor nome intero
Aggiungere una colonna nel database e nel StationsModel (l'utente inserisce sia nome intero che abbrev quando crea la stazione)
PRIORITA' ALTA
DONE - Stampa Fogli Stazione
Colonne: Arrivo, Proviene da, Num Treno, Binario, Partenza, Parte per, Incrocia, Precedenza, Rotabili, Note
Colonne più larghe, tutti le celle vanno centrate
Transiti e fermate < 1 minuto hanno 1 sola riga; tutto il resto 2 righe separate
-Riga di arrivo: colonna partenza vuota
-Riga di partenza: colonna arrivo vuota (Così il foglio è più ordinato)
PRIORITA' MEDIA - BASSA
DONE - Stampa Turno
La prima pagina è una copertina (vedi file)
Contiene le date Inizio/Fine del fremo meeting, un testo arbitrario, la località dove si svolge il meeting
e un logo dell'associazione - infine in basso c'è il nome del turno
Questi dati sono comuni a tutti i turni,
L'utente le deve inserire in una finestra apposita e vanno salvati nel database
Immagine va convertita in un formato stabilito (es PNG, perchè ha alpha) e diventa SQL BINARY BLOB
Così se il file viene aperto in un altro pc l'immagine c'è comunque
PRIORITA' ALTA
- Stampa Servizio (che occupa una pagina intera nella stampa turno)
Traduci 'Job' in 'Treno' anzichè 'Servizio' - va centrato in alto (riga 1)
Partenza/Arrivo sulla stessa riga (Destra e sinistra) (riga 2)
Locomotiva/Assi sulla stessa riga (riga 3)
Riga vuota per separare (riga 4)
Header Tabella (riga 5)
Il campo Locomotiva contiene i nomi di tutte le locomotive agganciate nella prima stazione
Attenzione: forse è necessario unire celle (span) perchè la tabella sotto ha tante colonne
Colonna Rotabili: non usare +/-, Scrivi 'Ag' una volta sola e a seguire tutti i rotabili da agganciare
poi a capo 'Sg' e tutti i rotabili da sganciare (ovviamente solo se ce ne sono)
Vedi file: foglio servizio c'è seconda tabella composizione treno (solo colonne 'Da' e 'Rotabili')
in sostanza ripete le info Rotabili della prima tabella
Nell'ultima riga (Stazione di destinazione) la colonna Rotabili mostra un resoconto di ciò che è rimasto in composizione
cioè anzichè Ag/Sg mostra tutti i rotabili agganciati, stessa cosa nella seconda tabella
DONE - Controlla 'StationLinesModel' e 'LineStationsModel' approfonditamente sembrano buggati
soprattutto non si salva, i km automatici quando si aggiunge un a stazione sono sballati
DONE - 'LineStationsModel' non controlla se una stazione è già nella linea prima di aggiungerla
- DONE Rifare da capo il sistema del requestEditing, magari:
EditingPass p = mgr->requestEditing(JobEditing, AddOrRemove)
if(p.canEdit())
{
...
}
//Quando va fuori scope chiama da solo 'endEditing()' altrimenti lo fai manualmente
------------
MODELLI
------------
***** IMPORTANTE ******
----------------------------------------
DONE - Grafico Turni: nome turno centrato e scritto per esteso 'Turno A' (Aggiunge da solo 'Turno %1' anche nei fogli turno)
DONE - Foglio stazioni: arrivo e partenza in grassetto
DONE - Carri utilizza ultimi 4 numeri 'XXX-X' e fa il padding degli zeri (li aggiunge da solo) es 95 -> 009-5 585 -> 058-5 4458 -> 445-8
FIXED - Crash: Versione 5.8.0: apri desktop/1.db; M40000 aggancia D343 e carro S su Fabiago, sganciali a Cornuda; Stampa piano giornaliero Cornuda -> crashare
DONE - Foglio servizio: tabella composizione ultima stazione mostra prima di sganciare i rotabili (in futuro cambierà il meccanismo con treni successivi/precedenti)
DONE - Colonna Binario su foglio -> 'Bin' per recuperare spazio
DONE - nomi stazioni barra fissa quando si scrolla in basso coe per le ore

View File

@ -0,0 +1,66 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindSQLite3
-----------
Find the SQLite libraries, v3
IMPORTED targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` target:
``SQLite::SQLite3``
Result variables
^^^^^^^^^^^^^^^^
This module will set the following variables if found:
``SQLite3_INCLUDE_DIRS``
where to find sqlite3.h, etc.
``SQLite3_LIBRARIES``
the libraries to link against to use SQLite3.
``SQLite3_VERSION``
version of the SQLite3 library found
``SQLite3_FOUND``
TRUE if found
#]=======================================================================]
# Look for the necessary header
find_path(SQLite3_INCLUDE_DIR NAMES sqlite3.h)
mark_as_advanced(SQLite3_INCLUDE_DIR)
# Look for the necessary library
find_library(SQLite3_LIBRARY NAMES sqlite3 sqlite)
mark_as_advanced(SQLite3_LIBRARY)
# Extract version information from the header file
if(SQLite3_INCLUDE_DIR)
file(STRINGS ${SQLite3_INCLUDE_DIR}/sqlite3.h _ver_line
REGEX "^#define SQLITE_VERSION *\"[0-9]+\\.[0-9]+\\.[0-9]+\""
LIMIT_COUNT 1)
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
SQLite3_VERSION "${_ver_line}")
unset(_ver_line)
endif()
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
find_package_handle_standard_args(SQLite3
REQUIRED_VARS SQLite3_INCLUDE_DIR SQLite3_LIBRARY
VERSION_VAR SQLite3_VERSION)
# Create the imported target
if(SQLite3_FOUND)
set(SQLite3_INCLUDE_DIRS ${SQLite3_INCLUDE_DIR})
set(SQLite3_LIBRARIES ${SQLite3_LIBRARY})
if(NOT TARGET SQLite::SQLite3)
add_library(SQLite::SQLite3 UNKNOWN IMPORTED)
set_target_properties(SQLite::SQLite3 PROPERTIES
IMPORTED_LOCATION "${SQLite3_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIR}")
endif()
endif()

63
cmake/FindZip.cmake.old Normal file
View File

@ -0,0 +1,63 @@
# Searches for an installation of the zip library. On success, it sets the following variables:
#
# Zip_FOUND Set to true to indicate the zip library was found
# Zip_INCLUDE_DIRS The directory containing the header file zip/zip.h
# Zip_LIBRARIES The libraries needed to use the zip library
#
# To specify an additional directory to search, set Zip_ROOT.
#
# Author: Siddhartha Chaudhuri, 2009
#
# Look for the header, first in the user-specified location and then in the system locations
SET(Zip_INCLUDE_DOC "The directory containing the header file zip/zip.h")
FIND_PATH(Zip_INCLUDE_DIRS NAMES zip/zip.h PATHS ${Zip_ROOT} ${Zip_ROOT}/include DOC ${Zip_INCLUDE_DOC} NO_DEFAULT_PATH)
IF(NOT Zip_INCLUDE_DIRS) # now look in system locations
FIND_PATH(Zip_INCLUDE_DIRS NAMES zip/zip.h DOC ${Zip_INCLUDE_DOC})
ENDIF(NOT Zip_INCLUDE_DIRS)
SET(Zip_FOUND FALSE)
IF(Zip_INCLUDE_DIRS)
SET(Zip_LIBRARY_DIRS ${Zip_INCLUDE_DIRS})
IF("${Zip_LIBRARY_DIRS}" MATCHES "/include$")
# Strip off the trailing "/include" in the path.
GET_FILENAME_COMPONENT(Zip_LIBRARY_DIRS ${Zip_LIBRARY_DIRS} PATH)
ENDIF("${Zip_LIBRARY_DIRS}" MATCHES "/include$")
IF(EXISTS "${Zip_LIBRARY_DIRS}/lib")
SET(Zip_LIBRARY_DIRS ${Zip_LIBRARY_DIRS}/lib)
ENDIF(EXISTS "${Zip_LIBRARY_DIRS}/lib")
# Find Zip libraries
FIND_LIBRARY(Zip_DEBUG_LIBRARY NAMES zipd zip_d libzipd libzip_d
PATH_SUFFIXES Debug ${CMAKE_LIBRARY_ARCHITECTURE} ${CMAKE_LIBRARY_ARCHITECTURE}/Debug
PATHS ${Zip_LIBRARY_DIRS} NO_DEFAULT_PATH)
FIND_LIBRARY(Zip_RELEASE_LIBRARY NAMES zip libzip
PATH_SUFFIXES Release ${CMAKE_LIBRARY_ARCHITECTURE} ${CMAKE_LIBRARY_ARCHITECTURE}/Release
PATHS ${Zip_LIBRARY_DIRS} NO_DEFAULT_PATH)
SET(Zip_LIBRARIES )
IF(Zip_DEBUG_LIBRARY AND Zip_RELEASE_LIBRARY)
SET(Zip_LIBRARIES debug ${Zip_DEBUG_LIBRARY} optimized ${Zip_RELEASE_LIBRARY})
ELSEIF(Zip_DEBUG_LIBRARY)
SET(Zip_LIBRARIES ${Zip_DEBUG_LIBRARY})
ELSEIF(Zip_RELEASE_LIBRARY)
SET(Zip_LIBRARIES ${Zip_RELEASE_LIBRARY})
ENDIF(Zip_DEBUG_LIBRARY AND Zip_RELEASE_LIBRARY)
IF(Zip_LIBRARIES)
SET(Zip_FOUND TRUE)
ENDIF(Zip_LIBRARIES)
ENDIF(Zip_INCLUDE_DIRS)
IF(Zip_FOUND)
IF(NOT Zip_FIND_QUIETLY)
MESSAGE(STATUS "Found Zip: headers at ${Zip_INCLUDE_DIRS}, libraries at ${Zip_LIBRARY_DIRS}")
ENDIF(NOT Zip_FIND_QUIETLY)
ELSE(Zip_FOUND)
IF(Zip_FIND_REQUIRED)
MESSAGE(FATAL_ERROR "Zip library not found")
ENDIF(Zip_FIND_REQUIRED)
ENDIF(Zip_FOUND)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
files/fs_carri_merci.pdf Normal file

Binary file not shown.

View File

@ -0,0 +1 @@
<svg id="Icons" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><defs><style>.cls-1{fill:#45413c;opacity:0.15;}.cls-2{fill:#656769;}.cls-12,.cls-13,.cls-2,.cls-5,.cls-6{stroke:#45413c;stroke-linecap:round;stroke-linejoin:round;}.cls-3{fill:#adc4d9;}.cls-4{fill:#8ca4b8;}.cls-5{fill:none;}.cls-6{fill:#627b8c;}.cls-7{fill:#fff;}.cls-8{fill:#e0e0e0;}.cls-13,.cls-9{fill:#00b8f0;}.cls-10{fill:#009fd9;}.cls-11{fill:#4acfff;}.cls-12{fill:#ffe500;}</style></defs><title>604-bullet-train</title><ellipse id="_Ellipse_" data-name="&lt;Ellipse&gt;" class="cls-1" cx="26.38" cy="42.5" rx="17" ry="1.5"/><rect id="_Rectangle_" data-name="&lt;Rectangle&gt;" class="cls-2" x="27.79" y="36.35" width="9.69" height="2.83"/><path id="_Path_" data-name="&lt;Path&gt;" class="cls-3" d="M42,37.6a3.9,3.9,0,1,1-3.9-3.89A3.89,3.89,0,0,1,42,37.6Z"/><path id="_Path_2" data-name="&lt;Path&gt;" class="cls-4" d="M38.1,33.71a3.89,3.89,0,0,0-3.89,3.89,4.08,4.08,0,0,0,.06.71h7.67A4.08,4.08,0,0,0,42,37.6,3.89,3.89,0,0,0,38.1,33.71Z"/><path id="_Path_3" data-name="&lt;Path&gt;" class="cls-3" d="M30.94,37.6A3.9,3.9,0,1,1,27,33.71,3.9,3.9,0,0,1,30.94,37.6Z"/><path id="_Path_4" data-name="&lt;Path&gt;" class="cls-4" d="M27,33.71a3.89,3.89,0,0,0-3.89,3.89,4.08,4.08,0,0,0,.06.71h7.66a3.29,3.29,0,0,0,.07-.71A3.9,3.9,0,0,0,27,33.71Z"/><path id="_Path_5" data-name="&lt;Path&gt;" class="cls-5" d="M42,37.6a3.9,3.9,0,1,1-3.9-3.89A3.89,3.89,0,0,1,42,37.6Z"/><path id="_Path_6" data-name="&lt;Path&gt;" class="cls-5" d="M30.94,37.6A3.9,3.9,0,1,1,27,33.71,3.9,3.9,0,0,1,30.94,37.6Z"/><path id="_Path_7" data-name="&lt;Path&gt;" class="cls-6" d="M28.86,37.6A1.82,1.82,0,1,1,27,35.78,1.82,1.82,0,0,1,28.86,37.6Z"/><path id="_Path_8" data-name="&lt;Path&gt;" class="cls-6" d="M39.93,37.6a1.83,1.83,0,1,1-1.83-1.82A1.83,1.83,0,0,1,39.93,37.6Z"/><path id="_Path_9" data-name="&lt;Path&gt;" class="cls-7" d="M47.5,7a2,2,0,0,0-2-2c-13.4.06-19.32.86-22.81,3.24-3.67,2.5-7.57,7.54-12.94,10s-7.9,5.48-7.9,9.81,5.5,8.23,14.5,8.23H45.5a2,2,0,0,0,2-2Z"/><path id="_Path_10" data-name="&lt;Path&gt;" class="cls-8" d="M2.09,25.91a9.29,9.29,0,0,0-.26,2.21c0,4.33,5.5,8.23,14.5,8.23H45.5a2,2,0,0,0,2-2V32.54H16.33C8.46,32.54,3.26,29.56,2.09,25.91Z"/><path id="_Path_11" data-name="&lt;Path&gt;" class="cls-5" d="M47.5,7a2,2,0,0,0-2-2c-13.4.06-19.32.86-22.81,3.24-3.67,2.5-7.57,7.54-12.94,10s-7.9,5.48-7.9,9.81,5.5,8.23,14.5,8.23H45.5a2,2,0,0,0,2-2Z"/><path id="_Path_12" data-name="&lt;Path&gt;" class="cls-9" d="M1.83,28.12c0,3.48,3.55,6.68,9.62,7.81a14.27,14.27,0,0,0,2.28-7.81A13.94,13.94,0,0,0,9.8,18.28l-.07,0C4.46,20.77,1.83,23.79,1.83,28.12Z"/><path class="cls-10" d="M2.09,25.91h0a9.29,9.29,0,0,0-.26,2.21c0,3.48,3.55,6.68,9.62,7.81a14,14,0,0,0,1.66-3.57C7.05,31.67,3.1,29,2.09,25.91Z"/><path id="_Path_13" data-name="&lt;Path&gt;" class="cls-5" d="M1.83,28.12c0,3.48,3.55,6.68,9.62,7.81a14.27,14.27,0,0,0,2.28-7.81A13.94,13.94,0,0,0,9.8,18.28l-.07,0C4.46,20.77,1.83,23.79,1.83,28.12Z"/><path id="_Path_14" data-name="&lt;Path&gt;" class="cls-9" d="M14.41,41.5h9.1a1,1,0,0,0,.95-.68L26,36.35H14.85l-1.38,3.81A1,1,0,0,0,14.41,41.5Z"/><polygon id="_Path_15" data-name="&lt;Path&gt;" class="cls-10" points="25.26 38.48 25.98 36.35 14.85 36.35 14.08 38.48 25.26 38.48"/><path id="_Path_16" data-name="&lt;Path&gt;" class="cls-5" d="M14.41,41.5h9.1a1,1,0,0,0,.95-.68L26,36.35H14.85l-1.38,3.81A1,1,0,0,0,14.41,41.5Z"/><path id="_Path_17" data-name="&lt;Path&gt;" class="cls-9" d="M20.3,10.15c-1.93,1.69-4,3.75-6.32,5.54a148,148,0,0,1,22-.94,1,1,0,0,0,.89-.5l1.92-3.31a1,1,0,0,0-.87-1.5H29.67A77.94,77.94,0,0,0,20.3,10.15Z"/><path id="_Path_18" data-name="&lt;Path&gt;" class="cls-11" d="M22.25,14.93c2.77-.16,5.39-.22,7.62-.24l3.95-5.25H29.67c-1,0-2.07,0-3.13.1Z"/><path id="_Path_19" data-name="&lt;Path&gt;" class="cls-5" d="M20.3,10.15c-1.93,1.69-4,3.75-6.32,5.54a148,148,0,0,1,22-.94,1,1,0,0,0,.89-.5l1.92-3.31a1,1,0,0,0-.87-1.5H29.67A77.94,77.94,0,0,0,20.3,10.15Z"/><path id="_Path_20" data-name="&lt;Path&gt;" class="cls-12" d="M18.92,27.1a1.42,1.42,0,1,1-1.42-1.41A1.42,1.42,0,0,1,18.92,27.1Z"/><path id="_Path_21" data-name="&lt;Path&gt;" class="cls-13" d="M29.6,31.27H47.5V21.69H33a.5.5,0,0,0-.47.31l-3.38,8.59A.5.5,0,0,0,29.6,31.27Z"/><path id="_Path_22" data-name="&lt;Path&gt;" class="cls-13" d="M24.21,30.59,27.59,22a.49.49,0,0,1,.46-.31h1.36a.49.49,0,0,1,.46.68L26.49,31a.48.48,0,0,1-.46.32H24.67A.49.49,0,0,1,24.21,30.59Z"/></svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 735 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 913 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1010 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 990 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 533 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 905 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 991 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 768 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Some files were not shown because too many files have changed in this diff Show More