mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 10:42:45 +00:00 
			
		
		
		
	Applications: Run clang-format on everything.
This commit is contained in:
		
							parent
							
								
									e09c3a1ae8
								
							
						
					
					
						commit
						fd604a7c68
					
				
					 24 changed files with 350 additions and 294 deletions
				
			
		|  | @ -1,9 +1,9 @@ | ||||||
| #include <LibGUI/GApplication.h> | #include <LibGUI/GApplication.h> | ||||||
| #include <LibGUI/GWindow.h> |  | ||||||
| #include <LibGUI/GLabel.h> |  | ||||||
| #include <LibGUI/GButton.h> |  | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GBoxLayout.h> | ||||||
|  | #include <LibGUI/GButton.h> | ||||||
| #include <LibGUI/GDesktop.h> | #include <LibGUI/GDesktop.h> | ||||||
|  | #include <LibGUI/GLabel.h> | ||||||
|  | #include <LibGUI/GWindow.h> | ||||||
| #include <sys/utsname.h> | #include <sys/utsname.h> | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) | int main(int argc, char** argv) | ||||||
|  | @ -49,7 +49,7 @@ int main(int argc, char** argv) | ||||||
|     quit_button->set_text("Okay"); |     quit_button->set_text("Okay"); | ||||||
|     quit_button->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); |     quit_button->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||||
|     quit_button->set_preferred_size({ 100, 20 }); |     quit_button->set_preferred_size({ 100, 20 }); | ||||||
|     quit_button->on_click = [] (GButton&) { |     quit_button->on_click = [](GButton&) { | ||||||
|         GApplication::the().quit(0); |         GApplication::the().quit(0); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #include <LibGUI/GApplication.h> |  | ||||||
| #include <LibCore/CHttpRequest.h> | #include <LibCore/CHttpRequest.h> | ||||||
| #include <LibCore/CHttpResponse.h> | #include <LibCore/CHttpResponse.h> | ||||||
| #include <LibCore/CNetworkJob.h> | #include <LibCore/CNetworkJob.h> | ||||||
|  | #include <LibGUI/GApplication.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) | int main(int argc, char** argv) | ||||||
|  | @ -13,7 +13,7 @@ int main(int argc, char** argv) | ||||||
|     request.set_path("/"); |     request.set_path("/"); | ||||||
| 
 | 
 | ||||||
|     auto job = request.schedule(); |     auto job = request.schedule(); | ||||||
|     job->on_finish = [&job] (bool success) { |     job->on_finish = [&job](bool success) { | ||||||
|         if (!success) { |         if (!success) { | ||||||
|             dbgprintf("on_finish: request failed :(\n"); |             dbgprintf("on_finish: request failed :(\n"); | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| #include "DirectoryView.h" | #include "DirectoryView.h" | ||||||
| #include <LibGUI/GSortingProxyModel.h> |  | ||||||
| #include <AK/FileSystemPath.h> | #include <AK/FileSystemPath.h> | ||||||
| #include <unistd.h> | #include <LibGUI/GSortingProxyModel.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| void DirectoryView::handle_activation(const GModelIndex& index) | void DirectoryView::handle_activation(const GModelIndex& index) | ||||||
| { | { | ||||||
|  | @ -58,28 +58,28 @@ DirectoryView::DirectoryView(GWidget* parent) | ||||||
| 
 | 
 | ||||||
|     m_item_view->set_model_column(GDirectoryModel::Column::Name); |     m_item_view->set_model_column(GDirectoryModel::Column::Name); | ||||||
| 
 | 
 | ||||||
|     m_item_view->on_model_notification = [this] (const GModelNotification& notification) { |     m_item_view->on_model_notification = [this](const GModelNotification& notification) { | ||||||
|         if (notification.type() == GModelNotification::Type::ModelUpdated) { |         if (notification.type() == GModelNotification::Type::ModelUpdated) { | ||||||
|             set_status_message(String::format("%d item%s (%u byte%s)", |             set_status_message(String::format("%d item%s (%u byte%s)", | ||||||
|                                               model().row_count(), |                 model().row_count(), | ||||||
|                                               model().row_count() != 1 ? "s" : "", |                 model().row_count() != 1 ? "s" : "", | ||||||
|                                               model().bytes_in_files(), |                 model().bytes_in_files(), | ||||||
|                                               model().bytes_in_files() != 1 ? "s" : "")); |                 model().bytes_in_files() != 1 ? "s" : "")); | ||||||
| 
 | 
 | ||||||
|             if (on_path_change) |             if (on_path_change) | ||||||
|                 on_path_change(model().path()); |                 on_path_change(model().path()); | ||||||
|         } |         } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     m_model->on_thumbnail_progress = [this] (int done, int total) { |     m_model->on_thumbnail_progress = [this](int done, int total) { | ||||||
|         if (on_thumbnail_progress) |         if (on_thumbnail_progress) | ||||||
|             on_thumbnail_progress(done, total); |             on_thumbnail_progress(done, total); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     m_item_view->on_activation = [&] (const GModelIndex& index) { |     m_item_view->on_activation = [&](const GModelIndex& index) { | ||||||
|         handle_activation(index); |         handle_activation(index); | ||||||
|     }; |     }; | ||||||
|     m_table_view->on_activation = [&] (auto& index) { |     m_table_view->on_activation = [&](auto& index) { | ||||||
|         auto& filter_model = (GSortingProxyModel&)*m_table_view->model(); |         auto& filter_model = (GSortingProxyModel&)*m_table_view->model(); | ||||||
|         handle_activation(filter_model.map_to_target(index)); |         handle_activation(filter_model.map_to_target(index)); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  | @ -1,25 +1,25 @@ | ||||||
| #include <LibGUI/GWindow.h> | #include "DirectoryView.h" | ||||||
| #include <LibGUI/GWidget.h> | #include <AK/FileSystemPath.h> | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibCore/CUserInfo.h> | ||||||
|  | #include <LibGUI/GAction.h> | ||||||
| #include <LibGUI/GApplication.h> | #include <LibGUI/GApplication.h> | ||||||
|  | #include <LibGUI/GBoxLayout.h> | ||||||
|  | #include <LibGUI/GFileSystemModel.h> | ||||||
|  | #include <LibGUI/GInputBox.h> | ||||||
|  | #include <LibGUI/GLabel.h> | ||||||
|  | #include <LibGUI/GMenuBar.h> | ||||||
|  | #include <LibGUI/GMessageBox.h> | ||||||
|  | #include <LibGUI/GProgressBar.h> | ||||||
|  | #include <LibGUI/GSplitter.h> | ||||||
| #include <LibGUI/GStatusBar.h> | #include <LibGUI/GStatusBar.h> | ||||||
| #include <LibGUI/GTextEditor.h> | #include <LibGUI/GTextEditor.h> | ||||||
| #include <LibGUI/GToolBar.h> | #include <LibGUI/GToolBar.h> | ||||||
| #include <LibGUI/GMenuBar.h> |  | ||||||
| #include <LibGUI/GAction.h> |  | ||||||
| #include <LibGUI/GLabel.h> |  | ||||||
| #include <LibGUI/GInputBox.h> |  | ||||||
| #include <LibGUI/GMessageBox.h> |  | ||||||
| #include <LibGUI/GProgressBar.h> |  | ||||||
| #include <LibGUI/GTreeView.h> | #include <LibGUI/GTreeView.h> | ||||||
| #include <LibGUI/GFileSystemModel.h> | #include <LibGUI/GWidget.h> | ||||||
| #include <LibGUI/GSplitter.h> | #include <LibGUI/GWindow.h> | ||||||
| #include <LibCore/CUserInfo.h> |  | ||||||
| #include <AK/FileSystemPath.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| #include <signal.h> | #include <signal.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include "DirectoryView.h" | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) | int main(int argc, char** argv) | ||||||
| { | { | ||||||
|  | @ -76,24 +76,24 @@ int main(int argc, char** argv) | ||||||
|         directory_view->open(location_textbox->text()); |         directory_view->open(location_textbox->text()); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     file_system_model->on_selection_changed = [&] (auto& index) { |     file_system_model->on_selection_changed = [&](auto& index) { | ||||||
|         auto path = file_system_model->path(index); |         auto path = file_system_model->path(index); | ||||||
|         if (directory_view->path() == path) |         if (directory_view->path() == path) | ||||||
|             return; |             return; | ||||||
|         directory_view->open(path); |         directory_view->open(path); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     auto open_parent_directory_action = GAction::create("Open parent directory", { Mod_Alt, Key_Up }, GraphicsBitmap::load_from_file("/res/icons/16x16/open-parent-directory.png"), [directory_view] (const GAction&) { |     auto open_parent_directory_action = GAction::create("Open parent directory", { Mod_Alt, Key_Up }, GraphicsBitmap::load_from_file("/res/icons/16x16/open-parent-directory.png"), [directory_view](const GAction&) { | ||||||
|         directory_view->open_parent_directory(); |         directory_view->open_parent_directory(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto mkdir_action = GAction::create("New directory...", GraphicsBitmap::load_from_file("/res/icons/16x16/mkdir.png"), [&] (const GAction&) { |     auto mkdir_action = GAction::create("New directory...", GraphicsBitmap::load_from_file("/res/icons/16x16/mkdir.png"), [&](const GAction&) { | ||||||
|         GInputBox input_box("Enter name:", "New directory", window); |         GInputBox input_box("Enter name:", "New directory", window); | ||||||
|         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) { |         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) { | ||||||
|             auto new_dir_path = FileSystemPath(String::format("%s/%s", |             auto new_dir_path = FileSystemPath(String::format("%s/%s", | ||||||
|                 directory_view->path().characters(), |                                                    directory_view->path().characters(), | ||||||
|                 input_box.text_value().characters() |                                                    input_box.text_value().characters())) | ||||||
|             )).string(); |                                     .string(); | ||||||
|             int rc = mkdir(new_dir_path.characters(), 0777); |             int rc = mkdir(new_dir_path.characters(), 0777); | ||||||
|             if (rc < 0) { |             if (rc < 0) { | ||||||
|                 GMessageBox::show(String::format("mkdir(\"%s\") failed: %s", new_dir_path.characters(), strerror(errno)), "Error", GMessageBox::Type::Error, window); |                 GMessageBox::show(String::format("mkdir(\"%s\") failed: %s", new_dir_path.characters(), strerror(errno)), "Error", GMessageBox::Type::Error, window); | ||||||
|  | @ -106,7 +106,7 @@ int main(int argc, char** argv) | ||||||
|     RetainPtr<GAction> view_as_table_action; |     RetainPtr<GAction> view_as_table_action; | ||||||
|     RetainPtr<GAction> view_as_icons_action; |     RetainPtr<GAction> view_as_icons_action; | ||||||
| 
 | 
 | ||||||
|     view_as_table_action = GAction::create("Table view", { Mod_Ctrl, KeyCode::Key_L }, GraphicsBitmap::load_from_file("/res/icons/16x16/table-view.png"), [&] (const GAction&) { |     view_as_table_action = GAction::create("Table view", { Mod_Ctrl, KeyCode::Key_L }, GraphicsBitmap::load_from_file("/res/icons/16x16/table-view.png"), [&](const GAction&) { | ||||||
|         directory_view->set_view_mode(DirectoryView::ViewMode::List); |         directory_view->set_view_mode(DirectoryView::ViewMode::List); | ||||||
|         view_as_icons_action->set_checked(false); |         view_as_icons_action->set_checked(false); | ||||||
|         view_as_table_action->set_checked(true); |         view_as_table_action->set_checked(true); | ||||||
|  | @ -114,7 +114,7 @@ int main(int argc, char** argv) | ||||||
|     view_as_table_action->set_checkable(true); |     view_as_table_action->set_checkable(true); | ||||||
|     view_as_table_action->set_checked(false); |     view_as_table_action->set_checked(false); | ||||||
| 
 | 
 | ||||||
|     view_as_icons_action = GAction::create("Icon view", { Mod_Ctrl, KeyCode::Key_I }, GraphicsBitmap::load_from_file("/res/icons/16x16/icon-view.png"), [&] (const GAction&) { |     view_as_icons_action = GAction::create("Icon view", { Mod_Ctrl, KeyCode::Key_I }, GraphicsBitmap::load_from_file("/res/icons/16x16/icon-view.png"), [&](const GAction&) { | ||||||
|         directory_view->set_view_mode(DirectoryView::ViewMode::Icon); |         directory_view->set_view_mode(DirectoryView::ViewMode::Icon); | ||||||
|         view_as_table_action->set_checked(false); |         view_as_table_action->set_checked(false); | ||||||
|         view_as_icons_action->set_checked(true); |         view_as_icons_action->set_checked(true); | ||||||
|  | @ -122,20 +122,20 @@ int main(int argc, char** argv) | ||||||
|     view_as_icons_action->set_checkable(true); |     view_as_icons_action->set_checkable(true); | ||||||
|     view_as_icons_action->set_checked(true); |     view_as_icons_action->set_checked(true); | ||||||
| 
 | 
 | ||||||
|     auto copy_action = GAction::create("Copy", GraphicsBitmap::load_from_file("/res/icons/16x16/edit-copy.png"), [] (const GAction&) { |     auto copy_action = GAction::create("Copy", GraphicsBitmap::load_from_file("/res/icons/16x16/edit-copy.png"), [](const GAction&) { | ||||||
|         dbgprintf("'Copy' action activated!\n"); |         dbgprintf("'Copy' action activated!\n"); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto delete_action = GAction::create("Delete", GraphicsBitmap::load_from_file("/res/icons/16x16/delete.png"), [] (const GAction&) { |     auto delete_action = GAction::create("Delete", GraphicsBitmap::load_from_file("/res/icons/16x16/delete.png"), [](const GAction&) { | ||||||
|         dbgprintf("'Delete' action activated!\n"); |         dbgprintf("'Delete' action activated!\n"); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto go_back_action = GAction::create("Go Back", GraphicsBitmap::load_from_file("/res/icons/16x16/go-back.png"), [directory_view] (const GAction&) { |     auto go_back_action = GAction::create("Go Back", GraphicsBitmap::load_from_file("/res/icons/16x16/go-back.png"), [directory_view](const GAction&) { | ||||||
|         dbgprintf("'Go Back' action activated!\n"); |         dbgprintf("'Go Back' action activated!\n"); | ||||||
|         directory_view->open_previous_directory(); |         directory_view->open_previous_directory(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto go_forward_action = GAction::create("Go Forward", GraphicsBitmap::load_from_file("/res/icons/16x16/go-forward.png"), [directory_view] (const GAction&) { |     auto go_forward_action = GAction::create("Go Forward", GraphicsBitmap::load_from_file("/res/icons/16x16/go-forward.png"), [directory_view](const GAction&) { | ||||||
|         dbgprintf("'Go Forward' action activated!\n"); |         dbgprintf("'Go Forward' action activated!\n"); | ||||||
|         directory_view->open_next_directory(); |         directory_view->open_next_directory(); | ||||||
|     }); |     }); | ||||||
|  | @ -143,7 +143,7 @@ int main(int argc, char** argv) | ||||||
|     auto menubar = make<GMenuBar>(); |     auto menubar = make<GMenuBar>(); | ||||||
| 
 | 
 | ||||||
|     auto app_menu = make<GMenu>("File Manager"); |     auto app_menu = make<GMenu>("File Manager"); | ||||||
|     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) { |     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { | ||||||
|         GApplication::the().quit(0); |         GApplication::the().quit(0); | ||||||
|         return; |         return; | ||||||
|     })); |     })); | ||||||
|  | @ -167,7 +167,7 @@ int main(int argc, char** argv) | ||||||
|     menubar->add_menu(move(go_menu)); |     menubar->add_menu(move(go_menu)); | ||||||
| 
 | 
 | ||||||
|     auto help_menu = make<GMenu>("Help"); |     auto help_menu = make<GMenu>("Help"); | ||||||
|     help_menu->add_action(GAction::create("About", [] (const GAction&) { |     help_menu->add_action(GAction::create("About", [](const GAction&) { | ||||||
|         dbgprintf("FIXME: Implement Help/About\n"); |         dbgprintf("FIXME: Implement Help/About\n"); | ||||||
|     })); |     })); | ||||||
|     menubar->add_menu(move(help_menu)); |     menubar->add_menu(move(help_menu)); | ||||||
|  | @ -187,7 +187,7 @@ int main(int argc, char** argv) | ||||||
|     main_toolbar->add_action(*view_as_icons_action); |     main_toolbar->add_action(*view_as_icons_action); | ||||||
|     main_toolbar->add_action(*view_as_table_action); |     main_toolbar->add_action(*view_as_table_action); | ||||||
| 
 | 
 | ||||||
|     directory_view->on_path_change = [window, location_textbox, &file_system_model, tree_view, &go_forward_action, &go_back_action, directory_view] (const String& new_path) { |     directory_view->on_path_change = [window, location_textbox, &file_system_model, tree_view, &go_forward_action, &go_back_action, directory_view](const String& new_path) { | ||||||
|         window->set_title(String::format("File Manager: %s", new_path.characters())); |         window->set_title(String::format("File Manager: %s", new_path.characters())); | ||||||
|         location_textbox->set_text(new_path); |         location_textbox->set_text(new_path); | ||||||
|         file_system_model->set_selected_index(file_system_model->index(new_path)); |         file_system_model->set_selected_index(file_system_model->index(new_path)); | ||||||
|  | @ -195,15 +195,15 @@ int main(int argc, char** argv) | ||||||
|         tree_view->update(); |         tree_view->update(); | ||||||
| 
 | 
 | ||||||
|         go_forward_action->set_enabled(directory_view->path_history_position() |         go_forward_action->set_enabled(directory_view->path_history_position() | ||||||
|                                        < directory_view->path_history_size() - 1); |             < directory_view->path_history_size() - 1); | ||||||
|         go_back_action->set_enabled(directory_view->path_history_position() > 0); |         go_back_action->set_enabled(directory_view->path_history_position() > 0); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     directory_view->on_status_message = [statusbar] (const StringView& message) { |     directory_view->on_status_message = [statusbar](const StringView& message) { | ||||||
|         statusbar->set_text(message); |         statusbar->set_text(message); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     directory_view->on_thumbnail_progress = [&] (int done, int total) { |     directory_view->on_thumbnail_progress = [&](int done, int total) { | ||||||
|         if (done == total) { |         if (done == total) { | ||||||
|             progressbar->set_visible(false); |             progressbar->set_visible(false); | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
|  | @ -1,13 +1,13 @@ | ||||||
| #include "FontEditor.h" | #include "FontEditor.h" | ||||||
| #include "GlyphMapWidget.h" |  | ||||||
| #include "GlyphEditorWidget.h" | #include "GlyphEditorWidget.h" | ||||||
| #include <LibGUI/GPainter.h> | #include "GlyphMapWidget.h" | ||||||
| #include <LibGUI/GButton.h> | #include <LibGUI/GButton.h> | ||||||
| #include <LibGUI/GLabel.h> |  | ||||||
| #include <LibGUI/GTextBox.h> |  | ||||||
| #include <LibGUI/GCheckBox.h> | #include <LibGUI/GCheckBox.h> | ||||||
| #include <LibGUI/GSpinBox.h> |  | ||||||
| #include <LibGUI/GGroupBox.h> | #include <LibGUI/GGroupBox.h> | ||||||
|  | #include <LibGUI/GLabel.h> | ||||||
|  | #include <LibGUI/GPainter.h> | ||||||
|  | #include <LibGUI/GSpinBox.h> | ||||||
|  | #include <LibGUI/GTextBox.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| 
 | 
 | ||||||
| FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_font, GWidget* parent) | FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_font, GWidget* parent) | ||||||
|  | @ -52,7 +52,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_ | ||||||
|     auto* save_button = new GButton(this); |     auto* save_button = new GButton(this); | ||||||
|     save_button->set_text("Save"); |     save_button->set_text("Save"); | ||||||
|     save_button->set_relative_rect({ 5, 300, 105, 20 }); |     save_button->set_relative_rect({ 5, 300, 105, 20 }); | ||||||
|     save_button->on_click = [this] (GButton&) { |     save_button->on_click = [this](GButton&) { | ||||||
|         dbgprintf("write to file: '%s'\n", m_path.characters()); |         dbgprintf("write to file: '%s'\n", m_path.characters()); | ||||||
|         m_edited_font->write_to_file(m_path); |         m_edited_font->write_to_file(m_path); | ||||||
|     }; |     }; | ||||||
|  | @ -60,7 +60,7 @@ FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_ | ||||||
|     auto* quit_button = new GButton(this); |     auto* quit_button = new GButton(this); | ||||||
|     quit_button->set_text("Quit"); |     quit_button->set_text("Quit"); | ||||||
|     quit_button->set_relative_rect({ 110, 300, 105, 20 }); |     quit_button->set_relative_rect({ 110, 300, 105, 20 }); | ||||||
|     quit_button->on_click = [] (GButton&) { |     quit_button->on_click = [](GButton&) { | ||||||
|         exit(0); |         exit(0); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  | @ -91,25 +91,25 @@ FontEditorWidget::FontEditorWidget(const String& path, RetainPtr<Font>&& edited_ | ||||||
|         demo_label_2->update(); |         demo_label_2->update(); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     m_glyph_editor_widget->on_glyph_altered = [this, update_demo] (byte glyph) { |     m_glyph_editor_widget->on_glyph_altered = [this, update_demo](byte glyph) { | ||||||
|         m_glyph_map_widget->update_glyph(glyph); |         m_glyph_map_widget->update_glyph(glyph); | ||||||
|         update_demo(); |         update_demo(); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     m_glyph_map_widget->on_glyph_selected = [this, info_label, width_spinbox] (byte glyph) { |     m_glyph_map_widget->on_glyph_selected = [this, info_label, width_spinbox](byte glyph) { | ||||||
|         m_glyph_editor_widget->set_glyph(glyph); |         m_glyph_editor_widget->set_glyph(glyph); | ||||||
|         width_spinbox->set_value(m_edited_font->glyph_width(m_glyph_map_widget->selected_glyph())); |         width_spinbox->set_value(m_edited_font->glyph_width(m_glyph_map_widget->selected_glyph())); | ||||||
|         info_label->set_text(String::format("0x%b (%c)", glyph, glyph)); |         info_label->set_text(String::format("0x%b (%c)", glyph, glyph)); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     fixed_width_checkbox->on_checked = [this, width_spinbox, update_demo] (bool checked) { |     fixed_width_checkbox->on_checked = [this, width_spinbox, update_demo](bool checked) { | ||||||
|         m_edited_font->set_fixed_width(checked); |         m_edited_font->set_fixed_width(checked); | ||||||
|         width_spinbox->set_value(m_edited_font->glyph_width(m_glyph_map_widget->selected_glyph())); |         width_spinbox->set_value(m_edited_font->glyph_width(m_glyph_map_widget->selected_glyph())); | ||||||
|         m_glyph_editor_widget->update(); |         m_glyph_editor_widget->update(); | ||||||
|         update_demo(); |         update_demo(); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     width_spinbox->on_change = [this, update_demo] (int value) { |     width_spinbox->on_change = [this, update_demo](int value) { | ||||||
|         m_edited_font->set_glyph_width(m_glyph_map_widget->selected_glyph(), value); |         m_edited_font->set_glyph_width(m_glyph_map_widget->selected_glyph(), value); | ||||||
|         m_glyph_editor_widget->update(); |         m_glyph_editor_widget->update(); | ||||||
|         m_glyph_map_widget->update_glyph(m_glyph_map_widget->selected_glyph()); |         m_glyph_map_widget->update_glyph(m_glyph_map_widget->selected_glyph()); | ||||||
|  |  | ||||||
|  | @ -44,7 +44,8 @@ Rect GlyphMapWidget::get_outer_rect(byte glyph) const | ||||||
|         row * (font().glyph_height() + m_vertical_spacing) + 1, |         row * (font().glyph_height() + m_vertical_spacing) + 1, | ||||||
|         font().max_glyph_width() + m_horizontal_spacing, |         font().max_glyph_width() + m_horizontal_spacing, | ||||||
|         font().glyph_height() + m_horizontal_spacing |         font().glyph_height() + m_horizontal_spacing | ||||||
|     }.translated(frame_thickness(), frame_thickness()); |     } | ||||||
|  |         .translated(frame_thickness(), frame_thickness()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GlyphMapWidget::update_glyph(byte glyph) | void GlyphMapWidget::update_glyph(byte glyph) | ||||||
|  | @ -71,8 +72,7 @@ void GlyphMapWidget::paint_event(GPaintEvent& event) | ||||||
|                 outer_rect.x() + m_horizontal_spacing / 2, |                 outer_rect.x() + m_horizontal_spacing / 2, | ||||||
|                 outer_rect.y() + m_vertical_spacing / 2, |                 outer_rect.y() + m_vertical_spacing / 2, | ||||||
|                 font().max_glyph_width(), |                 font().max_glyph_width(), | ||||||
|                 font().glyph_height() |                 font().glyph_height()); | ||||||
|             ); |  | ||||||
|             if (glyph == m_selected_glyph) { |             if (glyph == m_selected_glyph) { | ||||||
|                 painter.fill_rect(outer_rect, Color::from_rgb(0x84351a)); |                 painter.fill_rect(outer_rect, Color::from_rgb(0x84351a)); | ||||||
|                 painter.draw_glyph(inner_rect.location(), glyph, Color::White); |                 painter.draw_glyph(inner_rect.location(), glyph, Color::White); | ||||||
|  |  | ||||||
|  | @ -1,16 +1,16 @@ | ||||||
| #include "IRCAppWindow.h" | #include "IRCAppWindow.h" | ||||||
| #include "IRCWindow.h" | #include "IRCWindow.h" | ||||||
| #include "IRCWindowListModel.h" | #include "IRCWindowListModel.h" | ||||||
| #include <LibGUI/GApplication.h> |  | ||||||
| #include <LibGUI/GStackWidget.h> |  | ||||||
| #include <LibGUI/GTableView.h> |  | ||||||
| #include <LibGUI/GBoxLayout.h> |  | ||||||
| #include <LibGUI/GToolBar.h> |  | ||||||
| #include <LibGUI/GAction.h> | #include <LibGUI/GAction.h> | ||||||
|  | #include <LibGUI/GApplication.h> | ||||||
|  | #include <LibGUI/GBoxLayout.h> | ||||||
|  | #include <LibGUI/GInputBox.h> | ||||||
| #include <LibGUI/GMenu.h> | #include <LibGUI/GMenu.h> | ||||||
| #include <LibGUI/GMenuBar.h> | #include <LibGUI/GMenuBar.h> | ||||||
| #include <LibGUI/GInputBox.h> |  | ||||||
| #include <LibGUI/GSplitter.h> | #include <LibGUI/GSplitter.h> | ||||||
|  | #include <LibGUI/GStackWidget.h> | ||||||
|  | #include <LibGUI/GTableView.h> | ||||||
|  | #include <LibGUI/GToolBar.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| 
 | 
 | ||||||
|  | @ -36,7 +36,7 @@ void IRCAppWindow::update_title() | ||||||
| 
 | 
 | ||||||
| void IRCAppWindow::setup_client() | void IRCAppWindow::setup_client() | ||||||
| { | { | ||||||
|     m_client.aid_create_window = [this] (void* owner, IRCWindow::Type type, const String& name) { |     m_client.aid_create_window = [this](void* owner, IRCWindow::Type type, const String& name) { | ||||||
|         return &create_window(owner, type, name); |         return &create_window(owner, type, name); | ||||||
|     }; |     }; | ||||||
|     m_client.aid_get_active_window = [this] { |     m_client.aid_get_active_window = [this] { | ||||||
|  | @ -45,7 +45,7 @@ void IRCAppWindow::setup_client() | ||||||
|     m_client.aid_update_window_list = [this] { |     m_client.aid_update_window_list = [this] { | ||||||
|         m_window_list->model()->update(); |         m_window_list->model()->update(); | ||||||
|     }; |     }; | ||||||
|     m_client.on_nickname_changed = [this] (const String&) { |     m_client.on_nickname_changed = [this](const String&) { | ||||||
|         update_title(); |         update_title(); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  | @ -64,33 +64,33 @@ void IRCAppWindow::setup_client() | ||||||
| 
 | 
 | ||||||
| void IRCAppWindow::setup_actions() | void IRCAppWindow::setup_actions() | ||||||
| { | { | ||||||
|     m_join_action = GAction::create("Join channel", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-join.png"), [&] (auto&) { |     m_join_action = GAction::create("Join channel", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-join.png"), [&](auto&) { | ||||||
|         GInputBox input_box("Enter channel name:", "Join channel", this); |         GInputBox input_box("Enter channel name:", "Join channel", this); | ||||||
|         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) |         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) | ||||||
|             m_client.handle_join_action(input_box.text_value()); |             m_client.handle_join_action(input_box.text_value()); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_part_action = GAction::create("Part from channel", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-part.png"), [] (auto&) { |     m_part_action = GAction::create("Part from channel", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-part.png"), [](auto&) { | ||||||
|         printf("FIXME: Implement part action\n"); |         printf("FIXME: Implement part action\n"); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_whois_action = GAction::create("Whois user", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-whois.png"), [&] (auto&) { |     m_whois_action = GAction::create("Whois user", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-whois.png"), [&](auto&) { | ||||||
|         GInputBox input_box("Enter nickname:", "IRC WHOIS lookup", this); |         GInputBox input_box("Enter nickname:", "IRC WHOIS lookup", this); | ||||||
|         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) |         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) | ||||||
|             m_client.handle_whois_action(input_box.text_value()); |             m_client.handle_whois_action(input_box.text_value()); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_open_query_action = GAction::create("Open query", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-open-query.png"), [&] (auto&) { |     m_open_query_action = GAction::create("Open query", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-open-query.png"), [&](auto&) { | ||||||
|         GInputBox input_box("Enter nickname:", "Open IRC query with...", this); |         GInputBox input_box("Enter nickname:", "Open IRC query with...", this); | ||||||
|         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) |         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) | ||||||
|             m_client.handle_open_query_action(input_box.text_value()); |             m_client.handle_open_query_action(input_box.text_value()); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_close_query_action = GAction::create("Close query", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-close-query.png"), [] (auto&) { |     m_close_query_action = GAction::create("Close query", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-close-query.png"), [](auto&) { | ||||||
|         printf("FIXME: Implement close-query action\n"); |         printf("FIXME: Implement close-query action\n"); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     m_change_nick_action = GAction::create("Change nickname", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-nick.png"), [this] (auto&) { |     m_change_nick_action = GAction::create("Change nickname", GraphicsBitmap::load_from_file("/res/icons/16x16/irc-nick.png"), [this](auto&) { | ||||||
|         GInputBox input_box("Enter nickname:", "Change nickname", this); |         GInputBox input_box("Enter nickname:", "Change nickname", this); | ||||||
|         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) |         if (input_box.exec() == GInputBox::ExecOK && !input_box.text_value().is_empty()) | ||||||
|             m_client.handle_change_nick_action(input_box.text_value()); |             m_client.handle_change_nick_action(input_box.text_value()); | ||||||
|  | @ -101,7 +101,7 @@ void IRCAppWindow::setup_menus() | ||||||
| { | { | ||||||
|     auto menubar = make<GMenuBar>(); |     auto menubar = make<GMenuBar>(); | ||||||
|     auto app_menu = make<GMenu>("IRC Client"); |     auto app_menu = make<GMenu>("IRC Client"); | ||||||
|     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) { |     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { | ||||||
|         dbgprintf("Terminal: Quit menu activated!\n"); |         dbgprintf("Terminal: Quit menu activated!\n"); | ||||||
|         GApplication::the().quit(0); |         GApplication::the().quit(0); | ||||||
|         return; |         return; | ||||||
|  | @ -120,7 +120,7 @@ void IRCAppWindow::setup_menus() | ||||||
|     menubar->add_menu(move(server_menu)); |     menubar->add_menu(move(server_menu)); | ||||||
| 
 | 
 | ||||||
|     auto help_menu = make<GMenu>("Help"); |     auto help_menu = make<GMenu>("Help"); | ||||||
|     help_menu->add_action(GAction::create("About", [] (const GAction&) { |     help_menu->add_action(GAction::create("About", [](const GAction&) { | ||||||
|         dbgprintf("FIXME: Implement Help/About\n"); |         dbgprintf("FIXME: Implement Help/About\n"); | ||||||
|     })); |     })); | ||||||
|     menubar->add_menu(move(help_menu)); |     menubar->add_menu(move(help_menu)); | ||||||
|  | @ -156,7 +156,7 @@ void IRCAppWindow::setup_widgets() | ||||||
|     m_window_list->set_activates_on_selection(true); |     m_window_list->set_activates_on_selection(true); | ||||||
|     m_window_list->set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); |     m_window_list->set_size_policy(SizePolicy::Fixed, SizePolicy::Fill); | ||||||
|     m_window_list->set_preferred_size({ 100, 0 }); |     m_window_list->set_preferred_size({ 100, 0 }); | ||||||
|     m_window_list->on_activation = [this] (auto& index) { |     m_window_list->on_activation = [this](auto& index) { | ||||||
|         auto& window = m_client.window_at(index.row()); |         auto& window = m_client.window_at(index.row()); | ||||||
|         m_container->set_active_widget(&window); |         m_container->set_active_widget(&window); | ||||||
|         window.clear_unread_count(); |         window.clear_unread_count(); | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "IRCChannel.h" | #include "IRCChannel.h" | ||||||
| #include "IRCClient.h" |  | ||||||
| #include "IRCChannelMemberListModel.h" | #include "IRCChannelMemberListModel.h" | ||||||
|  | #include "IRCClient.h" | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
| 
 | 
 | ||||||
|  | @ -37,7 +37,7 @@ void IRCChannel::add_member(const String& name, char prefix) | ||||||
| 
 | 
 | ||||||
| void IRCChannel::remove_member(const String& name) | void IRCChannel::remove_member(const String& name) | ||||||
| { | { | ||||||
|     m_members.remove_first_matching([&] (auto& member) { return name == member.name; }); |     m_members.remove_first_matching([&](auto& member) { return name == member.name; }); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IRCChannel::add_message(char prefix, const String& name, const String& text, Color color) | void IRCChannel::add_message(char prefix, const String& name, const String& text, Color color) | ||||||
|  |  | ||||||
|  | @ -25,7 +25,8 @@ int IRCChannelMemberListModel::column_count(const GModelIndex&) const | ||||||
| String IRCChannelMemberListModel::column_name(int column) const | String IRCChannelMemberListModel::column_name(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Name: return "Name"; |     case Column::Name: | ||||||
|  |         return "Name"; | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  | @ -33,7 +34,8 @@ String IRCChannelMemberListModel::column_name(int column) const | ||||||
| GModel::ColumnMetadata IRCChannelMemberListModel::column_metadata(int column) const | GModel::ColumnMetadata IRCChannelMemberListModel::column_metadata(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Name: return { 70, TextAlignment::CenterLeft }; |     case Column::Name: | ||||||
|  |         return { 70, TextAlignment::CenterLeft }; | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  | @ -42,10 +44,11 @@ GVariant IRCChannelMemberListModel::data(const GModelIndex& index, Role role) co | ||||||
| { | { | ||||||
|     if (role == Role::Display) { |     if (role == Role::Display) { | ||||||
|         switch (index.column()) { |         switch (index.column()) { | ||||||
|         case Column::Name: return m_channel.member_at(index.row()); |         case Column::Name: | ||||||
|  |             return m_channel.member_at(index.row()); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return { }; |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IRCChannelMemberListModel::update() | void IRCChannelMemberListModel::update() | ||||||
|  |  | ||||||
|  | @ -1,20 +1,21 @@ | ||||||
| #include "IRCClient.h" | #include "IRCClient.h" | ||||||
| #include "IRCChannel.h" | #include "IRCChannel.h" | ||||||
| #include "IRCQuery.h" |  | ||||||
| #include "IRCLogBuffer.h" | #include "IRCLogBuffer.h" | ||||||
|  | #include "IRCQuery.h" | ||||||
| #include "IRCWindow.h" | #include "IRCWindow.h" | ||||||
| #include "IRCWindowListModel.h" | #include "IRCWindowListModel.h" | ||||||
| #include <LibCore/CNotifier.h> | #include <LibCore/CNotifier.h> | ||||||
| #include <sys/socket.h> |  | ||||||
| #include <netinet/in.h> |  | ||||||
| #include <arpa/inet.h> | #include <arpa/inet.h> | ||||||
| #include <unistd.h> | #include <netinet/in.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
|  | #include <sys/socket.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
|  | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| #define IRC_DEBUG | #define IRC_DEBUG | ||||||
| 
 | 
 | ||||||
| enum IRCNumeric { | enum IRCNumeric | ||||||
|  | { | ||||||
|     RPL_WHOISUSER = 311, |     RPL_WHOISUSER = 311, | ||||||
|     RPL_WHOISSERVER = 312, |     RPL_WHOISSERVER = 312, | ||||||
|     RPL_WHOISOPERATOR = 313, |     RPL_WHOISOPERATOR = 313, | ||||||
|  | @ -43,7 +44,7 @@ IRCClient::~IRCClient() | ||||||
| { | { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IRCClient::set_server(const String &hostname, int port) | void IRCClient::set_server(const String& hostname, int port) | ||||||
| { | { | ||||||
|     m_hostname = hostname; |     m_hostname = hostname; | ||||||
|     m_port = port; |     m_port = port; | ||||||
|  | @ -105,14 +106,16 @@ void IRCClient::process_line(ByteBuffer&& line) | ||||||
|     Vector<char, 32> prefix; |     Vector<char, 32> prefix; | ||||||
|     Vector<char, 32> command; |     Vector<char, 32> command; | ||||||
|     Vector<char, 256> current_parameter; |     Vector<char, 256> current_parameter; | ||||||
|     enum { |     enum | ||||||
|  |     { | ||||||
|         Start, |         Start, | ||||||
|         InPrefix, |         InPrefix, | ||||||
|         InCommand, |         InCommand, | ||||||
|         InStartOfParameter, |         InStartOfParameter, | ||||||
|         InParameter, |         InParameter, | ||||||
|         InTrailingParameter, |         InTrailingParameter, | ||||||
|     } state = Start; |     } state | ||||||
|  |         = Start; | ||||||
| 
 | 
 | ||||||
|     for (int i = 0; i < line.size(); ++i) { |     for (int i = 0; i < line.size(); ++i) { | ||||||
|         char ch = line[i]; |         char ch = line[i]; | ||||||
|  | @ -216,8 +219,7 @@ void IRCClient::handle(const Message& msg) | ||||||
|     printf("IRCClient::execute: prefix='%s', command='%s', arguments=%d\n", |     printf("IRCClient::execute: prefix='%s', command='%s', arguments=%d\n", | ||||||
|         msg.prefix.characters(), |         msg.prefix.characters(), | ||||||
|         msg.command.characters(), |         msg.command.characters(), | ||||||
|         msg.arguments.size() |         msg.arguments.size()); | ||||||
|     ); |  | ||||||
| 
 | 
 | ||||||
|     int i = 0; |     int i = 0; | ||||||
|     for (auto& arg : msg.arguments) { |     for (auto& arg : msg.arguments) { | ||||||
|  | @ -231,16 +233,26 @@ void IRCClient::handle(const Message& msg) | ||||||
| 
 | 
 | ||||||
|     if (is_numeric) { |     if (is_numeric) { | ||||||
|         switch (numeric) { |         switch (numeric) { | ||||||
|         case RPL_WHOISCHANNELS: return handle_rpl_whoischannels(msg); |         case RPL_WHOISCHANNELS: | ||||||
|         case RPL_ENDOFWHOIS: return handle_rpl_endofwhois(msg); |             return handle_rpl_whoischannels(msg); | ||||||
|         case RPL_WHOISOPERATOR: return handle_rpl_whoisoperator(msg); |         case RPL_ENDOFWHOIS: | ||||||
|         case RPL_WHOISSERVER: return handle_rpl_whoisserver(msg); |             return handle_rpl_endofwhois(msg); | ||||||
|         case RPL_WHOISUSER: return handle_rpl_whoisuser(msg); |         case RPL_WHOISOPERATOR: | ||||||
|         case RPL_WHOISIDLE: return handle_rpl_whoisidle(msg); |             return handle_rpl_whoisoperator(msg); | ||||||
|         case RPL_TOPICWHOTIME: return handle_rpl_topicwhotime(msg); |         case RPL_WHOISSERVER: | ||||||
|         case RPL_TOPIC: return handle_rpl_topic(msg); |             return handle_rpl_whoisserver(msg); | ||||||
|         case RPL_NAMREPLY: return handle_rpl_namreply(msg); |         case RPL_WHOISUSER: | ||||||
|         case RPL_ENDOFNAMES: return handle_rpl_endofnames(msg); |             return handle_rpl_whoisuser(msg); | ||||||
|  |         case RPL_WHOISIDLE: | ||||||
|  |             return handle_rpl_whoisidle(msg); | ||||||
|  |         case RPL_TOPICWHOTIME: | ||||||
|  |             return handle_rpl_topicwhotime(msg); | ||||||
|  |         case RPL_TOPIC: | ||||||
|  |             return handle_rpl_topic(msg); | ||||||
|  |         case RPL_NAMREPLY: | ||||||
|  |             return handle_rpl_namreply(msg); | ||||||
|  |         case RPL_ENDOFNAMES: | ||||||
|  |             return handle_rpl_endofnames(msg); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -441,7 +453,7 @@ void IRCClient::handle_rpl_topic(const Message& msg) | ||||||
|         return; |         return; | ||||||
|     auto& channel_name = msg.arguments[1]; |     auto& channel_name = msg.arguments[1]; | ||||||
|     auto& topic = msg.arguments[2]; |     auto& topic = msg.arguments[2]; | ||||||
|     ensure_channel(channel_name).handle_topic({ }, topic); |     ensure_channel(channel_name).handle_topic({}, topic); | ||||||
|     // FIXME: Handle RPL_TOPICWHOTIME so we can know who set it and when.
 |     // FIXME: Handle RPL_TOPICWHOTIME so we can know who set it and when.
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -502,8 +514,7 @@ void IRCClient::handle_rpl_whoisuser(const Message& msg) | ||||||
|         nick.characters(), |         nick.characters(), | ||||||
|         username.characters(), |         username.characters(), | ||||||
|         host.characters(), |         host.characters(), | ||||||
|         realname.characters() |         realname.characters())); | ||||||
|     )); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IRCClient::handle_rpl_whoisidle(const Message& msg) | void IRCClient::handle_rpl_whoisidle(const Message& msg) | ||||||
|  | @ -541,8 +552,7 @@ void IRCClient::handle_rpl_topicwhotime(const Message& msg) | ||||||
|             tm->tm_mday, |             tm->tm_mday, | ||||||
|             tm->tm_hour, |             tm->tm_hour, | ||||||
|             tm->tm_min, |             tm->tm_min, | ||||||
|             tm->tm_sec |             tm->tm_sec); | ||||||
|         ); |  | ||||||
|     } |     } | ||||||
|     ensure_channel(channel_name).add_message(String::format("*** (set by %s at %s)", nick.characters(), setat.characters()), Color::Blue); |     ensure_channel(channel_name).add_message(String::format("*** (set by %s at %s)", nick.characters(), setat.characters()), Color::Blue); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| #include "IRCLogBufferModel.h" | #include "IRCLogBufferModel.h" | ||||||
| #include "IRCLogBuffer.h" | #include "IRCLogBuffer.h" | ||||||
|  | #include <SharedGraphics/Font.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
| #include <SharedGraphics/Font.h> |  | ||||||
| 
 | 
 | ||||||
| IRCLogBufferModel::IRCLogBufferModel(Retained<IRCLogBuffer>&& log_buffer) | IRCLogBufferModel::IRCLogBufferModel(Retained<IRCLogBuffer>&& log_buffer) | ||||||
|     : m_log_buffer(move(log_buffer)) |     : m_log_buffer(move(log_buffer)) | ||||||
|  | @ -26,9 +26,12 @@ int IRCLogBufferModel::column_count(const GModelIndex&) const | ||||||
| String IRCLogBufferModel::column_name(int column) const | String IRCLogBufferModel::column_name(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Timestamp: return "Time"; |     case Column::Timestamp: | ||||||
|     case Column::Name: return "Name"; |         return "Time"; | ||||||
|     case Column::Text: return "Text"; |     case Column::Name: | ||||||
|  |         return "Name"; | ||||||
|  |     case Column::Text: | ||||||
|  |         return "Text"; | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  | @ -36,9 +39,12 @@ String IRCLogBufferModel::column_name(int column) const | ||||||
| GModel::ColumnMetadata IRCLogBufferModel::column_metadata(int column) const | GModel::ColumnMetadata IRCLogBufferModel::column_metadata(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Timestamp: return { 60, TextAlignment::CenterLeft }; |     case Column::Timestamp: | ||||||
|     case Column::Name: return { 70, TextAlignment::CenterRight, &Font::default_bold_font() }; |         return { 60, TextAlignment::CenterLeft }; | ||||||
|     case Column::Text: return { 800, TextAlignment::CenterLeft }; |     case Column::Name: | ||||||
|  |         return { 70, TextAlignment::CenterRight, &Font::default_bold_font() }; | ||||||
|  |     case Column::Text: | ||||||
|  |         return { 800, TextAlignment::CenterLeft }; | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  | @ -56,7 +62,8 @@ GVariant IRCLogBufferModel::data(const GModelIndex& index, Role role) const | ||||||
|             if (entry.sender.is_empty()) |             if (entry.sender.is_empty()) | ||||||
|                 return String::empty(); |                 return String::empty(); | ||||||
|             return String::format("<%c%s>", entry.prefix ? entry.prefix : ' ', entry.sender.characters()); |             return String::format("<%c%s>", entry.prefix ? entry.prefix : ' ', entry.sender.characters()); | ||||||
|         case Column::Text: return entry.text; |         case Column::Text: | ||||||
|  |             return entry.text; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     if (role == Role::ForegroundColor) { |     if (role == Role::ForegroundColor) { | ||||||
|  | @ -65,7 +72,7 @@ GVariant IRCLogBufferModel::data(const GModelIndex& index, Role role) const | ||||||
|         if (index.column() == Column::Text) |         if (index.column() == Column::Text) | ||||||
|             return m_log_buffer->at(index.row()).color; |             return m_log_buffer->at(index.row()).color; | ||||||
|     } |     } | ||||||
|     return { }; |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IRCLogBufferModel::update() | void IRCLogBufferModel::update() | ||||||
|  |  | ||||||
|  | @ -1,13 +1,13 @@ | ||||||
| #include "IRCWindow.h" | #include "IRCWindow.h" | ||||||
| #include "IRCClient.h" |  | ||||||
| #include "IRCChannel.h" | #include "IRCChannel.h" | ||||||
| #include "IRCChannelMemberListModel.h" | #include "IRCChannelMemberListModel.h" | ||||||
|  | #include "IRCClient.h" | ||||||
| #include "IRCLogBufferModel.h" | #include "IRCLogBufferModel.h" | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GBoxLayout.h> | ||||||
| #include <LibGUI/GTableView.h> |  | ||||||
| #include <LibGUI/GTextEditor.h> |  | ||||||
| #include <LibGUI/GTextBox.h> |  | ||||||
| #include <LibGUI/GSplitter.h> | #include <LibGUI/GSplitter.h> | ||||||
|  | #include <LibGUI/GTableView.h> | ||||||
|  | #include <LibGUI/GTextBox.h> | ||||||
|  | #include <LibGUI/GTextEditor.h> | ||||||
| 
 | 
 | ||||||
| IRCWindow::IRCWindow(IRCClient& client, void* owner, Type type, const String& name, GWidget* parent) | IRCWindow::IRCWindow(IRCClient& client, void* owner, Type type, const String& name, GWidget* parent) | ||||||
|     : GWidget(parent) |     : GWidget(parent) | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| #include "IRCWindowListModel.h" | #include "IRCWindowListModel.h" | ||||||
| #include "IRCWindow.h" |  | ||||||
| #include "IRCClient.h" |  | ||||||
| #include "IRCChannel.h" | #include "IRCChannel.h" | ||||||
|  | #include "IRCClient.h" | ||||||
|  | #include "IRCWindow.h" | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <time.h> | #include <time.h> | ||||||
| 
 | 
 | ||||||
|  | @ -27,7 +27,8 @@ int IRCWindowListModel::column_count(const GModelIndex&) const | ||||||
| String IRCWindowListModel::column_name(int column) const | String IRCWindowListModel::column_name(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Name: return "Name"; |     case Column::Name: | ||||||
|  |         return "Name"; | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  | @ -35,7 +36,8 @@ String IRCWindowListModel::column_name(int column) const | ||||||
| GModel::ColumnMetadata IRCWindowListModel::column_metadata(int column) const | GModel::ColumnMetadata IRCWindowListModel::column_metadata(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Name: return { 70, TextAlignment::CenterLeft }; |     case Column::Name: | ||||||
|  |         return { 70, TextAlignment::CenterLeft }; | ||||||
|     } |     } | ||||||
|     ASSERT_NOT_REACHED(); |     ASSERT_NOT_REACHED(); | ||||||
| } | } | ||||||
|  | @ -64,7 +66,7 @@ GVariant IRCWindowListModel::data(const GModelIndex& index, Role role) const | ||||||
|         } |         } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return { }; |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void IRCWindowListModel::update() | void IRCWindowListModel::update() | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
|  | #include "IRCAppWindow.h" | ||||||
| #include "IRCClient.h" | #include "IRCClient.h" | ||||||
| #include <LibGUI/GApplication.h> | #include <LibGUI/GApplication.h> | ||||||
| #include "IRCAppWindow.h" |  | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) | int main(int argc, char** argv) | ||||||
|  |  | ||||||
|  | @ -1,16 +1,16 @@ | ||||||
| #include <SharedGraphics/GraphicsBitmap.h> | #include <LibCore/CConfigFile.h> | ||||||
| #include <LibGUI/GWindow.h> | #include <LibCore/CUserInfo.h> | ||||||
| #include <LibGUI/GWidget.h> |  | ||||||
| #include <LibGUI/GButton.h> |  | ||||||
| #include <LibGUI/GApplication.h> | #include <LibGUI/GApplication.h> | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GBoxLayout.h> | ||||||
| #include <LibCore/CConfigFile.h> | #include <LibGUI/GButton.h> | ||||||
| #include <sys/wait.h> | #include <LibGUI/GWidget.h> | ||||||
| #include <signal.h> | #include <LibGUI/GWindow.h> | ||||||
| #include <unistd.h> | #include <SharedGraphics/GraphicsBitmap.h> | ||||||
| #include <stdio.h> |  | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #include <LibCore/CUserInfo.h> | #include <signal.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <sys/wait.h> | ||||||
|  | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| static GWindow* make_launcher_window(); | static GWindow* make_launcher_window(); | ||||||
| 
 | 
 | ||||||
|  | @ -47,7 +47,7 @@ public: | ||||||
|         set_icon(GraphicsBitmap::load_from_file(icon_path)); |         set_icon(GraphicsBitmap::load_from_file(icon_path)); | ||||||
|         set_preferred_size({ 50, 50 }); |         set_preferred_size({ 50, 50 }); | ||||||
|         set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); |         set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||||
|         on_click = [this] (GButton&) { |         on_click = [this](GButton&) { | ||||||
|             pid_t child_pid = fork(); |             pid_t child_pid = fork(); | ||||||
|             if (!child_pid) { |             if (!child_pid) { | ||||||
|                 int rc = execl(m_executable_path.characters(), m_executable_path.characters(), nullptr); |                 int rc = execl(m_executable_path.characters(), m_executable_path.characters(), nullptr); | ||||||
|  | @ -55,7 +55,8 @@ public: | ||||||
|                     perror("execl"); |                     perror("execl"); | ||||||
|             } |             } | ||||||
|         }; |         }; | ||||||
|     } virtual ~LauncherButton() { } |     } | ||||||
|  |     virtual ~LauncherButton() {} | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     String m_executable_path; |     String m_executable_path; | ||||||
|  | @ -78,9 +79,9 @@ GWindow* make_launcher_window() | ||||||
| 
 | 
 | ||||||
|     for (auto& group : config->groups()) { |     for (auto& group : config->groups()) { | ||||||
|         new LauncherButton(config->read_entry(group, "Name", group), |         new LauncherButton(config->read_entry(group, "Name", group), | ||||||
|                            config->read_entry(group, "Icon", ""), |             config->read_entry(group, "Icon", ""), | ||||||
|                            config->read_entry(group, "Path", ""), |             config->read_entry(group, "Path", ""), | ||||||
|                            widget); |             widget); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return window; |     return window; | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| #include "MemoryStatsWidget.h" | #include "MemoryStatsWidget.h" | ||||||
| #include "GraphWidget.h" | #include "GraphWidget.h" | ||||||
| #include <LibGUI/GPainter.h> |  | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GBoxLayout.h> | ||||||
| #include <LibGUI/GLabel.h> | #include <LibGUI/GLabel.h> | ||||||
|  | #include <LibGUI/GPainter.h> | ||||||
| #include <SharedGraphics/StylePainter.h> | #include <SharedGraphics/StylePainter.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  | @ -21,7 +21,7 @@ MemoryStatsWidget::MemoryStatsWidget(GraphWidget& graph, GWidget* parent) | ||||||
|     layout()->set_margins({ 0, 8, 0, 0 }); |     layout()->set_margins({ 0, 8, 0, 0 }); | ||||||
|     layout()->set_spacing(3); |     layout()->set_spacing(3); | ||||||
| 
 | 
 | ||||||
|     auto build_widgets_for_label = [this] (const String& description) -> GLabel* { |     auto build_widgets_for_label = [this](const String& description) -> GLabel* { | ||||||
|         auto* container = new GWidget(this); |         auto* container = new GWidget(this); | ||||||
|         container->set_layout(make<GBoxLayout>(Orientation::Horizontal)); |         container->set_layout(make<GBoxLayout>(Orientation::Horizontal)); | ||||||
|         container->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); |         container->set_size_policy(SizePolicy::Fixed, SizePolicy::Fixed); | ||||||
|  |  | ||||||
|  | @ -2,8 +2,8 @@ | ||||||
| #include "GraphWidget.h" | #include "GraphWidget.h" | ||||||
| #include <LibCore/CFile.h> | #include <LibCore/CFile.h> | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
| #include <stdio.h> |  | ||||||
| #include <pwd.h> | #include <pwd.h> | ||||||
|  | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
| ProcessModel::ProcessModel(GraphWidget& graph) | ProcessModel::ProcessModel(GraphWidget& graph) | ||||||
|     : m_graph(graph) |     : m_graph(graph) | ||||||
|  | @ -42,34 +42,56 @@ int ProcessModel::column_count(const GModelIndex&) const | ||||||
| String ProcessModel::column_name(int column) const | String ProcessModel::column_name(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Icon: return ""; |     case Column::Icon: | ||||||
|     case Column::PID: return "PID"; |         return ""; | ||||||
|     case Column::State: return "State"; |     case Column::PID: | ||||||
|     case Column::User: return "User"; |         return "PID"; | ||||||
|     case Column::Priority: return "Pr"; |     case Column::State: | ||||||
|     case Column::Linear: return "Linear"; |         return "State"; | ||||||
|     case Column::Physical: return "Physical"; |     case Column::User: | ||||||
|     case Column::CPU: return "CPU"; |         return "User"; | ||||||
|     case Column::Name: return "Name"; |     case Column::Priority: | ||||||
|     case Column::Syscalls: return "Syscalls"; |         return "Pr"; | ||||||
|     default: ASSERT_NOT_REACHED(); |     case Column::Linear: | ||||||
|  |         return "Linear"; | ||||||
|  |     case Column::Physical: | ||||||
|  |         return "Physical"; | ||||||
|  |     case Column::CPU: | ||||||
|  |         return "CPU"; | ||||||
|  |     case Column::Name: | ||||||
|  |         return "Name"; | ||||||
|  |     case Column::Syscalls: | ||||||
|  |         return "Syscalls"; | ||||||
|  |     default: | ||||||
|  |         ASSERT_NOT_REACHED(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| GModel::ColumnMetadata ProcessModel::column_metadata(int column) const | GModel::ColumnMetadata ProcessModel::column_metadata(int column) const | ||||||
| { | { | ||||||
|     switch (column) { |     switch (column) { | ||||||
|     case Column::Icon: return { 16, TextAlignment::CenterLeft }; |     case Column::Icon: | ||||||
|     case Column::PID: return { 32, TextAlignment::CenterRight }; |         return { 16, TextAlignment::CenterLeft }; | ||||||
|     case Column::State: return { 75, TextAlignment::CenterLeft }; |     case Column::PID: | ||||||
|     case Column::Priority: return { 16, TextAlignment::CenterLeft }; |         return { 32, TextAlignment::CenterRight }; | ||||||
|     case Column::User: return { 50, TextAlignment::CenterLeft }; |     case Column::State: | ||||||
|     case Column::Linear: return { 65, TextAlignment::CenterRight }; |         return { 75, TextAlignment::CenterLeft }; | ||||||
|     case Column::Physical: return { 65, TextAlignment::CenterRight }; |     case Column::Priority: | ||||||
|     case Column::CPU: return { 32, TextAlignment::CenterRight }; |         return { 16, TextAlignment::CenterLeft }; | ||||||
|     case Column::Name: return { 140, TextAlignment::CenterLeft }; |     case Column::User: | ||||||
|     case Column::Syscalls: return { 60, TextAlignment::CenterRight }; |         return { 50, TextAlignment::CenterLeft }; | ||||||
|     default: ASSERT_NOT_REACHED(); |     case Column::Linear: | ||||||
|  |         return { 65, TextAlignment::CenterRight }; | ||||||
|  |     case Column::Physical: | ||||||
|  |         return { 65, TextAlignment::CenterRight }; | ||||||
|  |     case Column::CPU: | ||||||
|  |         return { 32, TextAlignment::CenterRight }; | ||||||
|  |     case Column::Name: | ||||||
|  |         return { 140, TextAlignment::CenterLeft }; | ||||||
|  |     case Column::Syscalls: | ||||||
|  |         return { 60, TextAlignment::CenterRight }; | ||||||
|  |     default: | ||||||
|  |         ASSERT_NOT_REACHED(); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -87,10 +109,14 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const | ||||||
| 
 | 
 | ||||||
|     if (role == Role::Sort) { |     if (role == Role::Sort) { | ||||||
|         switch (index.column()) { |         switch (index.column()) { | ||||||
|         case Column::Icon: return 0; |         case Column::Icon: | ||||||
|         case Column::PID: return process.current_state.pid; |             return 0; | ||||||
|         case Column::State: return process.current_state.state; |         case Column::PID: | ||||||
|         case Column::User: return process.current_state.user; |             return process.current_state.pid; | ||||||
|  |         case Column::State: | ||||||
|  |             return process.current_state.state; | ||||||
|  |         case Column::User: | ||||||
|  |             return process.current_state.user; | ||||||
|         case Column::Priority: |         case Column::Priority: | ||||||
|             if (process.current_state.priority == "Idle") |             if (process.current_state.priority == "Idle") | ||||||
|                 return 0; |                 return 0; | ||||||
|  | @ -102,23 +128,32 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const | ||||||
|                 return 3; |                 return 3; | ||||||
|             ASSERT_NOT_REACHED(); |             ASSERT_NOT_REACHED(); | ||||||
|             return 3; |             return 3; | ||||||
|         case Column::Linear: return (int)process.current_state.linear; |         case Column::Linear: | ||||||
|         case Column::Physical: return (int)process.current_state.physical; |             return (int)process.current_state.linear; | ||||||
|         case Column::CPU: return process.current_state.cpu_percent; |         case Column::Physical: | ||||||
|         case Column::Name: return process.current_state.name; |             return (int)process.current_state.physical; | ||||||
|  |         case Column::CPU: | ||||||
|  |             return process.current_state.cpu_percent; | ||||||
|  |         case Column::Name: | ||||||
|  |             return process.current_state.name; | ||||||
|         // FIXME: GVariant with unsigned?
 |         // FIXME: GVariant with unsigned?
 | ||||||
|         case Column::Syscalls: return (int)process.current_state.syscalls; |         case Column::Syscalls: | ||||||
|  |             return (int)process.current_state.syscalls; | ||||||
|         } |         } | ||||||
|         ASSERT_NOT_REACHED(); |         ASSERT_NOT_REACHED(); | ||||||
|         return { }; |         return {}; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (role == Role::Display) { |     if (role == Role::Display) { | ||||||
|         switch (index.column()) { |         switch (index.column()) { | ||||||
|         case Column::Icon: return *m_generic_process_icon; |         case Column::Icon: | ||||||
|         case Column::PID: return process.current_state.pid; |             return *m_generic_process_icon; | ||||||
|         case Column::State: return process.current_state.state; |         case Column::PID: | ||||||
|         case Column::User: return process.current_state.user; |             return process.current_state.pid; | ||||||
|  |         case Column::State: | ||||||
|  |             return process.current_state.state; | ||||||
|  |         case Column::User: | ||||||
|  |             return process.current_state.user; | ||||||
|         case Column::Priority: |         case Column::Priority: | ||||||
|             if (process.current_state.priority == "Idle") |             if (process.current_state.priority == "Idle") | ||||||
|                 return String::empty(); |                 return String::empty(); | ||||||
|  | @ -129,16 +164,21 @@ GVariant ProcessModel::data(const GModelIndex& index, Role role) const | ||||||
|             if (process.current_state.priority == "Normal") |             if (process.current_state.priority == "Normal") | ||||||
|                 return *m_normal_priority_icon; |                 return *m_normal_priority_icon; | ||||||
|             return process.current_state.priority; |             return process.current_state.priority; | ||||||
|         case Column::Linear: return pretty_byte_size(process.current_state.linear); |         case Column::Linear: | ||||||
|         case Column::Physical: return pretty_byte_size(process.current_state.physical); |             return pretty_byte_size(process.current_state.linear); | ||||||
|         case Column::CPU: return process.current_state.cpu_percent; |         case Column::Physical: | ||||||
|         case Column::Name: return process.current_state.name; |             return pretty_byte_size(process.current_state.physical); | ||||||
|  |         case Column::CPU: | ||||||
|  |             return process.current_state.cpu_percent; | ||||||
|  |         case Column::Name: | ||||||
|  |             return process.current_state.name; | ||||||
|         // FIXME: It's weird that GVariant doesn't support unsigned ints. Should it?
 |         // FIXME: It's weird that GVariant doesn't support unsigned ints. Should it?
 | ||||||
|         case Column::Syscalls: return (int)process.current_state.syscalls; |         case Column::Syscalls: | ||||||
|  |             return (int)process.current_state.syscalls; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return { }; |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ProcessModel::update() | void ProcessModel::update() | ||||||
|  |  | ||||||
|  | @ -1,20 +1,20 @@ | ||||||
| #include <LibCore/CTimer.h> |  | ||||||
| #include <LibGUI/GWindow.h> |  | ||||||
| #include <LibGUI/GWidget.h> |  | ||||||
| #include <LibGUI/GBoxLayout.h> |  | ||||||
| #include <LibGUI/GApplication.h> |  | ||||||
| #include <LibGUI/GToolBar.h> |  | ||||||
| #include <LibGUI/GMenuBar.h> |  | ||||||
| #include <LibGUI/GGroupBox.h> |  | ||||||
| #include <LibGUI/GAction.h> |  | ||||||
| #include <LibGUI/GTabWidget.h> |  | ||||||
| #include <LibGUI/GLabel.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <signal.h> |  | ||||||
| #include "ProcessTableView.h" |  | ||||||
| #include "MemoryStatsWidget.h" |  | ||||||
| #include "GraphWidget.h" | #include "GraphWidget.h" | ||||||
|  | #include "MemoryStatsWidget.h" | ||||||
|  | #include "ProcessTableView.h" | ||||||
|  | #include <LibCore/CTimer.h> | ||||||
|  | #include <LibGUI/GAction.h> | ||||||
|  | #include <LibGUI/GApplication.h> | ||||||
|  | #include <LibGUI/GBoxLayout.h> | ||||||
|  | #include <LibGUI/GGroupBox.h> | ||||||
|  | #include <LibGUI/GLabel.h> | ||||||
|  | #include <LibGUI/GMenuBar.h> | ||||||
|  | #include <LibGUI/GTabWidget.h> | ||||||
|  | #include <LibGUI/GToolBar.h> | ||||||
|  | #include <LibGUI/GWidget.h> | ||||||
|  | #include <LibGUI/GWindow.h> | ||||||
|  | #include <signal.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) | int main(int argc, char** argv) | ||||||
| { | { | ||||||
|  | @ -46,7 +46,7 @@ int main(int argc, char** argv) | ||||||
|     cpu_graph->set_max(100); |     cpu_graph->set_max(100); | ||||||
|     cpu_graph->set_text_color(Color::Green); |     cpu_graph->set_text_color(Color::Green); | ||||||
|     cpu_graph->set_graph_color(Color::from_rgb(0x00bb00)); |     cpu_graph->set_graph_color(Color::from_rgb(0x00bb00)); | ||||||
|     cpu_graph->text_formatter = [] (int value, int) { |     cpu_graph->text_formatter = [](int value, int) { | ||||||
|         return String::format("%d%%", value); |         return String::format("%d%%", value); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  | @ -58,7 +58,7 @@ int main(int argc, char** argv) | ||||||
|     auto* memory_graph = new GraphWidget(memory_graph_group_box); |     auto* memory_graph = new GraphWidget(memory_graph_group_box); | ||||||
|     memory_graph->set_text_color(Color::Cyan); |     memory_graph->set_text_color(Color::Cyan); | ||||||
|     memory_graph->set_graph_color(Color::from_rgb(0x00bbbb)); |     memory_graph->set_graph_color(Color::from_rgb(0x00bbbb)); | ||||||
|     memory_graph->text_formatter = [] (int value, int max) { |     memory_graph->text_formatter = [](int value, int max) { | ||||||
|         return String::format("%d / %d KB", value, max); |         return String::format("%d / %d KB", value, max); | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  | @ -78,19 +78,19 @@ int main(int argc, char** argv) | ||||||
|         memory_stats_widget->refresh(); |         memory_stats_widget->refresh(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto kill_action = GAction::create("Kill process", GraphicsBitmap::load_from_file("/res/icons/kill16.png"), [process_table_view] (const GAction&) { |     auto kill_action = GAction::create("Kill process", GraphicsBitmap::load_from_file("/res/icons/kill16.png"), [process_table_view](const GAction&) { | ||||||
|         pid_t pid = process_table_view->selected_pid(); |         pid_t pid = process_table_view->selected_pid(); | ||||||
|         if (pid != -1) |         if (pid != -1) | ||||||
|             kill(pid, SIGKILL); |             kill(pid, SIGKILL); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto stop_action = GAction::create("Stop process", GraphicsBitmap::load_from_file("/res/icons/stop16.png"), [process_table_view] (const GAction&) { |     auto stop_action = GAction::create("Stop process", GraphicsBitmap::load_from_file("/res/icons/stop16.png"), [process_table_view](const GAction&) { | ||||||
|         pid_t pid = process_table_view->selected_pid(); |         pid_t pid = process_table_view->selected_pid(); | ||||||
|         if (pid != -1) |         if (pid != -1) | ||||||
|             kill(pid, SIGSTOP); |             kill(pid, SIGSTOP); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto continue_action = GAction::create("Continue process", GraphicsBitmap::load_from_file("/res/icons/continue16.png"), [process_table_view] (const GAction&) { |     auto continue_action = GAction::create("Continue process", GraphicsBitmap::load_from_file("/res/icons/continue16.png"), [process_table_view](const GAction&) { | ||||||
|         pid_t pid = process_table_view->selected_pid(); |         pid_t pid = process_table_view->selected_pid(); | ||||||
|         if (pid != -1) |         if (pid != -1) | ||||||
|             kill(pid, SIGCONT); |             kill(pid, SIGCONT); | ||||||
|  | @ -102,7 +102,7 @@ int main(int argc, char** argv) | ||||||
| 
 | 
 | ||||||
|     auto menubar = make<GMenuBar>(); |     auto menubar = make<GMenuBar>(); | ||||||
|     auto app_menu = make<GMenu>("Process Manager"); |     auto app_menu = make<GMenu>("Process Manager"); | ||||||
|     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) { |     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { | ||||||
|         GApplication::the().quit(0); |         GApplication::the().quit(0); | ||||||
|         return; |         return; | ||||||
|     })); |     })); | ||||||
|  | @ -115,25 +115,25 @@ int main(int argc, char** argv) | ||||||
|     menubar->add_menu(move(process_menu)); |     menubar->add_menu(move(process_menu)); | ||||||
| 
 | 
 | ||||||
|     auto frequency_menu = make<GMenu>("Frequency"); |     auto frequency_menu = make<GMenu>("Frequency"); | ||||||
|     frequency_menu->add_action(GAction::create("0.25 sec", [refresh_timer] (auto&) { |     frequency_menu->add_action(GAction::create("0.25 sec", [refresh_timer](auto&) { | ||||||
|         refresh_timer->restart(250); |         refresh_timer->restart(250); | ||||||
|     })); |     })); | ||||||
|     frequency_menu->add_action(GAction::create("0.5 sec", [refresh_timer] (auto&) { |     frequency_menu->add_action(GAction::create("0.5 sec", [refresh_timer](auto&) { | ||||||
|         refresh_timer->restart(500); |         refresh_timer->restart(500); | ||||||
|     })); |     })); | ||||||
|     frequency_menu->add_action(GAction::create("1 sec", [refresh_timer] (auto&) { |     frequency_menu->add_action(GAction::create("1 sec", [refresh_timer](auto&) { | ||||||
|         refresh_timer->restart(1000); |         refresh_timer->restart(1000); | ||||||
|     })); |     })); | ||||||
|     frequency_menu->add_action(GAction::create("3 sec", [refresh_timer] (auto&) { |     frequency_menu->add_action(GAction::create("3 sec", [refresh_timer](auto&) { | ||||||
|         refresh_timer->restart(3000); |         refresh_timer->restart(3000); | ||||||
|     })); |     })); | ||||||
|     frequency_menu->add_action(GAction::create("5 sec", [refresh_timer] (auto&) { |     frequency_menu->add_action(GAction::create("5 sec", [refresh_timer](auto&) { | ||||||
|         refresh_timer->restart(5000); |         refresh_timer->restart(5000); | ||||||
|     })); |     })); | ||||||
|     menubar->add_menu(move(frequency_menu)); |     menubar->add_menu(move(frequency_menu)); | ||||||
| 
 | 
 | ||||||
|     auto help_menu = make<GMenu>("Help"); |     auto help_menu = make<GMenu>("Help"); | ||||||
|     help_menu->add_action(GAction::create("About", [] (const GAction&) { |     help_menu->add_action(GAction::create("About", [](const GAction&) { | ||||||
|         dbgprintf("FIXME: Implement Help/About\n"); |         dbgprintf("FIXME: Implement Help/About\n"); | ||||||
|     })); |     })); | ||||||
|     menubar->add_menu(move(help_menu)); |     menubar->add_menu(move(help_menu)); | ||||||
|  |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| #include "TaskbarButton.h" | #include "TaskbarButton.h" | ||||||
| #include <WindowServer/WSAPITypes.h> |  | ||||||
| #include <LibGUI/GAction.h> | #include <LibGUI/GAction.h> | ||||||
| #include <LibGUI/GMenu.h> |  | ||||||
| #include <LibGUI/GEventLoop.h> | #include <LibGUI/GEventLoop.h> | ||||||
|  | #include <LibGUI/GMenu.h> | ||||||
|  | #include <WindowServer/WSAPITypes.h> | ||||||
| 
 | 
 | ||||||
| static void set_window_minimized_state(const WindowIdentifier& identifier, bool minimized) | static void set_window_minimized_state(const WindowIdentifier& identifier, bool minimized) | ||||||
| { | { | ||||||
|  | @ -34,13 +34,13 @@ GMenu& TaskbarButton::ensure_menu() | ||||||
| { | { | ||||||
|     if (!m_menu) { |     if (!m_menu) { | ||||||
|         m_menu = make<GMenu>(""); |         m_menu = make<GMenu>(""); | ||||||
|         m_menu->add_action(GAction::create("Minimize", [this] (auto&) { |         m_menu->add_action(GAction::create("Minimize", [this](auto&) { | ||||||
|             set_window_minimized_state(m_identifier, true); |             set_window_minimized_state(m_identifier, true); | ||||||
|         })); |         })); | ||||||
|         m_menu->add_action(GAction::create("Unminimize", [this] (auto&) { |         m_menu->add_action(GAction::create("Unminimize", [this](auto&) { | ||||||
|             set_window_minimized_state(m_identifier, false); |             set_window_minimized_state(m_identifier, false); | ||||||
|         })); |         })); | ||||||
|         m_menu->add_action(GAction::create("Close", [this] (auto&) { |         m_menu->add_action(GAction::create("Close", [this](auto&) { | ||||||
|             dbgprintf("FIXME: Close!\n"); |             dbgprintf("FIXME: Close!\n"); | ||||||
|         })); |         })); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -1,11 +1,11 @@ | ||||||
| #include "TaskbarWindow.h" | #include "TaskbarWindow.h" | ||||||
| #include "TaskbarButton.h" | #include "TaskbarButton.h" | ||||||
| #include <LibGUI/GWindow.h> |  | ||||||
| #include <LibGUI/GDesktop.h> |  | ||||||
| #include <LibGUI/GEventLoop.h> |  | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GBoxLayout.h> | ||||||
| #include <LibGUI/GButton.h> | #include <LibGUI/GButton.h> | ||||||
|  | #include <LibGUI/GDesktop.h> | ||||||
|  | #include <LibGUI/GEventLoop.h> | ||||||
| #include <LibGUI/GFrame.h> | #include <LibGUI/GFrame.h> | ||||||
|  | #include <LibGUI/GWindow.h> | ||||||
| #include <WindowServer/WSAPITypes.h> | #include <WindowServer/WSAPITypes.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| 
 | 
 | ||||||
|  | @ -19,7 +19,7 @@ TaskbarWindow::TaskbarWindow() | ||||||
| 
 | 
 | ||||||
|     on_screen_rect_change(GDesktop::the().rect()); |     on_screen_rect_change(GDesktop::the().rect()); | ||||||
| 
 | 
 | ||||||
|     GDesktop::the().on_rect_change = [this] (const Rect& rect) { on_screen_rect_change(rect); }; |     GDesktop::the().on_rect_change = [this](const Rect& rect) { on_screen_rect_change(rect); }; | ||||||
| 
 | 
 | ||||||
|     auto* widget = new GFrame; |     auto* widget = new GFrame; | ||||||
|     widget->set_fill_with_background_color(true); |     widget->set_fill_with_background_color(true); | ||||||
|  | @ -31,7 +31,7 @@ TaskbarWindow::TaskbarWindow() | ||||||
|     widget->set_frame_shadow(FrameShadow::Raised); |     widget->set_frame_shadow(FrameShadow::Raised); | ||||||
|     set_main_widget(widget); |     set_main_widget(widget); | ||||||
| 
 | 
 | ||||||
|     WindowList::the().aid_create_button = [this] (auto& identifier) { |     WindowList::the().aid_create_button = [this](auto& identifier) { | ||||||
|         return create_button(identifier); |         return create_button(identifier); | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  | @ -70,8 +70,7 @@ void TaskbarWindow::wm_event(GWMEvent& event) | ||||||
|         auto& removed_event = static_cast<GWMWindowRemovedEvent&>(event); |         auto& removed_event = static_cast<GWMWindowRemovedEvent&>(event); | ||||||
|         dbgprintf("WM_WindowRemoved: client_id=%d, window_id=%d\n", |         dbgprintf("WM_WindowRemoved: client_id=%d, window_id=%d\n", | ||||||
|             removed_event.client_id(), |             removed_event.client_id(), | ||||||
|             removed_event.window_id() |             removed_event.window_id()); | ||||||
|         ); |  | ||||||
| #endif | #endif | ||||||
|         WindowList::the().remove_window(identifier); |         WindowList::the().remove_window(identifier); | ||||||
|         update(); |         update(); | ||||||
|  | @ -83,8 +82,7 @@ void TaskbarWindow::wm_event(GWMEvent& event) | ||||||
|         dbgprintf("WM_WindowRectChanged: client_id=%d, window_id=%d, rect=%s\n", |         dbgprintf("WM_WindowRectChanged: client_id=%d, window_id=%d, rect=%s\n", | ||||||
|             changed_event.client_id(), |             changed_event.client_id(), | ||||||
|             changed_event.window_id(), |             changed_event.window_id(), | ||||||
|             changed_event.rect().to_string().characters() |             changed_event.rect().to_string().characters()); | ||||||
|         ); |  | ||||||
| #endif | #endif | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
|  | @ -94,8 +92,7 @@ void TaskbarWindow::wm_event(GWMEvent& event) | ||||||
|         dbgprintf("WM_WindowIconChanged: client_id=%d, window_id=%d, icon_path=%s\n", |         dbgprintf("WM_WindowIconChanged: client_id=%d, window_id=%d, icon_path=%s\n", | ||||||
|             changed_event.client_id(), |             changed_event.client_id(), | ||||||
|             changed_event.window_id(), |             changed_event.window_id(), | ||||||
|             changed_event.icon_path().characters() |             changed_event.icon_path().characters()); | ||||||
|         ); |  | ||||||
| #endif | #endif | ||||||
|         if (auto* window = WindowList::the().window(identifier)) { |         if (auto* window = WindowList::the().window(identifier)) { | ||||||
|             window->set_icon_path(changed_event.icon_path()); |             window->set_icon_path(changed_event.icon_path()); | ||||||
|  | @ -113,8 +110,7 @@ void TaskbarWindow::wm_event(GWMEvent& event) | ||||||
|             changed_event.title().characters(), |             changed_event.title().characters(), | ||||||
|             changed_event.rect().to_string().characters(), |             changed_event.rect().to_string().characters(), | ||||||
|             changed_event.is_active(), |             changed_event.is_active(), | ||||||
|             changed_event.is_minimized() |             changed_event.is_minimized()); | ||||||
|         ); |  | ||||||
| #endif | #endif | ||||||
|         if (!should_include_window(changed_event.window_type())) |         if (!should_include_window(changed_event.window_type())) | ||||||
|             break; |             break; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #include "WindowList.h" | #include "WindowList.h" | ||||||
| #include <WindowServer/WSAPITypes.h> |  | ||||||
| #include <LibGUI/GEventLoop.h> | #include <LibGUI/GEventLoop.h> | ||||||
|  | #include <WindowServer/WSAPITypes.h> | ||||||
| 
 | 
 | ||||||
| WindowList& WindowList::the() | WindowList& WindowList::the() | ||||||
| { | { | ||||||
|  | @ -25,7 +25,7 @@ Window& WindowList::ensure_window(const WindowIdentifier& identifier) | ||||||
|         return *it->value; |         return *it->value; | ||||||
|     auto window = make<Window>(identifier); |     auto window = make<Window>(identifier); | ||||||
|     window->set_button(aid_create_button(identifier)); |     window->set_button(aid_create_button(identifier)); | ||||||
|     window->button()->on_click = [window = window.ptr(), identifier] (GButton&) { |     window->button()->on_click = [window = window.ptr(), identifier](GButton&) { | ||||||
|         WSAPI_ClientMessage message; |         WSAPI_ClientMessage message; | ||||||
|         if (window->is_minimized() || !window->is_active()) { |         if (window->is_minimized() || !window->is_active()) { | ||||||
|             message.type = WSAPI_ClientMessage::Type::WM_SetActiveWindow; |             message.type = WSAPI_ClientMessage::Type::WM_SetActiveWindow; | ||||||
|  |  | ||||||
|  | @ -1,5 +1,5 @@ | ||||||
| #include <LibGUI/GApplication.h> |  | ||||||
| #include "TaskbarWindow.h" | #include "TaskbarWindow.h" | ||||||
|  | #include <LibGUI/GApplication.h> | ||||||
| 
 | 
 | ||||||
| int main(int argc, char** argv) | int main(int argc, char** argv) | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -1,27 +1,26 @@ | ||||||
| #include <stdio.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| #include <errno.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <fcntl.h> |  | ||||||
| #include <assert.h> |  | ||||||
| #include <sys/ioctl.h> |  | ||||||
| #include <sys/select.h> |  | ||||||
| #include <pwd.h> |  | ||||||
| #include "Terminal.h" | #include "Terminal.h" | ||||||
| #include <Kernel/KeyCode.h> | #include <Kernel/KeyCode.h> | ||||||
|  | #include <LibCore/CUserInfo.h> | ||||||
|  | #include <LibGUI/GAction.h> | ||||||
| #include <LibGUI/GApplication.h> | #include <LibGUI/GApplication.h> | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GBoxLayout.h> | ||||||
| #include <LibGUI/GRadioButton.h> | #include <LibGUI/GFontDatabase.h> | ||||||
| #include <LibGUI/GWidget.h> |  | ||||||
| #include <LibGUI/GWindow.h> |  | ||||||
| #include <LibGUI/GGroupBox.h> | #include <LibGUI/GGroupBox.h> | ||||||
| #include <LibGUI/GMenuBar.h> | #include <LibGUI/GMenuBar.h> | ||||||
| #include <LibGUI/GAction.h> |  | ||||||
| #include <LibGUI/GFontDatabase.h> |  | ||||||
| #include <LibGUI/GSlider.h> |  | ||||||
| #include <LibGUI/GRadioButton.h> | #include <LibGUI/GRadioButton.h> | ||||||
| #include <LibCore/CUserInfo.h> | #include <LibGUI/GSlider.h> | ||||||
|  | #include <LibGUI/GWidget.h> | ||||||
|  | #include <LibGUI/GWindow.h> | ||||||
|  | #include <assert.h> | ||||||
|  | #include <errno.h> | ||||||
|  | #include <fcntl.h> | ||||||
|  | #include <pwd.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <sys/ioctl.h> | ||||||
|  | #include <sys/select.h> | ||||||
|  | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| static void make_shell(int ptm_fd) | static void make_shell(int ptm_fd) | ||||||
| { | { | ||||||
|  | @ -40,7 +39,7 @@ static void make_shell(int ptm_fd) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // NOTE: It's okay if this fails.
 |         // NOTE: It's okay if this fails.
 | ||||||
|         (void) ioctl(0, TIOCNOTTY); |         (void)ioctl(0, TIOCNOTTY); | ||||||
| 
 | 
 | ||||||
|         close(0); |         close(0); | ||||||
|         close(1); |         close(1); | ||||||
|  | @ -88,7 +87,6 @@ GWindow* create_settings_window(Terminal& terminal, RetainPtr<CConfigFile> confi | ||||||
|     window->set_title("Terminal Settings"); |     window->set_title("Terminal Settings"); | ||||||
|     window->set_rect(50, 50, 200, 140); |     window->set_rect(50, 50, 200, 140); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     auto* settings = new GWidget; |     auto* settings = new GWidget; | ||||||
|     window->set_main_widget(settings); |     window->set_main_widget(settings); | ||||||
|     settings->set_fill_with_background_color(true); |     settings->set_fill_with_background_color(true); | ||||||
|  | @ -106,9 +104,9 @@ GWindow* create_settings_window(Terminal& terminal, RetainPtr<CConfigFile> confi | ||||||
|     auto* visbell_radio = new GRadioButton("Use (Visual) Terminal Bell", radio_container); |     auto* visbell_radio = new GRadioButton("Use (Visual) Terminal Bell", radio_container); | ||||||
|     sysbell_radio->set_checked(terminal.should_beep()); |     sysbell_radio->set_checked(terminal.should_beep()); | ||||||
|     visbell_radio->set_checked(!terminal.should_beep()); |     visbell_radio->set_checked(!terminal.should_beep()); | ||||||
|     sysbell_radio->on_checked = [&terminal] (const bool checked) { |     sysbell_radio->on_checked = [&terminal](const bool checked) { | ||||||
|                                     terminal.set_should_beep(checked); |         terminal.set_should_beep(checked); | ||||||
|                                 }; |     }; | ||||||
| 
 | 
 | ||||||
|     auto* slider_container = new GGroupBox("Background Opacity", settings); |     auto* slider_container = new GGroupBox("Background Opacity", settings); | ||||||
|     slider_container->set_layout(make<GBoxLayout>(Orientation::Vertical)); |     slider_container->set_layout(make<GBoxLayout>(Orientation::Vertical)); | ||||||
|  | @ -120,10 +118,10 @@ GWindow* create_settings_window(Terminal& terminal, RetainPtr<CConfigFile> confi | ||||||
|     slider->set_fill_with_background_color(true); |     slider->set_fill_with_background_color(true); | ||||||
|     slider->set_background_color(Color::LightGray); |     slider->set_background_color(Color::LightGray); | ||||||
| 
 | 
 | ||||||
|     slider->on_value_changed = [&terminal, &config] (int value) { |     slider->on_value_changed = [&terminal, &config](int value) { | ||||||
|                                    float opacity = value / 100.0; |         float opacity = value / 100.0; | ||||||
|                                    terminal.set_opacity(opacity); |         terminal.set_opacity(opacity); | ||||||
|                                }; |     }; | ||||||
| 
 | 
 | ||||||
|     slider->set_range(0, 100); |     slider->set_range(0, 100); | ||||||
|     slider->set_value(terminal.opacity() * 100.0); |     slider->set_value(terminal.opacity() * 100.0); | ||||||
|  | @ -170,14 +168,13 @@ int main(int argc, char** argv) | ||||||
| 
 | 
 | ||||||
|     auto app_menu = make<GMenu>("Terminal"); |     auto app_menu = make<GMenu>("Terminal"); | ||||||
|     app_menu->add_action(GAction::create("Settings...", |     app_menu->add_action(GAction::create("Settings...", | ||||||
|                                          [&settings_window, &terminal, &config] (const GAction&) { |         [&settings_window, &terminal, &config](const GAction&) { | ||||||
|                                              if (!settings_window) |             if (!settings_window) | ||||||
|                                                  settings_window = |                 settings_window = create_settings_window(terminal, config)->make_weak_ptr(); | ||||||
|                                                      create_settings_window(terminal, config)->make_weak_ptr(); |             settings_window->show(); | ||||||
|                                              settings_window->show(); |             settings_window->move_to_front(); | ||||||
|                                              settings_window->move_to_front(); |         })); | ||||||
|                                          })); |     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { | ||||||
|     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) { |  | ||||||
|         dbgprintf("Terminal: Quit menu activated!\n"); |         dbgprintf("Terminal: Quit menu activated!\n"); | ||||||
|         GApplication::the().quit(0); |         GApplication::the().quit(0); | ||||||
|         return; |         return; | ||||||
|  | @ -185,8 +182,8 @@ int main(int argc, char** argv) | ||||||
|     menubar->add_menu(move(app_menu)); |     menubar->add_menu(move(app_menu)); | ||||||
| 
 | 
 | ||||||
|     auto font_menu = make<GMenu>("Font"); |     auto font_menu = make<GMenu>("Font"); | ||||||
|     GFontDatabase::the().for_each_fixed_width_font([&] (const StringView& font_name) { |     GFontDatabase::the().for_each_fixed_width_font([&](const StringView& font_name) { | ||||||
|                                                        font_menu->add_action(GAction::create(font_name, [&terminal, &config] (const GAction& action) { |         font_menu->add_action(GAction::create(font_name, [&terminal, &config](const GAction& action) { | ||||||
|             terminal.set_font(GFontDatabase::the().get_by_name(action.text())); |             terminal.set_font(GFontDatabase::the().get_by_name(action.text())); | ||||||
|             auto metadata = GFontDatabase::the().get_metadata_by_name(action.text()); |             auto metadata = GFontDatabase::the().get_metadata_by_name(action.text()); | ||||||
|             config->write_entry("Text", "Font", metadata.path); |             config->write_entry("Text", "Font", metadata.path); | ||||||
|  | @ -197,7 +194,7 @@ int main(int argc, char** argv) | ||||||
|     menubar->add_menu(move(font_menu)); |     menubar->add_menu(move(font_menu)); | ||||||
| 
 | 
 | ||||||
|     auto help_menu = make<GMenu>("Help"); |     auto help_menu = make<GMenu>("Help"); | ||||||
|     help_menu->add_action(GAction::create("About", [] (const GAction&) { |     help_menu->add_action(GAction::create("About", [](const GAction&) { | ||||||
|         dbgprintf("FIXME: Implement Help/About\n"); |         dbgprintf("FIXME: Implement Help/About\n"); | ||||||
|     })); |     })); | ||||||
|     menubar->add_menu(move(help_menu)); |     menubar->add_menu(move(help_menu)); | ||||||
|  |  | ||||||
|  | @ -1,21 +1,21 @@ | ||||||
| #include <LibGUI/GWindow.h> | #include <AK/StringBuilder.h> | ||||||
| #include <LibGUI/GWidget.h> | #include <LibCore/CFile.h> | ||||||
| #include <LibGUI/GBoxLayout.h> | #include <LibGUI/GAction.h> | ||||||
| #include <LibGUI/GApplication.h> | #include <LibGUI/GApplication.h> | ||||||
|  | #include <LibGUI/GBoxLayout.h> | ||||||
| #include <LibGUI/GFilePicker.h> | #include <LibGUI/GFilePicker.h> | ||||||
|  | #include <LibGUI/GFontDatabase.h> | ||||||
|  | #include <LibGUI/GMenuBar.h> | ||||||
| #include <LibGUI/GMessageBox.h> | #include <LibGUI/GMessageBox.h> | ||||||
| #include <LibGUI/GStatusBar.h> | #include <LibGUI/GStatusBar.h> | ||||||
| #include <LibGUI/GToolBar.h> |  | ||||||
| #include <LibGUI/GMenuBar.h> |  | ||||||
| #include <LibGUI/GTextEditor.h> | #include <LibGUI/GTextEditor.h> | ||||||
| #include <LibGUI/GAction.h> | #include <LibGUI/GToolBar.h> | ||||||
| #include <LibGUI/GFontDatabase.h> | #include <LibGUI/GWidget.h> | ||||||
| #include <LibCore/CFile.h> | #include <LibGUI/GWindow.h> | ||||||
| #include <AK/StringBuilder.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <signal.h> |  | ||||||
| #include <fcntl.h> | #include <fcntl.h> | ||||||
|  | #include <signal.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| void open_sesame(GWindow& window, GTextEditor& editor, const String& path) | void open_sesame(GWindow& window, GTextEditor& editor, const String& path) | ||||||
| { | { | ||||||
|  | @ -57,7 +57,7 @@ int main(int argc, char** argv) | ||||||
|         open_sesame(*window, *text_editor, path); |         open_sesame(*window, *text_editor, path); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     auto new_action = GAction::create("New document", { Mod_Ctrl, Key_N }, GraphicsBitmap::load_from_file("/res/icons/16x16/new.png"), [] (const GAction&) { |     auto new_action = GAction::create("New document", { Mod_Ctrl, Key_N }, GraphicsBitmap::load_from_file("/res/icons/16x16/new.png"), [](const GAction&) { | ||||||
|         dbgprintf("FIXME: Implement File/New\n"); |         dbgprintf("FIXME: Implement File/New\n"); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|  | @ -69,14 +69,14 @@ int main(int argc, char** argv) | ||||||
|         } |         } | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto save_action = GAction::create("Save document", { Mod_Ctrl, Key_S }, GraphicsBitmap::load_from_file("/res/icons/16x16/save.png"), [&] (const GAction&) { |     auto save_action = GAction::create("Save document", { Mod_Ctrl, Key_S }, GraphicsBitmap::load_from_file("/res/icons/16x16/save.png"), [&](const GAction&) { | ||||||
|         dbgprintf("Writing document to '%s'\n", path.characters()); |         dbgprintf("Writing document to '%s'\n", path.characters()); | ||||||
|         text_editor->write_to_file(path); |         text_editor->write_to_file(path); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     auto menubar = make<GMenuBar>(); |     auto menubar = make<GMenuBar>(); | ||||||
|     auto app_menu = make<GMenu>("Text Editor"); |     auto app_menu = make<GMenu>("Text Editor"); | ||||||
|     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) { |     app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { | ||||||
|         GApplication::the().quit(0); |         GApplication::the().quit(0); | ||||||
|         return; |         return; | ||||||
|     })); |     })); | ||||||
|  | @ -99,8 +99,8 @@ int main(int argc, char** argv) | ||||||
|     menubar->add_menu(move(edit_menu)); |     menubar->add_menu(move(edit_menu)); | ||||||
| 
 | 
 | ||||||
|     auto font_menu = make<GMenu>("Font"); |     auto font_menu = make<GMenu>("Font"); | ||||||
|     GFontDatabase::the().for_each_fixed_width_font([&] (const StringView& font_name) { |     GFontDatabase::the().for_each_fixed_width_font([&](const StringView& font_name) { | ||||||
|         font_menu->add_action(GAction::create(font_name, [text_editor] (const GAction& action) { |         font_menu->add_action(GAction::create(font_name, [text_editor](const GAction& action) { | ||||||
|             text_editor->set_font(GFontDatabase::the().get_by_name(action.text())); |             text_editor->set_font(GFontDatabase::the().get_by_name(action.text())); | ||||||
|             text_editor->update(); |             text_editor->update(); | ||||||
|         })); |         })); | ||||||
|  | @ -108,7 +108,7 @@ int main(int argc, char** argv) | ||||||
|     menubar->add_menu(move(font_menu)); |     menubar->add_menu(move(font_menu)); | ||||||
| 
 | 
 | ||||||
|     auto help_menu = make<GMenu>("Help"); |     auto help_menu = make<GMenu>("Help"); | ||||||
|     help_menu->add_action(GAction::create("About", [] (const GAction&) { |     help_menu->add_action(GAction::create("About", [](const GAction&) { | ||||||
|         dbgprintf("FIXME: Implement Help/About\n"); |         dbgprintf("FIXME: Implement Help/About\n"); | ||||||
|     })); |     })); | ||||||
|     menubar->add_menu(move(help_menu)); |     menubar->add_menu(move(help_menu)); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling