Kitlist
A list manager for maintaining kit lists
Loading...
Searching...
No Matches
kitlist_finalcut.hpp
Go to the documentation of this file.
1/*
2
3 This file is part of Kitlist, a program to maintain a simple list
4 of items and assign items to one or more categories.
5
6 Copyright (C) 2008-2025 Frank Dean
7
8 Kitlist is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 Kitlist is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with Kitlist. If not, see <http://www.gnu.org/licenses/>.
20
21*/
22#ifndef FINALCUT_HPP
23#define FINALCUT_HPP
24
25#include "kitlist_base_app.hpp"
26#include <final/final.h>
27#include <memory>
28#include <vector>
29
34namespace fdsd
35{
36namespace fc
37{
38
43
52
53public:
56
66 int run(int argc, char* argv[], const std::string filename);
67
68};
69
70class KitListWindow;
71
76class CategoryListDialog final : public finalcut::FDialog {
77
78 friend class KitListWindow;
79
80public:
82 explicit CategoryListDialog(finalcut::FWidget* parent, KitListBaseApp* base_app);
83 finalcut::FString getClassName() const override { return "CategoryListDialog"; }
85 std::shared_ptr<Category> get_current_category();
87 return (category_list != nullptr && category_list->getCount() > 0);
88 }
89
90protected:
92 virtual void onFocusIn (finalcut::FFocusEvent* ev) override;
93
94private:
96 finalcut::FListBox* category_list = new finalcut::FListBox{this};
97 void adjustSize() override;
98 void initLayout() override;
100 void create_item_list_view(int32_t category_id);
101};
102
109class ItemListDialog final : public finalcut::FDialog {
110
111 friend class KitListWindow;
112
113public:
115 explicit ItemListDialog(finalcut::FWidget* parent, KitListBaseApp* base_app,
116 int32_t category_id);
117 finalcut::FString getClassName() const override { return "ItemListDialog"; }
118 int32_t get_category_id() const { return category_id; }
119 bool delete_current_item();
120 void remove_current_item();
121 bool is_items() {
122 return item_list_view.getCount() > 0;
123 }
124
125protected:
126 void populate_item_list();
127 void refresh_item_check_status(std::shared_ptr<Item> item);
128 virtual void onFocusIn (finalcut::FFocusEvent* ev) override;
129
130private:
132 int32_t category_id;
133 finalcut::FListView item_list_view{this};
134 void adjustSize() override;
135 void initLayout() override;
136};
137
142class CategoryDialog final : public finalcut::FDialog {
143public:
144 explicit CategoryDialog(finalcut::FWidget* parent,
146 int32_t category_id);
147 finalcut::FString getClassName() const override { return "CategoryDialog"; }
148 bool is_cancelled() { return cancelled; }
149 finalcut::FString get_name() { return input_name.getText(); }
150 void set_name(finalcut::FString name) { input_name.setText(name); }
151private:
153 int32_t category_id;
154 finalcut::FLineEdit input_name{this};
155 finalcut::FButton btn_cancel{this};
156 finalcut::FButton btn_ok{this};
157 std::shared_ptr<Category> category = nullptr;
158 bool cancelled = true;
159 void adjustSize() override;
160 void initLayout() override;
161};
162
167class ItemDialog final : public finalcut::FDialog {
168public:
169 explicit ItemDialog(finalcut::FWidget* parent,
171 int32_t item_id);
172 finalcut::FString getClassName() const override { return "ItemDialog"; }
173 bool is_cancelled() { return cancelled; }
174 finalcut::FString get_name() { return input_name.getText(); }
175 void set_name(finalcut::FString name) { input_name.setText(name); }
176 bool is_checked() { return checkbox.isChecked(); }
177 void set_checked(bool checked) { checkbox.setChecked(checked); }
178private:
180 int32_t item_id;
181 finalcut::FLineEdit input_name{this};
182 finalcut::FCheckBox checkbox{"Chec&ked", this};
183 finalcut::FButton btn_cancel{this};
184 finalcut::FButton btn_ok{this};
185 std::shared_ptr<Item> item = nullptr;
186 bool cancelled = true;
187 void adjustSize() override;
188 void initLayout() override;
189};
190
195class SelectCategoriesDialog final : public finalcut::FDialog {
196
197public:
198 explicit SelectCategoriesDialog(finalcut::FWidget* parent,
200 finalcut::FString getClassName() const override { return "ItemDialog"; }
202 std::vector<int32_t> get_selected_category_ids();
203
204private:
206 finalcut::FListBox* category_list = new finalcut::FListBox{this};
207 void adjustSize() override;
208 void initLayout() override;
209 finalcut::FButton btn_cancel{this};
210 finalcut::FButton btn_ok{this};
211};
212
218class KitListWindow final : public finalcut::FWidget {
219
220 friend class CategoryListDialog;
221 friend class ItemListDialog;
222
223public:
224
226 explicit KitListWindow(finalcut::FWidget* parent, KitListBaseApp* base_app);
227
228 finalcut::FString getClassName() const override { return "KitListWindow"; }
229
230 void onClose (finalcut::FCloseEvent*) override;
231
232 bool confirm_delete(std::shared_ptr<Category> category);
233
234 void update_menus();
235
236protected:
237 void close_item_windows();
238
239private:
240
242
243 finalcut::FMenuBar menu_bar{this};
244
250 struct KitListMenu {
251 explicit KitListMenu(finalcut::FMenuBar& menu_bar);
252 finalcut::FMenu file_menu;
253 finalcut::FMenuItem file_new;
254 finalcut::FMenuItem file_open;
255 finalcut::FMenuItem file_save;
256 finalcut::FMenuItem file_save_as;
257 finalcut::FMenuItem separator1;
258 finalcut::FMenuItem file_quit;
259
260 finalcut::FMenu edit_menu;
261 finalcut::FMenuItem new_item;
262 finalcut::FMenuItem edit_item;
263 finalcut::FMenuItem new_category;
264 finalcut::FMenuItem edit_category;
265 finalcut::FMenuItem separator3;
266 finalcut::FMenuItem delete_item;
267 finalcut::FMenuItem remove_item;
268 finalcut::FMenuItem delete_category;
269 finalcut::FMenuItem separator4;
270 finalcut::FMenuItem remove_checked_items;
271 finalcut::FMenuItem delete_checked_items;
272 finalcut::FMenuItem separator5;
273 finalcut::FMenuItem check_items;
274 finalcut::FMenuItem uncheck_items;
275 finalcut::FMenuItem toggle_items;
276 finalcut::FMenuItem separator6;
277 finalcut::FMenuItem copy_item;
278 finalcut::FMenuItem copy_checked_items;
279
280 finalcut::FMenu view_menu;
281 finalcut::FMenuItem view_category_list;
282 finalcut::FMenuItem view_all_items_list;
283 finalcut::FMenuItem separator2;
284 finalcut::FRadioMenuItem view_checked_unchecked;
285 finalcut::FRadioMenuItem view_checked;
286 finalcut::FRadioMenuItem view_unchecked;
287 };
288
290 finalcut::FDialogListMenu window{"&Window", &menu_bar};
291
292 finalcut::FStatusBar status_bar{this};
294 void remove_item_list_dialog(int32_t removed_category);
295 void refresh_item_dialogs(std::shared_ptr<Item> item);
297 void configure_file_menu();
298 void configure_edit_menu();
299 void configure_view_menu();
301 void adjustSize() override;
302 void initLayout() override {
303 // setResizeable();
304 setGeometry(finalcut::FPoint{5, 3}, finalcut::FSize{40, 15});
305 setMinimumSize(finalcut::FSize{25, 9});
306 FWidget::initLayout();
307 };
308 void on_new_file();
309 void on_open_file();
310 void on_save_file();
311 void on_save_file_as();
312 void on_new_item();
313 void on_edit_item();
314 void on_new_category();
315 void on_edit_category();
316 void on_delete_item();
317 void on_remove_item();
318 void on_delete_category();
321 void on_check_items();
322 void on_uncheck_items();
323 void on_toggle_items();
324 void on_copy_item();
329 void on_view_checked();
330 void on_view_unchecked();
331 static void bring_to_front(finalcut::FWindow* window);
335 std::vector<std::shared_ptr<Category>> get_categories() {
336 return base_app->get_categories();
337 }
340 void onUserEvent(finalcut::FUserEvent* ev) override;
341};
342
343} // namespace fc
344} // namespace fdsd
345
346#endif // FINALCUT_HPP
A pure virtual class acting as an interface for front-end implementations.
KitListBaseApp()
Default constructor.
std::string filename
The current filename the Model was loaded from.
state_filter
Constants for filtering items depending on their checked state.
Definition model.hpp:104
std::shared_ptr< Category > category
void set_name(finalcut::FString name)
finalcut::FString get_name()
CategoryDialog(finalcut::FWidget *parent, KitListBaseApp *base_app, int32_t category_id)
finalcut::FString getClassName() const override
finalcut::FLineEdit input_name
Displays the list of categories.
virtual void onFocusIn(finalcut::FFocusEvent *ev) override
finalcut::FListBox * category_list
CategoryListDialog(finalcut::FWidget *parent, KitListBaseApp *base_app)
Constructor.
std::shared_ptr< Category > get_current_category()
void create_item_list_view(int32_t category_id)
finalcut::FString getClassName() const override
KitListBaseApp * base_app
finalcut::FLineEdit input_name
finalcut::FButton btn_cancel
finalcut::FString getClassName() const override
void set_checked(bool checked)
std::shared_ptr< Item > item
finalcut::FString get_name()
finalcut::FCheckBox checkbox
ItemDialog(finalcut::FWidget *parent, KitListBaseApp *base_app, int32_t item_id)
void set_name(finalcut::FString name)
finalcut::FButton btn_ok
Displays a list of items, optionally for a specific Category.
void refresh_item_check_status(std::shared_ptr< Item > item)
ItemListDialog(finalcut::FWidget *parent, KitListBaseApp *base_app, int32_t category_id)
Constructor.
finalcut::FListView item_list_view
virtual void onFocusIn(finalcut::FFocusEvent *ev) override
finalcut::FString getClassName() const override
KitListFinalcut()
Default constructor.
int run(int argc, char *argv[], const std::string filename)
Runs the FINAL CUT text based user interface.
std::vector< std::shared_ptr< Category > > get_categories()
CategoryListDialog * get_category_dialog()
void remove_item_list_dialog(int32_t removed_category)
void onClose(finalcut::FCloseEvent *) override
void update_checked_filter_state(Model::state_filter state)
finalcut::FStatusBar status_bar
ItemListDialog * get_item_dialog_for_category_id(int32_t category_id)
finalcut::FMenuBar menu_bar
finalcut::FString getClassName() const override
bool confirm_delete(std::shared_ptr< Category > category)
static void bring_to_front(finalcut::FWindow *window)
finalcut::FDialogListMenu window
void onUserEvent(finalcut::FUserEvent *ev) override
KitListWindow(finalcut::FWidget *parent, KitListBaseApp *base_app)
Constuctor.
void copy_current_item_and_select_target_categories()
void copy_checked_item_and_select_target_categories()
finalcut::FString getClassName() const override
SelectCategoriesDialog(finalcut::FWidget *parent, KitListBaseApp *base_app)
std::vector< int32_t > get_selected_category_ids()
A namespace for the FINALCUT user interface.
Defines the application's menu layout.
finalcut::FRadioMenuItem view_checked_unchecked
KitListMenu(finalcut::FMenuBar &menu_bar)
Copyright 2008-2025 Frank Dean